颇为阿娇978 发表于 2018-1-5 21:13:12

Replication Controller

  RC保证在同一时间能够运行指定数量的Pod副本,保证Pod总是可用。如果实际Pod数量比指定的多就结束掉多余的,如果实际数量比指定的少就启动缺少的。
  当Pod失败、被删除或被终结时,RC会自动创建新的Pod来保证副本数量,所以即使只有一个Pod,也应该使用RC来进行管理。
  来个简单例子:
  

apiVersion: v1  

kind: ReplicationController//ReplicationController类型  

metadata:  

name: nginx               //pod名字  

spec:  

replicas: 2               //2个副本  

selector:  

app: nginx            //通过这个标签找到生成的pod  

template:               //定义pod模板,在这里不需要定义pod名字,就算定义创建的时候也不会采用这个名字而是.metadata.generateName+5位随机数。  

metadata:  

labels:                //定义标签  

app: nginx            //key:v   这里必须和selector中定义的KV一样  

spec:  

containers:            //rc 的容器重启策略必须是Always(总是重启),这样才能保证容器的副本数正确  

- image: nginx  

name: nginx  

ports:  

- containerPort: 80  

  提示:
  K8S 通过template来生成pod,创建完后模板和pod就没有任何关系了,rc通过 labels来找对应的pod,控制副本
  查询rc
# kubectl get rc nginx
  NAME      DESIRED   CURRENT   READY   AGE
  nginx      2            2                2      1m
  查询pod容器
# kubectl get pod --selector app=nginx
  NAME         READY       STATUS      RESTARTS          AGE
  nginx-2jhlv      1/1            Running            0                     2m
  nginx-hbtqj   1/1               Running            0                     2m
  同时查询rc和rc创建的pod
# kubectl get pod --selector app=nginx --label-columns app
  NAME         READY            STATUS         RESTARTS          AGE       APP
  nginx-2jhlv      1/1                  Running               0                     2m       nginx
  nginx-hbtqj   1/1                  Running                  0                  2m      nginx
  删除pod会后会立刻在拉起一个pod
https://images2015.cnblogs.com/blog/1003074/201707/1003074-20170720213325599-174421858.png
  删除rc后pod也被删除(--cascade=false只删除rc保留创建的pod)
# kubectl delete rc nginx
  replicationcontroller "nginx" deleted
  模板和RC可意分别定义
  1先定义一个模板,然后创建
  

apiVersion: v1  

kind: PodTemplate  

metadata:  

name: my-nginx  

template:  

metadata:  

labels:  

app: nginx  

spec:  

containers:  

- image: nginx  

name: nginx  

ports:  

- containerPort: 80  

  创建后并不会把pod拉起来
# kubectl create -f template.yml
  podtemplate "my-nginx" created
  查看模板池
https://images2015.cnblogs.com/blog/1003074/201707/1003074-20170720214535068-1392009079.png
  2定义rc
  

apiVersion: v1  

kind: ReplicationController  

metadata:  

name: my-nginx  

spec:  

replicas: 2  

templateRef:  

app: nginx        

  这个暂时有问题还无法通过RC拉起来templatekubectl create -f rc.yml
  修改rc模式下的一个pod label
# kubectl label pod nginx-qqf16 app=debug --overwrite
  pod "nginx-qqf16" labeled
  当修改一个pod标签后就摆脱RC控制了,如果将标签在改回去那么将有一个POD被干掉,超过了RC最大副本数
https://images2015.cnblogs.com/blog/1003074/201707/1003074-20170720221108240-1769305910.png
  将标签改回去
https://images2015.cnblogs.com/blog/1003074/201707/1003074-20170720221326927-1377617056.png

弹性伸缩(手动):
https://images2015.cnblogs.com/blog/1003074/201707/1003074-20170721214615245-1814617755.png
  kubectl scale replicationcontroller 【pod-name】 --replicas=1

自动伸缩:
  Kubernetes有一个HPA(Horizontal Pod Autoscaler)的东东,可以实现基于CPU使用率的Pod自动伸缩的功能。 HPA基于Master Node上的kube-controller-manager服务启动参数--horizontal-pod-autoscaler-sync-period定义的时长(默认为30秒),周期性的检测Pod的CPU使用率(需要事先安装heapster)。使用kubeadm初始化的集群,如果需要设置--horizontal-pod-autoscaler-sync-period可以在Master Node上的/etc/kubernetes/manifests/kube-controller-manager.json中修改。
# kubectl create -f nginx.yaml
  replicationcontroller "my-nginx" created
  cpu超过%80就会拉起一个pod,最大5个pod,当cpu使用率小于%80 pod就会缩小
# kubectl autoscale rc my-nginx --min=1 --max=5 --cpu-percent=80
  replicationcontroller "my-nginx" autoscaled
页: [1]
查看完整版本: Replication Controller