Kubernetes(k8s)的Pod控制器介绍和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   <none>           <none>
pod-controller-hwr7j   1/1     Running   0          3m35s   10.244.169.171   k8s-node2   <none>           <none>
pod-controller-r4d56   1/1     Running   0          3m35s   10.244.36.102    k8s-node1   <none>           <none>
[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 ~]# 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
K8s中的Pod控制器是用来管理和控制Pod的一种机制。Pod控制器负责创建、启动、停止、重启和删除Pod,以及监控和调节Pod的状态。Pod和Controller之间是通过label标签来建立关系,Controller又被称为控制器工作负载。Pod控制器可以根据需要创建多个Pod实例,以满足应用程序的需求。 常见的Pod控制器包括Deployment、ReplicaSet、StatefulSet和DaemonSet等。Deployment控制器K8s中最常用和最重要的Pod控制器之一。它通过创建和管理ReplicaSet来实现对Pod控制。Deployment控制器可以定义应用的副本数、升级和回滚策略,以及弹性伸缩等功能。通过使用Deployment控制器,可以方便地部署和管理应用程序。 在使用K8s时,可以使用yaml文件来定义Pod控制器的配置和参数。通过指定不同的字段和数值,可以实现对Pod控制器的定制化配置。例如,可以在yaml文件中指定应用程序的镜像、资源需求、副本数等信息。 总结来说,K8s中的Pod控制器是用来管理和控制Pod的机制,通过label标签与Pod建立关系。常见的Pod控制器包括Deployment、ReplicaSet、StatefulSet和DaemonSet。使用yaml文件可以对Pod控制器进行配置和定制化。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [k8s技术交流,包括Pod概念和特点Pod种类Pod镜像拉取策略Pod重启策略Pod控制器Pod探针、Pod调度](https://download.csdn.net/download/lingmeng447/85358750)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【k8s】6、pod控制器](https://blog.csdn.net/hancoder/article/details/118064163)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值