Kubernetes使用Replication Controller、Replica Set 管理Pod,是如下场景的良药:
某次运营活动非常成功,网站访问量突然暴增
运行当前
Pod
的节点发生故障了,Pod
不能正常提供服务了服务升级
Kubernetes提供如下资源对象:
Replication Controller(RC):用来部署、升级Pod
Replica Set:新一代Replication Controller
Deployment:方便管理Pod及Replica Set
Replication Controller
简称RC,可保证在任意时间运行Pod的副本数量,满足集群的高可用。Pod失败、被删除或者挂掉后,RC
都会去自动创建新的Pod来保证副本数量
结合资源对象HPA可以根据资源的使用情况来进行自动扩缩容,
下面使用RC
来管理我们前面使用的Nginx的Pod,文件demo.yaml如下:
apiVersion: v1kind: ReplicationControllermetadata:name: demolabels:name: rcspec:replicas: 3selector:name: rctemplate:metadata:labels:name: rcspec:containers:- name: nginx-demoimage: nginxports:- containerPort: 80
YAML格式:
kind:ReplicationController
spec.replicas: 指定Pod副本数量,默认为1
spec.selector: RC通过该属性来筛选要控制的Pod
spec.template: 指定Pod元数据、实例化该Pod下的容器
spec.template.metadata.labels: 注意Pod的labels和spec.selector相同(也可不写spec.selector,这样默认与Pod模板中的metadata.labels相同),
RC
可根据标签控制标签对应的Pod
运行命令kubectl create -f demo.yaml来创建上面的RC
对象,
运行kubectl get rc查看RC
运行kubectl describe rc demo查看具体信息
运行kubectl edit rc demo可对RC
修改下Pod
的副本数量
还可以用RC
来进行滚动升级,比如我们将镜像地址更改为nginx:1.7.9
:
kubectl rolling-update demo --image=nginx:1.7.9
如果Pod
中有多个容器的话,就需要通过修改YAML
文件来进行修改了:
kubectl rolling-update demo -f demo.yaml
如果升级完成后出现了新的问题,想要一键回滚到上一个版本的话,使用RC
只能修改YAML文件,把镜像地址替换成之前的,然后重新滚动升级。
Replication Set(RS)
简称RS
,官方推荐使用RS
和Deployment
来代替RC
,RS
和RC
的功能基本一致,目前唯一的区别就是RC
只支持基于等式的selector
(env=dev或environment!=qa),但RS
还支持基于集合的selector
(env in (dev, qa))
kubectl
命令行工具中关于RC
的大部分命令同样适用于RS
资源对象。在一般情况下,推荐使用Deployment
而不直接使用Replica Set
。
功能总结
(1)确保Pod
数量:确保Kubernetes
中有指定数量的Pod
在运行,多删少加来保证Pod
的副本数量不变。
(2)确保Pod
健康:当Pod
不健康,无法提供正常服务时,RC
也会杀死不健康的Pod
,重新创建新的。
(3)弹性伸缩:在业务高峰或者低峰的时候,可以用过RC
来动态的调整Pod
数量来提供资源的利用率,功效等价使用HPA
资源对象做到自动伸缩。
(4)滚动升级:通过这种平滑的升级方式,来保证整体系统的稳定性




