ReplicaSet

replication Controller

replication controller简称RC,是kubernetes系统中的核心概念之一,简单来说,它其实定义了一个期望的场景,即声明某种pod的副本数量在任意时刻都复合某个预期值,所以RC的定义包含以下部分:

  • pod期待的副本数量
  • 用于筛选目标pod的Label Selector
  • 当pod的副本数量小于期望值时,用于创建新的pod的pod模板(template)

ReplicaSet

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 explain rs
kubectl explain rs.spec
kubectl explain rs.spec.template.spec

部署

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模板中的镜像版本,可以实现滚动升级
posted @ 2021-09-22 11:57  请务必优秀  阅读(206)  评论(0编辑  收藏  举报