Kubernetes----ReplicaSet控制器
作者:redrose2100   类别:    日期:2022-05-23 13:43:22    阅读:1147 次   消耗积分:0 分

一、ReplicaSet控制器简介

1.1 ReplicaSet控制器简介

ReplicaSet控制器的主要作用是保证一定数量的pod能能够正常运行,它会持续监听这些pod的运行状态,一旦pod发生故障,就会重启或重建,同时它还支持对pod数量的扩缩容和版本镜像的升级

1.2 ReplicaSet控制资源清单文件

  1. apiVersion: apps/v1 # 版本号
  2. kind: ReplicaSet # 类型
  3. metadata: # 元数据
  4. name: # rs名称
  5. namespace: # 所属命名空间
  6. labels: # 标签
  7. controller: rs
  8. spec: # 性情描述
  9. replicas: 3 # 副本数量
  10. selector: # 选择器,通过它指定该控制器管理哪些pod
  11. matchLabels: # label匹配规则
  12. app: nginx-pod
  13. matchExpressions: # Expression匹配规则
  14. - {key: app, operator: In, values: [nginx-pod]}
  15. template: # 模板,当副本数量不足时,会根据下面的额模板创建pod副本
  16. metadata:
  17. labels:
  18. app: nginx-pod
  19. spec:
  20. containers:
  21. - name: nginx
  22. image: nginx:1.17.1
  23. ports:
  24. - containerPort:80

这里面spec中的常用的几个参数含义:

  • replicas:指定部分数量,其实就是当前rs创建出来的pod的数量,默认为1
  • selector:选择器,它的作用是建立pod控制器和pod之间的关联关系,采用的Label Selector机制,在pod模板上 定义label,在控制器上定义选择器,就可以表明当前控制器能管理哪些pod了
  • template:模板,就是当前控制器创建pod所使用的模板,里面其实就是pod的定义

二、ReplicaSet实例演示

2.1 ReplicaSet控制器创建

编辑replicaset.yaml文件,内容如下:

  1. apiVersion: v1
  2. kind: Namespace
  3. metadata:
  4. name: dev
  5. ---
  6. apiVersion: apps/v1
  7. kind: ReplicaSet
  8. metadata:
  9. name: pc-replicaset
  10. namespace: dev
  11. spec:
  12. replicas: 3
  13. selector:
  14. matchLabels:
  15. app: nginx-pod
  16. template:
  17. metadata:
  18. labels:
  19. app: nginx-pod
  20. spec:
  21. containers:
  22. - name: nginx
  23. image: nginx:1.17.1

使用如下命令创建资源

  1. [root@master pod_controller]# kubectl apply -f replicaset.yaml
  2. namespace/dev created
  3. replicaset.apps/pc-replicaset created
  4. [root@master pod_controller]#

通过如下命令可以查询到创建结果

  1. [root@master pod_controller]# kubectl get rs,pod -n dev -o wide
  2. NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
  3. replicaset.apps/pc-replicaset 3 3 3 2m57s nginx nginx:1.17.1 app=nginx-pod
  4. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  5. pod/pc-replicaset-74djl 1/1 Running 0 2m57s 10.244.2.50 node2 <none> <none>
  6. pod/pc-replicaset-m5tmz 1/1 Running 0 2m57s 10.244.1.23 node1 <none> <none>
  7. pod/pc-replicaset-wlvcm 1/1 Running 0 2m57s 10.244.1.24 node1 <none> <none>
  8. [root@master pod_controller]#

2.2 ReplicaSet实现扩缩容

2.2.1 通过修改配置文件方式实现

编辑replicaset.yaml文件,将replicas值设置为6个,如下

  1. apiVersion: v1
  2. kind: Namespace
  3. metadata:
  4. name: dev
  5. ---
  6. apiVersion: apps/v1
  7. kind: ReplicaSet
  8. metadata:
  9. name: pc-replicaset
  10. namespace: dev
  11. spec:
  12. replicas: 6
  13. selector:
  14. matchLabels:
  15. app: nginx-pod
  16. template:
  17. metadata:
  18. labels:
  19. app: nginx-pod
  20. spec:
  21. containers:
  22. - name: nginx
  23. image: nginx:1.17.1

然后通过如下命令使配置生效

  1. [root@master pod_controller]# kubectl apply -f replicaset.yaml
  2. namespace/dev unchanged
  3. replicaset.apps/pc-replicaset configured
  4. [root@master pod_controller]#

通过如下命令可以查看到配置已经生效

  1. [root@master pod_controller]# kubectl get rs,pod -n dev
  2. NAME DESIRED CURRENT READY AGE
  3. replicaset.apps/pc-replicaset 6 6 6 8m43s
  4. NAME READY STATUS RESTARTS AGE
  5. pod/pc-replicaset-2bcwc 1/1 Running 0 39s
  6. pod/pc-replicaset-74djl 1/1 Running 0 8m43s
  7. pod/pc-replicaset-7744x 1/1 Running 0 39s
  8. pod/pc-replicaset-7rqz2 1/1 Running 0 39s
  9. pod/pc-replicaset-m5tmz 1/1 Running 0 8m43s
  10. pod/pc-replicaset-wlvcm 1/1 Running 0 8m43s
  11. [root@master pod_controller]#

2.2.2 通过命令的方式扩缩容

如下,通过如下命令将pod数量缩小到2个

  1. [root@master pod_controller]# kubectl scale rs pc-replicaset --replicas=2 -n dev
  2. replicaset.apps/pc-replicaset scaled
  3. [root@master pod_controller]#

然后使用如下命令查询,可以发现缩容已经完成

  1. [root@master pod_controller]# kubectl get rs,pod -n dev
  2. NAME DESIRED CURRENT READY AGE
  3. replicaset.apps/pc-replicaset 2 2 2 11m
  4. NAME READY STATUS RESTARTS AGE
  5. pod/pc-replicaset-m5tmz 1/1 Running 0 11m
  6. pod/pc-replicaset-wlvcm 1/1 Running 0 11m
  7. [root@master pod_controller]#

2.3 ReplicaSet实现镜像版本的升降级

2.3.1 通过修改配置文件的方式升级镜像版本

编辑yaml文件,修改镜像版本为1.17.3,如下:

  1. apiVersion: v1
  2. kind: Namespace
  3. metadata:
  4. name: dev
  5. ---
  6. apiVersion: apps/v1
  7. kind: ReplicaSet
  8. metadata:
  9. name: pc-replicaset
  10. namespace: dev
  11. spec:
  12. replicas: 2
  13. selector:
  14. matchLabels:
  15. app: nginx-pod
  16. template:
  17. metadata:
  18. labels:
  19. app: nginx-pod
  20. spec:
  21. containers:
  22. - name: nginx
  23. image: nginx:1.17.3

然后使用如下命令使配置生效

  1. [root@master pod_controller]# kubectl apply -f replicaset.yaml
  2. namespace/dev unchanged
  3. replicaset.apps/pc-replicaset configured
  4. [root@master pod_controller]#

通过如下命令,可以发现镜像版本已经升级

  1. [root@master pod_controller]# kubectl get rs,pod -n dev -o wide
  2. NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
  3. replicaset.apps/pc-replicaset 2 2 2 15m nginx nginx:1.17.3 app=nginx-pod
  4. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  5. pod/pc-replicaset-m5tmz 1/1 Running 0 15m 10.244.1.23 node1 <none> <none>
  6. pod/pc-replicaset-wlvcm 1/1 Running 0 15m 10.244.1.24 node1 <none> <none>
  7. [root@master pod_controller]#

2.3.2 通过命令的方式对镜像版本升降级

使用如下命令,将镜像版本再降到1.17.1

  1. [root@master pod_controller]# kubectl set image rs pc-replicaset nginx=nginx:1.17.1 -n dev
  2. replicaset.apps/pc-replicaset image updated
  3. [root@master pod_controller]#

通过如下命令查询,可以发现已经生效

  1. [root@master pod_controller]# kubectl get rs,pod -n dev -o wide
  2. NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
  3. replicaset.apps/pc-replicaset 2 2 2 17m nginx nginx:1.17.1 app=nginx-pod
  4. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  5. pod/pc-replicaset-m5tmz 1/1 Running 0 17m 10.244.1.23 node1 <none> <none>
  6. pod/pc-replicaset-wlvcm 1/1 Running 0 17m 10.244.1.24 node1 <none> <none>
  7. [root@master pod_controller]#

2.4 删除ReplicaSet

2.4.1 命令行方式删除ReplicaSet以及Pod

使用如下命令删除,在删除ReplicaSet前,会先把pod数量调整为0,等所有pod都删除后,再删除ReplicaSet

  1. kubectl delete rs pc-replicaset -n dev

2.4.2 仅删除ReplicaSet,保留Pod

使用如下命令即可

  1. kubectl delete rs pc-replicaset -n dev --cascade=false

2.4.3 使用yaml文件删除

使用如下命令(推荐)

  1. kubectl delete -f replicaset.yaml
始终坚持开源开放共享精神,同时感谢您的充电鼓励和支持!
版权所有,转载本站文章请注明出处:redrose2100, http://blog.redrose2100.com/article/270