ReplicaSet 的副本数量、标签选择器、Pod模板都可以随时按需进行修改,修改只对后来新建的Pod有影响。

ReplicaSet 主要字段:

        spec.replicas

        spec.selector.matchLabels

        spec.template

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: rs-example
spec:
  replicas: 2
  selector:
    matchLabels:
      app: rs-demo
  template:
    metadata:
      labels:
        app: rs-demo
    spec:
      containers:
      - name: myapp
        image: nginx
        ports:
        - name: html
          containerPort: 80

查看创建的RS:

kubectl get pods -l app=rs-demo

修改Pod的标签:

        控制器匹配到的rs-demo标签的Pod不足预定数会自动创建新的Pod来补足。

kubectl label pods rs-vtw52 app=rs-demo --overwrit

改回Pod的标签:

        这时控制器匹配到的 rs-demo 标签多出预定数控制器会删除多余的Pod。

kubectl label pods rs-vtw52 app=rs-demo --overwrite

查看Pod资源变动相关事件:

kubectl describe replicaset

Events:
  Type    Reason            Age    From                   Message
  ----    ------            ----   ----                   -------
  Normal  SuccessfulCreate  23m    replicaset-controller  Created pod: rs-vtw52
  Normal  SuccessfulCreate  23m    replicaset-controller  Created pod: rs-5v4dv
  Normal  SuccessfulCreate  10m    replicaset-controller  Created pod: rs-r4p4s
  Normal  SuccessfulDelete  9m16s  replicaset-controller  Deleted pod: rs-r4p4s

升级应用,更新Pod模板:

        应用新的模板后现存的Pod任然是原有的镜像,需要分批次删除原有的Pod来实现滚动更新。

kubectl apply -f replicaSet.yaml
kubectl replace -f replicaSet.yaml

一次性删除所有Pod命令:

kubectl delete pods -l app=rs-demo

Deployment 能够自动实现更完善的滚动更新和回滚。


扩容和缩容


扩容 scale

kubectl scale replicaset rs-example --replicas=5

查看扩容后的数量:

kubectl get replicaset rs-example

缩容:与扩容操作一样。

符合条件则扩容缩容:

        只有当当前副本数等于--current-replicas 定义的数量时才会执行扩锁容,否者返回错误。

kubectl scale replicaset rs --current-replicas=5 --replicas=2


删除


删除 replicaset:

        默认是级联删除,默认删除 replicaset 会连同replicaset管控的Pod一起删除。如果不想删除其管控的各Pod则使用 --cascade=false 选项。

kubectl delete replicaset rs --cascade=false