Replication Controller(简称rc)用来管理Pod的副本,保证集群中存在指定数量的Pod副本。集群中副本的数量大于指定数量,则会停止指定数量之外的多余容器数量,反之,则会启动少于指定数量个数的容器,保证数量不变。Replication Controller是实现弹性伸缩、动态扩容和滚动升级的核心。
RC 的主要功能点:
确保pod数量:指定某个服务在Kubernetes中有相应数量的Pod在运行;
确保pod健康:当pod不健康,运行出错或者无法提供服务时,会杀死不健康pod并重新创建,保持pod数量一致;
弹性伸缩:当业务高峰期的时候可以设置扩增pod数量,配合监控就可以做自动伸缩了;
滚动升级:也就是蓝绿发布,当一个pod使用的镜像更新,采用滚动升级模式,RC会自动一个个pod的进行升级,关闭一个pod的同时进行升级,且在原镜像基础上创建一个新pod,当一个pod更新完成再关闭一个旧镜像pod。
1,创建rc
基于yml创建,案例yml文件:
--- apiVersion: v1 kind: ReplicationController metadata: name: ng-rc spec: replicas: 2 selector: app: ng-rc template: metadata: labels: app: ng-rc spec: containers: - name: ng-rc image: nginx ports: - containerPort: 80
kind: ReplicationController #定义这是一个RC
replicas: 2 #定义将创建2个pod
image: nginx #使用nginx镜像
containerPort :80 #容器监听端口号(nginx 默认监听80,如果自定义监听,设置为镜像内监听端口即可)
最简单基础的nginx 就定义好了,启动命令为:
kubectl create -f ng-rc.yml
创建完成。
2,查看rc
先查看pod:
[root@kube-master-01 yaml]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE ng-rc-07h4v 1/1 Running 2 1d 172.40.3.2 10.1.14.16 ng-rc-3j7nr 1/1 Running 0 29s 172.40.7.3 10.1.14.15 swh-ng 1/1 Running 6 1d 172.40.3.4 10.1.14.16
查看rc:
[root@kube-master-01 yaml]# kubectl get rc ng-rc -o wide NAME DESIRED CURRENT READY AGE CONTAINER(S) IMAGE(S) SELECTOR ng-rc 2 2 2 1d ng-rc nginx app=ng-rc
通过pod和rc可见,基于yml创建的pod以及rc副本都是成功的,rc副本各存在于node1,node2节点。通过get rc 可以看到副本的一些详细信息,比如pod名称,副本数量,镜像名称以及打的标签信息等。
3,弹性伸缩和扩容
案例默认有两个副本,这里我们分别进行弹性伸缩:
增加副本数量:
[root@kube-master-01 yaml]# kubectl scale rc ng-rc --replicas=4 replicationcontroller "ng-rc" scaled [root@kube-master-01 yaml]# kubectl get rc ng-rc -o wide NAME DESIRED CURRENT READY AGE CONTAINER(S) IMAGE(S) SELECTOR ng-rc 4 4 2 1d ng-rc nginx app=ng-rc [root@kube-master-01 yaml]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE ng-rc-07h4v 1/1 Running 2 1d 172.40.3.2 10.1.14.16 ng-rc-3j7nr 1/1 Running 0 4m 172.40.7.3 10.1.14.15 ng-rc-bll4x 1/1 Running 0 8s 172.40.7.2 10.1.14.15 ng-rc-fn856 1/1 Running 0 8s 172.40.3.3 10.1.14.16 swh-ng 1/1 Running 6 1d 172.40.3.4 10.1.14.16
缩减副本数量和上边一样,只不过把副本数量修改即可:
[root@kube-master-01 yaml]# kubectl scale rc ng-rc --replicas=1 replicationcontroller "ng-rc" scaled [root@kube-master-01 yaml]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE ng-rc-07h4v 1/1 Running 2 1d 172.40.3.2 10.1.14.16 swh-ng 1/1 Running 6 1d 172.40.3.4 10.1.14.16 [root@kube-master-01 yaml]# kubectl get rc ng-rc -o wide NAME DESIRED CURRENT READY AGE CONTAINER(S) IMAGE(S) SELECTOR ng-rc 1 1 1 1d ng-rc nginx app=ng-rc
参考文章:
k8s 配置rc:https://www.cnyunwei.cc/archives/1559
和我一步步部署 kubernetes 集群 :https://github.com/opsnull/follow-me-install-kubernetes-cluster/
转载请注明:21运维 » k8s入门系列之rc基础篇