1 介绍
1.1 概念
ReplicationController(副本控制器)是一种k8s资源,确保它的pod始终保持运行状态。它是用于复制和在异常情况下重新调度节点的k8s组件。
1.2 优点
1)RC可以确保一个pod(或多个pod副本)持续运行,在现有pod丢失时可以启动新的pod;
2)集群节点发生故障时,RC为其上面的pod(受RC控制的节点上的pod)创建替代副本;
3)轻松实现pod的水平伸缩。
2 RC工作原理
2.1 RC工作图
RC会持续监控正在运行的pod列表,并保证相应的“类型”的(标签选择器)pod数目与期望的相符。如果正在运行的pod数目小于期望值,则RC会根据pod模板创建新的副本;若正在运行的pod太多,RC将会删除多余的副本。
2.2 RC组成
1)label selector(标签选择器),用于确定RC作用域中有哪些pod;(其更改后,RC会停止关注这些现有的pod)
2)replica count(副本个数),指定应运行的pod数目;(其更改后会影响到现有的pod)
3)pod template(pod模板),用于创建新的pod副本。(其更改后,只会影响新创建的pod)
3 RC使用
3.1 创建RC
写好yaml文件:
- 版本号:apiVersion为v1
- RC定义:kind配置为ReplicationController;
- RC名字:metadata.name
- pod实例数:spec.replicas
- pod选择器:spec.selector中配置pod选择器,来决定RC的操作对象;
- pod模板:spec.template
by k8s in action
创建RC命令
$ kubectl create -f xxx.yaml
RC对pod数量不足时(API Server允许客户端监听资源和资源列表的更改),产生响应:通过创建一个新的替代pod来响应pod的删除操作,
3.2 查看RC
查看RC命令
$ kubectl get rc
rc是replicationcontroller的简写;
查看RC附加信息
$ kubectl describe rc rc_name
3.3 更改已托管的pod标签
更改pod选择器
$ kubectl label pod pod_name app=app_new_name --overwrite
通过--overwrite
覆盖原标签信息
查看pod指定标签信息
$ kubectl get pods -L app
通过-L app
选项在列表中显示app标签
注意
若更改了RC的标签选择器(而不是更改pod的标签),则会造成所有的原RC控制的pod脱离RC管理,RC会创建新的pod来匹配新的标签选择器。
3.4 修改RC的pod模板
更改RC的pod模板只会影响之后创建的pod,并且不会影响现有的pod。
RC扩容
方法1:
$ kubectl scale rc rc_name --replicas=5
方法2:
$ kubectl edit rc rc_name
更改spec.replicas键的值
第一种是命令式,第二种是声明式。
声明式
声明式是指定了期望的状态,相比较于命令式而言。
1)命令式是指需要step-by-step的编写命令或脚本,需要设想目标环境的各种情况,处理各种边缘问题,脚本在不同的环境里运行可能会产生不同的结果。不具备事务性,脚本执行过程中出现意外时,可能就会出现中间状态。
2)声明式是使用配置文件直接描述最终状态,不必考虑流程和目标环境的各种细节,这种方式便于文档化和版本管理,重复部署不会产生不一致的结果,在不同的目标环境下也是可以产生一致的部署结果。具备事务性,要么成功,要么失败。
3.5 删除RC
删除RC及其管理的pod
$ kubectl delete rc rc_name
删除RC,保留pod
$ kubectl delete rc rc_name --cascade=false
通过--cascade=false
保证RC的pod不受管理