暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Kubernetes之Replication Controller 与 Replica Set

蛮懒 2020-06-20
639

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: v1
kind: ReplicationController
metadata:
name: demo
labels:
name: rc
spec:
replicas: 3
selector:
name: rc
template:
metadata:
labels:
name: rc
spec:
containers:
- name: nginx-demo
image: nginx
ports:
- 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)滚动升级:通过这种平滑的升级方式,来保证整体系统的稳定性


文章转载自蛮懒,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论