Kubernetes(k8s)的Pod控制器介绍和ReplicaSet控制器详细讲解

目录

  • 1. Pod控制器的介绍
  • 2. ReplicaSet(RS)
    • 2.1 概述
    • 2.2 ReplicaSet的创建
      • 2.2.1 查看ReplicaSet
  • 3. ReplicaSet扩缩容
  • 4. 删除ReplicaSet

1. Pod控制器的介绍

在kubernetes中,Pod的创建方式可以分为两类:

  • 自主式Pod:kubernetes直接创建的Pod,这种Pod删除后不会重建
  • 控制器创建的Pod:通过Pod控制器创建的Pod,这种Pod删除之后还会自动重建

Pod控制器是管理Pod的中间层,通过Pod控制器创建符合用户期望状态的指定数量Pod。如果Pod在运行中出现故障,Pod控制器会基于指定的策略重启或重建Pod

有下面几种Pod控制器:

  • ReplicaSet:保证指定数量的Pod运行,并支持Pod数量变更
  • Deployment:通过控制ReplicaSet来控制Pod,并支持镜像版本滚动变更、版本回退
  • Horizontal Pod Autoscaler:可以根据集群负载自动调整Pod的数量,实现削峰填谷
  • DaemonSet:在集群中的指定Node上都运行一个副本,一般用于守护进程类的任务
  • Job:创建出来的Pod只要完成任务就立即退出,用于执行一次性任务
  • CronJob:创建的Pod会周期性的执行,用于执行周期性的任务

2. ReplicaSet(RS)

2.1 概述

ReplicaSet的主要作用是保证一定数量的Pod能够正常运行,一旦Pod发生故障,就会重启或重建。还支持对Pod数量的扩缩容

ReplicaSet的资源清单文件模板

apiVersion: apps/v1                     
kind: ReplicaSet                         
metadata:                                
  name: pod-controller                  # rs名称
  namespace: dev                        # rs所属命名空间 
  labels:                               # 给rs打标签 
    controller: rs 
spec:                                   
  replicas: 3                           # pod副本数量。默认是1
  selector:                             # 选择器,指定该控制器管理哪些pod
    matchLabels:                        # Labels匹配规则。和matchExpressions类似
      app: nginx-pod 
    matchExpressions:                   # Expressions匹配规则。和matchLabels类似
      - {key: app, operator: In, values: ["nginx-pod"]} 
  template:                             # pod副本创建模板。属性和Pod的属性一样 
    metadata: 
      labels: 
        app: nginx-pod 
    spec: 
      containers: 
        - name: nginx 
          image: nginx:latest 
          ports: 
            - name: nginx-port
              containerPort: 80
              protocol: TCP

2.2 ReplicaSet的创建

新建pod-controller.yaml,内容如下:

[root@k8s-master ~]# cat pod-controller.yaml 
apiVersion: apps/v1                     
kind: ReplicaSet                         
metadata:                                
  name: pod-controller
  namespace: dev
  labels:
    controller: rs 
spec:                                   
  replicas: 3
  selector:
    matchLabels:
      app: nginx-pod 
  template:
    metadata: 
      labels: 
        app: nginx-pod 
    spec: 
      containers: 
        - name: nginx 
          image: nginx:latest 
          ports: 
            - name: nginx-port
              containerPort: 80
              protocol: TCP
[root@k8s-master ~]# 
[root@k8s-master ~]# kubectl apply -f pod-controller.yaml 
replicaset.apps/pod-controller created
[root@k8s-master ~]# 

2.2.1 查看ReplicaSet

[root@k8s-master ~]# kubectl get rs pod-controller -n dev -o wide
NAME             DESIRED   CURRENT   READY   AGE     CONTAINERS   IMAGES         SELECTOR
pod-controller   3         3         3       2m20s   nginx        nginx:latest   app=nginx-pod
[root@k8s-master ~]# 
[root@k8s-master ~]# kubectl get pod -n dev -o wide
NAME                   READY   STATUS    RESTARTS   AGE     IP               NODE        NOMINATED NODE   READINESS GATES
pod-controller-54hd6   1/1     Running   0          3m35s   10.244.169.170   k8s-node2              
pod-controller-hwr7j   1/1     Running   0          3m35s   10.244.169.171   k8s-node2              
pod-controller-r4d56   1/1     Running   0          3m35s   10.244.36.102    k8s-node1              
[root@k8s-master ~]# 

3. ReplicaSet扩缩容

方式一:使用以下命令,编辑文本内容:spec: replicas: 4

[root@k8s-master ~]# kubectl edit rs pod-controller -n dev
replicaset.apps/pod-controller edited
[root@k8s-master ~]#

方式二:直接使用命令

[root@k8s-master ~]# kubectl scale rs pod-controller --replicas=2 -n dev
replicaset.apps/pod-controller scaled
[root@k8s-master ~]# 

4. 删除ReplicaSet

会同时删除其管理的Pod。原理是删除ReplicaSet前,会将ReplicaSet的replicas调整为0,等到所有的Pod被删除后,再执行ReplicaSet对象的删除

方式一:直接通过命令

[root@k8s-master ~]# kubectl delete rs pod-controller -n dev
replicaset.apps "pod-controller" deleted
[root@k8s-master ~]#

方式二:通过yaml文件删除

[root@k8s-master ~]# kubectl delete -f pod-controller.yaml
replicaset.apps "pod-controller" deleted
[root@k8s-master ~]#

也可以仅删除ReplicaSet,而不删除Pod

[root@k8s-master ~]# kubectl delete rs pod-controller -n dev --cascade=false
warning: --cascade=false is deprecated (boolean value) and can be replaced with --cascade=orphan.
replicaset.apps "pod-controller" deleted
[root@k8s-master ~]# 

你可能感兴趣的:(Kubernetes,kubernetes,k8s,pod控制器,replicaSet,扩缩容)