Kubernetes的基本概念和术语-Replication Controller

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

  1. Pod期待的副本数量。
  2. 用于筛选目标Pod的Label Selector。
  3. 当Pod的副本数量小于预期数量时,用于创建新Pod的Pod模板(template)
复制代码
apiVersion: v1
kind: ReplicationController
metadata:
  name: frontend
spec:
  replicas: 1
  selector:
    tier: frontend
  template
    metadata:
      lables:
        app: app-demo
        tier: frontend
    spec:
      containers:
      - name: tomcat-demo
        image: tomcat
        imagePullPolicy: ifNotPresent
        env:
        - name: GET_HOST_FROM
          value: dns
        ports:
        - containersPort: 80
 
复制代码

在我们定义了一个RC并将其提交到Kubernetes集群中后,Master上的Controller Manager组件就得到通知,定期巡检系统中当前存活的目标Pod,并确保目标Pod实例的数量刚好等于此RC的期望值,如果有过多的Pod副本在运行,系统就会停掉一些Pod,否则系统会再自动创建一些Pod。可以说,通过RC,Kubernetes实现了用户应用集群的高可用性,并且大大减少了系统管理员在传统IT环境中需要完成的许多手工运维工作(如主机监控脚本、应用监控脚本、故障恢复脚本等)。

下面以有3个Node的集群为例,说明Kubernetes如何通过RC来实现Pod副本数量自动控制的机制。假如在我们的RC里定义redis-slave这个Pod需要保持两个副本,系统将可能在其中的两个Node上创建Pod。图1.9描述了在两个Node上创建redis-slave Pod的情形。

 

 

 图1.9 在两个Node上创建redis-slave Pod

假设Node 2上的Pod 2意外终止,则根据RC定义的replicas数量2,Kubernetes将会自动创建并启动一个新的Pod,以保证在整个集群中始终有两个redis-slave Pod运行。

如图1.10所示,系统可能选择Node 3或者Node 1来创建一个新的Pod。

图1.10 根据RC定义创建新的Pod

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

kubectl scale rc redis-slave --replicas=3
scaled

执行结果

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

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

复制代码
apiVersion: extensions/v1betal
kind: Replicaset
metadata:
  name: frontend
spec:
  selector:
    matchLables:
        tier: frontend
    metchExpressions:
    - {key: tier, operator: In, values: [fronted]}
template
...................................................................
 
复制代码

kubectl命令行工具适用于RC的绝大部分命令同样适用于Replica Set。此外,我们当前很少单独使用Replica Set,它主要被Deployment这个更高层的资源对象所使用,从而形成一整套Pod创建、删除、更新的编排机制。我们在使用Deployment时,无须关心它是如何创建和维护Replica Set的,这一切都是自动发生的。

Replica Set与Deployment这两个重要的资源对象逐步替代了之前RC的作用,是Kubernetes 1.3里Pod自动扩容(伸缩)这个告警功能实现的基础,也将继续在Kubernetes未来的版本中发挥重要的作用。

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

  •  在大多数情况下,我们通过定义一个RC实现Pod的创建及副本数量的自动控制。
  •  在RC里包括完整的Pod定义模板。
  •  RC通过Label Selector机制实现对Pod副本的自动控制。
  •  通过改变RC里的Pod副本数量,可以实现Pod的扩容或缩容。
  •  通过改变RC里Pod模板中的镜像版本,可以实现Pod的滚动升级。

 

posted @   星火撩原  阅读(71)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2020-02-01 SSH配置文件
2020-02-01 SSH日常命令
2020-02-01 如何创建一个swap文件
2020-02-01 生成随机密码
2020-02-01 stress-Linux系统压力测试工具使用及系统负载很高的几种场景测试
2020-02-01 execsnoop-短时进程追踪工具
2020-02-01 pstree-显示子进程的父进程
点击右上角即可分享
微信分享提示