Kubernetes基本概念和术语 • Replication Controller

概念介绍

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

  • Replication Controller 保证了在所有时间内,都有特定数量的Pod副本正在运行,如果太多了,Replication Controller就杀死几个,如果太少了,Replication Controller会新建几个,和直接创建的pod不同的是,Replication Controller会替换掉那些删除的或者被终止的pod,不管删除的原因是什么(维护阿,更新啊,Replication Controller都不关心)。
  • 基于这个理由,我们建议即使是只创建一个pod,我们也要使用Replication Controller。Replication Controller 就像一个进程管理器,监管着不同node上的多个pod,而不是单单监控一个node上的pod,Replication Controller 会委派本地容器来启动一些节点上服务(Kubelet ,Docker)。
  • Replication Controller只会对那些RestartPolicy = Always的Pod的生效,(RestartPolicy的默认值就是Always),Replication Controller 不会去管理那些有不同启动策略pod
主要定义

基于对RC描述,RC 的定义包括以下几个部分:

  • Pod 期待的副本数量
  • 用于筛选目标 Pod 的 Label Selector
  • 当 Pod 的副本数量小于预期数量时,用于创建新 Pod 的 Pod 模板(template)
主要用途
  • 多数情况下,我们通过定义一个 RC 实现 Pod 的创建及副本数量的自动控制
  • 在 RC 里包括完整的 Pod 定义模板
  • RC 通过 Label Selector 机制实现对Pod副本的自动控制
  • 通过改变 RC里的 副本数量, 可以实现 Pod 的扩容或缩容
  • 通过改变 RC 里 Pod模板中的镜像版本,可以实现Pod的滚动升级
示例
  • 定义
# tomcat-demo-rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
  name: frontend 		# Label
spec:
  replicas: 1 			# 定义Pod副本数量
  selector:
    tier: frontend 		# 设置标签选择表达式
  template: 			# 设置Pod模板
    metadata:
      labels:
        app: app-demo
        tier: frontend
    spec:
      containers:
      - name: tomcat-demo
      	image: tomcat
      	imagePullPolicy: IfNotPresent
      	env:
     	- name: GET_HOST_FROM
     	  value: dns
		ports:
		- containerPort: 80      	  
  • 创建 RC
[root@hoas kubernates]# kubectl create -f tomcat-demo-rc.yaml 
replicationcontroller "frontend" created
[root@hoas kubernates]# kubectl get rc
NAME       DESIRED   CURRENT   READY     AGE
frontend   1         1         0         25s

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

特性
  • 动态缩放(Scalling)

在运行时,我们可以通过修改RC的副本数量,来实现Pod的动态缩放(Scalling)
以下代码通过 kubectl scale rc frontend --replicas=3 动态给名为 frontend 的 RC 动态扩容到3个Pod。

[root@hoas kubernates]# kubectl scale rc frontend --replicas=3
replicationcontroller "frontend" scaled
[root@hoas kubernates]# 
[root@hoas kubernates]# kubectl get rc
NAME       DESIRED   CURRENT   READY     AGE
frontend   3         3         0         8m
[root@hoas kubernates]# kubectl get pods
NAME             READY     STATUS              RESTARTS   AGE
frontend-9p3fl   0/1       ContainerCreating   0          15s
frontend-fxp42   0/1       ContainerCreating   0          15s
frontend-zkh82   0/1       ContainerCreating   0          8m

  • 滚动升级(Rolling Update)

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

Replication Controller & Replica Set
  • Replica Set,官方解释为“下一代 RC”,定义与 kubernate 1.2中。
  • RC 只支持基于等式的 Label Selector (equality-based selector),而 Replica Set 支持基于集合的 Label Selector(Set-based selector),这使得 Replica Set 功能更强。

我们当前很少单独使用 Replica Set,它主要被 Deployment 这个更高层的资源对象所使用,从而形成一整套 Pod 创建、删除、更新的编排机制。
我们在使用Deployment 时,无需关心它如何创建和维护 Replica Set 的,这一切都是自动发生的。
Replica Set 与 Deployment 这两个重要的资源对象逐步代替了之前的 RC 的作用,是 Kubernates 1.3 里的 Pod 自动扩容(伸缩)这个告警功能实现的基础,也将继续在 Kubernates 未来的版本中发挥重要的作用

参考:
https://www.kubernetes.org.cn/replication-controller-kubernetes

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值