栏目头部广告

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

K8S中RC模块和Deployment模块区别(图1)

[root@k8s ~]# kubectl scale rc mysql --replicas=2

replicationcontroller "mysql" scaled

K8S中RC模块和Deployment模块区别(图2)

K8S中RC模块和Deployment模块区别(图3)

K8S中RC模块和Deployment模块区别(图4)

利用动态修改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

K8S中RC模块和Deployment模块区别(图5)

K8S中RC模块和Deployment模块区别(图6)

【注】deploymentRC先进,但是RC并没有被完全抛弃。

作者:UStarGao
链接:https://www.starcto.com/k8s/92.html
来源:STARCTO
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处

UCloud云平台推荐


UCloud新用户专属注册连接

UCloud CDN超值特惠专场

UCloud全球云主机(UHost/VPS)大促页面

UCloud快杰云主机大促页面

文章页广告

随便看看

栏目底部广告
`