K8S中RC模块和Deployment模块区别
1、RC模块解读
RC是kubernetes中核心概念之一,简单说它定义了一个期望的场景,即声明某种pod的副本数量在任意时刻都符合某个预期值。
RC定义了如下几个部分:
1)pod期待的副本教
2)用于筛选目标pod的Label Selector
3)创建pod副本的模板(template)RC一旦被提交到kubernetes集群后,Master节点上的Controller Manager组件就会接收到该通知,它会定期巡检集群中存活的pod,并确保pod数量符合RC的定义值。可以说通过RC,kubernetes实现了用户应用集群的高可用性,并且大大减少了管理员在传统IT环境中不得不做的诸多手工运维工作,比如编写主机监控脚本、应用监控脚本、故障恢复处理脚本等。
RC工作流程(假如,集群中有3个Node):
1)RC定义2个pod副本
2)假设系统会在2个Node上(Node1和Node2)创建pod
3)如果Node2上的pod(pod2)意外终止,这很有可能是因为Node2宕机
4)则会创建一个新的pod,假设会在Node3上创建pod3,当然也有可能在Node1上创建pod3
RC中动态修改pod副本数量:
kubectl scale rc <rc name>--replicas=n
[root@k8s ~]# kubectl scale rc mysql --replicas=2
replicationcontroller "mysql" scaled
利用动态修改pod的副本数,可以实现应用的动态升级(滚动升级):
1)以新版本的镜像定义新的RC,但pod要和旧版本保持一致(由Label决定)
2)新版本每增加1个pod,旧版本就减少一个pod,始终保持固定的值
3)最终旧版本pod数为0,全部为新版本
删除RC
kubectl delete rc <rc name>
删除RC后,RC对应的pod也会被删除掉
2、Deployment模块解读
在1.2版本引入的概念,目的是为了解决pod编排问题,在内部使用了Replica Set,它和RC比较,相似度为90%以上,可以认为是RC的升级版。跟RC比较,最大的一个特点是可以知道pod部署的进度。
Deployment示例:
[root@k8s ~]# vim tomcat-deployment.yaml
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: frontend spec: replicas: 1 selector: matchLabels: tier: frontend matchExpressions: - {key: tier, operator: In, values: [frontend]} template: metadata: labels: app: app-demo tier: frontend spec: containers: - name: tomcat-demo image: tomcat imagePullPolicy: IfNotPresent ports: - containerPort: 8080
[root@k8s ~]# kubectl create -f tomcat-deployment.yaml
deployment "frontend" created
【注】deployment比RC先进,但是RC并没有被完全抛弃。
作者:UStarGao
链接:https://www.starcto.com/k8s/92.html
来源:STARCTO
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
UCloud云平台推荐
随便看看
- 2021-11-03Redis持久化解决方案实操
- 2021-08-03Elastic stack日志分析集群部署
- 2021-09-29NTP时间服务器部署
- 2022-03-31MongoDB分片集群安装部署教程
- 2022-05-27MongoDB慢查询日志之Profiling配置