Replication Controller (简称RC),RC是Kubernetes系统中的核心概念之一,简单来说,它定义了一个期望的场景,即声明某种Pod的副本数量在任意时刻都符合某个预期值
RC定义了如下
1.Pod期待的副本数(replicas)
2.用于筛选目标Pod的Label Seletcor(标签选择器)
3.当Pod的副本小于预期(replicas)时,用于创建新Pod的Pod模板(template)
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创建详情 [
例子: 我们以3个Node节点为例,演示Pod副本数量自动控制的机制,加入我们的RC里定义abcdocker这个Pod需要保持3个副本,系统可能在其中两台上创建Pod
假如Node2 上的Pod 2意外终止,根据RC定义的replicas数量2,Kubernetes将会自动创建并启动一个新的Pod,以保证集群中有2个服务可用
在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个
演示2:我们将tomcat的Pod输了由原来的7个修改为1个
提示:deployment 后面的tomcat是我们在yaml文件中定义的 url:什么是yaml文件
除了通过命令的方式修改,我们还可以通过yaml文件的方式进行调试
注意: 删除RC并不会影响通过该RC已创建号的Pod。为了删除所有Pod,可以设置replicas的值为0,然后更新该RC。另外,kubectl提供了stop
和delete
命令来一次性删除RC和RC控制的全部Pod
由于Replication Controller与Kubernetes代码中的模块Replication Controller同名,同时这个词也无法准确表述它的本意,所以在Kubernetes1.2
时,它就升级成另一个新的概念—Replica Set,官方解释为**“下一代的RC”**
它与RC当前存在的唯一区别是:Replica Sets支持基于集合的Label selector(Set-based selector基于集合的标签选择器),而RC只支持基于等式的Label Selector(equality-based selector基于等式),这使得Replica Set的功能更强
matchExpressions 是一个pod的选择器条件的list 。
selector:
matchLabels:
tier: frontend
matchExpressions:
- {key: tier, operator: In, values: [frontend]}
kubectl命令行工具适用于RC的绝大部分命令都同样适用于Replica Set,当前我们很少的单独是哦那个Replica Set,它主要被Deployment这个更高层的资源对象所使用,从而形成一整套Pod创建、删除、更新的编排机制。当我们使用Deployment时,无须关心它是如何创建和维护Replica Set的,这一切都是自动发生的。
RC(Replica Set)功能
ent这个更高层的资源对象所使用,从而形成一整套Pod创建、删除、更新的编排机制。当我们使用Deployment时,无须关心它是如何创建和维护Replica Set的,这一切都是自动发生的。
RC(Replica Set)功能
1.在大多数情况下,我们定义一个RC实现Pod的创建过程及副本数量的自动控制 2.RC里包括完整的Pod定义模板 3.RC通过Label Selector机制实现对Pod副本的自动控制。 4.通过改变RC里的Pod副本数量,可以实现Pod的扩容或缩容功能 5.通过改变RC里的Pod目标中的镜像版本,可以实现Pod的滚动升级功能