美文网首页
K8S-pod之ReplicaSet

K8S-pod之ReplicaSet

作者: david161 | 来源:发表于2022-03-12 21:24 被阅读0次

ReplicationController用来确保容器应用的副本数始终保持在用户定义的副本数,即如果有容器异常退出,会自动创建新的Pod来替代;而如果异常多出来的容器也会自动回收。
在新版本的Kubernetes中建议使用ReplicaSet来取代ReplicationController。ReplicaSet跟ReplicationController没有本质的不同,只是名字不一样,并且ReplicaSet支持集合式的selector。
虽然ReplicaSet可以独立使用,但一般还是建议使用 Deployment 来自动管理ReplicaSet,这样就无需担心跟其他机制的不兼容问题(比如ReplicaSet不支持rolling-update但Deployment支持)。

ReplicaSet模板说明

apiVersion: apps/v1 #api版本定义 
kind: ReplicaSet #定义资源类型为ReplicaSet 
metadata: #元数据定义 
    name: myapp 
    namespace: default 
spec: #ReplicaSet的规格定义 
    replicas: 2 #定义副本数量为2个 
    selector: #标签选择器,定义匹配pod的标签 
        matchLabels: 
            app: myapp 
            release: canary 
    template: #pod的模板定义 
        metadata: #pod的元数据定义 
            name: myapp-pod #自定义pod的名称 
            labels: #定义pod的标签,需要和上面定义的标签一致,也可以多出其他标签 
                app: myapp 
                release: canary 
                environment: qa 
         spec: #pod的规格定义 
             containers: #容器定义 
             - name: myapp-container #容器名称 
               image: nginx:1.17.10-alpine #容器镜像 
               ports: #暴露端口 
               - name: http 
                 containerPort: 80

可以通过kubectl命令行方式获取更加详细信息

kubectl explain rs 
kubectl explain rs.spec 
kubectl explain rs.spec.template.spec
部署ReplicaSet

controller/replicasetdemo.yml

apiVersion: apps/v1 
kind: ReplicaSet 
metadata: 
  name: replicasetdemo 
  labels: 
    app: replicasetdemo 
spec: 
  replicas: 3 
  template: 
    metadata: 
      name: replicasetdemo 
      labels: 
        app: replicasetdemo 
    spec: 
      containers: 
        - name: replicasetdemo 
          image: nginx:1.17.10-alpine 
          imagePullPolicy: IfNotPresent 
          ports: 
            - containerPort: 80 
       restartPolicy: Always 
  selector: 
    matchLabels: 
      app: replicasetdemo
运行ReplicaSet
运行ReplicaSet 
kubectl apply -f replicasetdemo.yml 

查看rs控制器 
kubectl get rs 

查看pod信息 
kubectl get pod 
查看pod详细信息
kubectl describe pod replicasetdemo-7fdd7b5f67-5gzfg 

测试controller控制器下的pod删除、重新被controller控制器拉起 
kubectl delete pod --all 
kubectl get pod 

修改pod的副本数量:通过命令行方式 
kubectl scale replicaset replicasetdemo --replicas=8 
kubectl get rs 

修改pod的副本数量:通过资源清单方式 
kubectl edit replicasets.apps replicasetdemo 
kubectl get rs 

显示pod的标签 
kubectl get pod --show-labels 
修改pod标签(label) 
kubectl label pod replicasetdemo-652lc app=lagou --overwrite=True 
再次显示pod的标签:发现多了一个pod,原来的rs中又重新拉起一个pod,说明rs是通过label去管理pod 
kubectl get pod --show-labels 

删除rs 
kubectl delete rs replicasetdemo
总结

kubectl命令行工具适用于RC的绝大部分命令同样适用于ReplicaSet,此外,我们当前很少单独适用ReplicaSet,它主要被Deployment这个更高层的资源对象所使用,从而形成一整套Pod创建,删除,更新的编排机制,我们在使用Deployment时无需关心它是如何维护和创建ReplicaSet的,这一切都是自动发生的
最后,总结一下RC(ReplicaSet)的一些特性和作用:
在绝大多数情况下,我们通过定义一个RC实现Pod的创建及副本数量的自动控制
在RC里包括完整的Pod定义模板
RC通过Label Selector机制实现对Pod副本的自动控制
通过改变RC里的Pod副本数量,可以实现Pod的扩容和缩容
通过改变RC里Pod模板中的镜像版本,可以实现滚动升级

相关文章

网友评论

      本文标题:K8S-pod之ReplicaSet

      本文链接:https://www.haomeiwen.com/subject/fgnarrtx.html