Kubernetes RC

Kubernetes 滚动更新及回滚


RC介绍

Replication Controller (简称RC),RC是Kubernetes系统中的核心概念之一,简单来说,它定义了一个期望的场景,即声明某种Pod的副本数量在任意时刻都符合某个预期值

RC定义了如下

1.Pod期待的副本数(replicas) 2.用于筛选目标Pod的Label Seletcor(标签选择器) 3.当Pod的副本小于预期(replicas)时,用于创建新Pod的Pod模板(template)

RC主要功能

  • 确保Pod数量: 它会确保Kubernetes中有指定数量的Pod在运行,如果少于指定数量的Pod,RC就会创建新的,反之会删除多余的,保证Pod的副本数量不变
  • 确保Pod健康: 当Pod不健康,RC也不会杀死不健康的Pod,重新创建新的
  • 弹性伸缩: 在业务高峰或者低峰的时候,可以用RC来动态调整Pod数量来提供资源的利用率吧,当然也可以使用HPA来实现
  • 滚动升级: 滚动升级是一种平滑的升级方式,通过逐步替换的策略,保证整体系统的稳定性

RC例子演示

当我们定义了一个RC并提交到Kubernetes集群中以后,Master节点上的Controller Manager组件就得到通知,定期巡检系统中当前存活的目标Pod,并确保目标Pod实力的数量刚好等于此RC的期望值,如果有过多的Pod副本在运行,系统就会停掉一些Pod,否则系统就会再自动创建一些Pod。 可以说,通过RC,Kubernetes实现了用户应用集群的高可用性,并大大减少了传统IT需要手动的工作

---
apiVersion: v1
kind: ReplicationController
metadata:
  name: rc-demo
  labels:
     app: rc
spec:
  replicas: 3   <=========== 配置Pod数量
  selector:
    app: rc
  template:
    metadata:
      labels: 
        app: rc
    spec:
      containers:
        - name: nginx-demo
          image: nginx
          ports:
          - containerPort: 80

查看结果RC数量

[root@abcdocker yaml]# kubectl get rc
NAME      DESIRED   CURRENT   READY   AGE
rc-demo   3         3         3       5m19s

DESIRED   #rc设置的数量
CURRENT   #已经创建的数量
READY     #准备好的数量

查看Pod数量及状态

[root@abcdocker yaml]# kubectl get po
NAME            READY   STATUS    RESTARTS   AGE
rc-demo-78c69   1/1     Running   0          4m31s
rc-demo-97w7x   1/1     Running   0          4m31s
rc-demo-lmbzr   1/1     Running   0          72s

同时可以使用kubectl describe rc [rc-name]查看rc创建详情 -w1671

例子:我们以3个Node节点为例,演示Pod副本数量自动控制的机制,加入我们的RC里定义abcdocker这个Pod需要保持3个副本,系统可能在其中两台上创建Pod

RC演示1

假如Node2 上的Pod 2意外终止,根据RC定义的replicas数量2,Kubernetes将会自动创建并启动一个新的Pod,以保证集群中有2个服务可用

RC演示2


RC动态缩放

RC演示3

在Pod运行时,我们可以通过修改RC的副本数量,来实现Pod动态缩放Scaling功能,这也可以通过过kubectl scale命令来一键完成

扩展Pod副本到3
kubectl scale rc [rc名称] --replicas=3 

缩减副本到1
kubectl scale rc [rc名称] --replicas=1

演示1: 我们将tomcat的Pod数量由原来的3个更改为7个 -w1009

演示2:我们将tomcat的Pod输了由原来的7个修改为1个 -w1052

提示:deployment 后面的tomcat是我们在yaml文件中定义的 url:什么是yaml文件

除了通过命令的方式修改,我们还可以通过yaml文件的方式进行调试 -w1026

注意: 删除RC并不会影响通过该RC已创建号的Pod。为了删除所有Pod,可以设置replicas的值为0,然后更新该RC。另外,kubectl提供了stopdelete命令来一次性删除RC和RC控制的全部Pod

Copyright © i4t.com 2019 all right reserved,powered by Gitbook该文件修订时间: 2019-11-21 16:30:47

results matching ""

    No results matching ""