Kubernetes & Replication Controller

Kubernetes & Replication Controller

RC是Kubernetes系统中的核心概念之一,简单来说,它其实定义了一个期望的场景,即声明某种Pod的副本数量在任意时刻都符合某个预期值,所以RC的定义包括如下几个部分。

  • ◎ Pod期待的副本数量。
  • ◎ 用于筛选目标Pod的Label Selector。
  • ◎ 当Pod的副本数量小于预期数量时,用于创建新Pod的Pod模板(template)。

如下所示:

apiVersion: v1
kind: ReplicationController
metadata:
  name: myweb
spec:
  replicas: 5
  selector:
    app: myweb
  template:
    metadata:
      labels:
        app: myweb
    spec:
      containers:
      - name: myweb
        image: kubeguide/tomcat-app:v1
        ports:
        - containerPort: 8080
        env:
        - name: MYSQL_SERVICE_HOST
          value: 'mysql'
        - name: MYSQL_SERVICE_PORT
          value: '3306'

在我们定义了一个RC并将其提交到Kubernetes集群中后,Master上的Controller Manager组件就得到通知,定期巡检系统中当前存活的目标Pod,并确保目标Pod实例的数量刚好等于此RC的期望值,如果有过多的Pod副本在运行,系统就会停掉一些Pod,否则系统会再自动创建一些Pod。

可以说,通过RC,Kubernetes实现了用户应用集群的高可用性,并且大大减少了系统管理员在传统IT环境中需要完成的许多手工运维工作(如主机监控脚本、应用监控脚本、故障恢复脚本等)。

此外,在运行时,我们可以通过修改RC的副本数量,来实现Pod的动态缩放(Scaling)

# 查看rc数量
roverliang@roverliangdeMac-mini ~ % kubectl get rc
NAME    DESIRED   CURRENT   READY   AGE
mysql   1         1         1       5h56m
myweb   5         5         5       5h37m

#调整Rc数量
roverliang@roverliangdeMac-mini ~ % kubectl scale rc myweb --replicas=3
replicationcontroller/myweb scaled

#查看RC数量
roverliang@roverliangdeMac-mini ~ % kubectl get rc
NAME    DESIRED   CURRENT   READY   AGE
mysql   1         1         1       5h56m
myweb   3         3         3       5h37m

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

应用升级时,通常会使用一个新的容器镜像版本替代旧版本。我们希望系统平滑升级,比如在当前系统中有10个对应的旧版本的Pod,则最佳的系统升级方式是旧版本的Pod每停止一个,就同时创建一个新版本的Pod,在整个升级过程中此消彼长,而运行中的Pod数量始终是10个,几分钟以后,当所有的Pod都已经是新版本时,系统升级完成。通过RC机制Kubernetes很容易就实现了这种高级实用的特性,被称为“滚动升级”(Rolling Update)。

总结一下RC(Replica Set)的一些特性与作用。

  • 在大多数情况下,我们通过定义一个RC实现Pod的创建及副本数量的自动控制。

  • RC通过Label Selector机制实现对Pod副本的自动控制。

  • 通过改变RC里的Pod副本数量,可以实现Pod的扩容或缩容。

  • 通过改变RC里Pod模板中的镜像版本,可以实现Pod的滚动升级。

posted @ 2020-08-04 18:13  roverliang  阅读(117)  评论(0编辑  收藏  举报