k8s(八)Pod控制器

k8s的Pod控制器详解
主要介绍各种Pod控制器的详细使用。

Pod控制器的介绍

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

  • 自主式Pod:kubernetes直接创建出来的Pod,这种Pod删除后就没有了,也不会重建。
  • 控制器创建Pod:通过Pod控制器创建的Pod,这种Pod删除之后还会自动重建。

Pod控制器:Pod控制器是管理Pod的中间层,使用了Pod控制器之后,我们只需要告诉Pod控制器,想要多少个什么样的Pod就可以了,它就会创建出满足条件的Pod并确保每一个Pod处于用户期望的状态,如果Pod在运行中出现故障,控制器会基于指定的策略重启或重建Pod。
在kubernetes中,有很多类型的Pod控制器,每种都有自己的适合的场景,常见的有下面这些:

  • ReplicationController:比较原始的Pod控制器,已经被废弃,由ReplicaSet替代。
  • ReplicaSet:保证指定数量的Pod运行,并支持Pod数量变更,镜像版本变更。
  • Deployment:通过控制ReplicaSet来控制Pod,并支持滚动升级、版本回退。
  • Horizontal Pod Autoscaler:可以根据集群负载自动调整Pod的数量,实现削峰填谷。
  • DaemonSet:在集群中的指定Node上都运行一个副本,一般用于守护进程类的任务。
  • Job:它创建出来的Pod只要完成任务就立即退出,用于执行一次性任务。
  • CronJob:它创建的Pod会周期性的执行,用于执行周期性的任务。
  • StatefulSet:管理有状态的应用。

ReplicaSet(RS)

在这里插入图片描述

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

ReplicaSet的资源清单文件:

apiVersion: apps/v1 # 版本号 
kind: ReplicaSet # 类型 
metadata: # 元数据 
  name: # rs名称
  namespace: # 所属命名空间 
  labels: #标签 
    controller: rs 
spec: # 详情描述 
  replicas: 3 # 副本数量 
  selector: # 选择器,通过它指定该控制器管理哪些po
    matchLabels: # Labels匹配规则 
      app: nginx-pod 
    matchExpressions: # Expressions匹配规则 
      - {
   key: app, operator: In, values: [nginx-pod]} 
template: # 模板,当副本数量不足时,会根据下面的模板创建pod副本 
  metadata: 
    labels: 
      app: nginx-pod 
  spec: 
    containers: 
      - name: nginx 
        image: nginx:1.17.1 
        ports: 
        - containerPort: 80

在这里,需要新了解的配置项就是spec下面几个选项:

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

创建ReplicaSet
• 创建pc-replicaset.yaml文件,内容如下:

apiVersion: apps/v1 # 版本号
kind: ReplicaSet # 类型
metadata: # 元数据
  name: pc-replicaset # rs名称
  namespace: dev # 命名类型
spec: # 详细描述
  replicas: 3 # 副本数量
  selector: # 选择器,通过它指定该控制器可以管理哪些Pod
    matchLabels: # Labels匹配规则
      app: nginx-pod
  template: # 模块 当副本数据不足的时候,会根据下面的模板创建Pod副本
    metadata:
      labels:
        app: nginx-pod
    spec:
      containers:
        - name: nginx # 容器名称
          image: nginx:1.17.1 # 容器需要的镜像地址
          ports:
            - containerPort: 80 # 容器所监听的端口
# 创建rs:
kubectl create -f pc-replicaset.yaml

# 查看rs:
kubectl get rs pc-replicaset -n dev -o wide

# 查看当前控制器创建出来的Pod(控制器创建出来的Pod的名称是在控制器名称后面拼接了-xxx随机码):
kubectl get pod -n dev

扩缩容

# 编辑rs的副本数量,修改spec:replicas:6即可。
kubectl edit rs pc-replicaset -n dev
# 使用scale命令实现扩缩容,后面加上--replicas=n直接指定目标数量即可。
kubectl scale rs pc-replicaset --replicas=2 -n dev

镜像升级

# 编辑rs的容器镜像,修改spec:containers:image为nginx:1.17.2即可。
kubectl edit rs pc-replicaset -n dev

# 使用set命令实现镜像升级。
语法
kubectl set image rs rs名称 容器名称=镜像版本 -n 命名空间
kubectl set image rs pc-replicaset nginx=nginx:1.17.1 -n dev

删除ReplicaSet

# 使用kubectl delete rs 命令会删除ReplicaSet和其管理的Pod。
在kubernetes删除ReplicaSet前,会将ReplicaSet的replicas调整为0,等到所有的Pod被删除后,再执行ReplicaSet对象的删除

kubectl delete rs pc-replicaset -n dev

# 如果希望仅仅删除ReplicaSet对象(保留Pod),只需要在使用kubectl delete rs命令的时候添加--cascade=false选项(不推荐)
kubectl delete rs pc-replicaset -n dev --cascade=false

# 使用yaml直接删除(推荐):
kubectl delete -f pc-replicaset.yaml

Deployment(Deploy)

概述
为了更好的解决服务编排的问题,kubernetes在v1.2版本开始,引入了Deployment控制器。值得一提的是,Deployment控制器并不直接管理Pod,而是通过管理ReplicaSet来间接管理Pod,即:Deployment管理ReplicaSet,ReplicaSet管理Pod。所以Deployment的功能比ReplicaSet强大。
在这里插入图片描述

Deployment的主要功能如下:

  • 支持ReplicaSet的所有功能。
  • 支持发布的停止、继续。
  • 支持版本滚动更新和版本回退。
  • Deployment的资源清单:
apiVersion: apps/v1 # 版本号 
kind: Deployment # 类型 
metadata: # 元数据 
  name: # rs名称 
  namespace: # 所属命名空间 
  labels: #标签 
    controller: deploy 
spec: # 详情描述 
  replicas: 3 # 副本数量 
  revisionHistoryLimit: 3 # 保留历史版本,默认为10 
  paused: false # 暂停部署,默认是false 
  progressDeadlineSeconds: 600 # 部署超时时间(s),默认是600 
  strategy: # 策略 
    type: RollingUpdate # 滚动更新策略 
    rollingUpdate: # 滚动更新 
      maxSurge: 30% # 最大额外可以存在的副本数,可以为百分比,也可以为整数 maxUnavailable: 30% # 最大不可用状态的    Pod 的最大值,可以为百分比,也可以为整数 
  selector: # 选择器,通过它指定该控制器管理哪些pod 
    matchLabels: # Labels匹配规则 
      app: nginx-pod 
    matchExpressions: # Expressions匹配规则 
      - {
   key: app, operator: In, values: [nginx-pod]} 
  template: # 模板,当副本数量不足时,会根据下面的模板创建pod副本 
    metadata: 
      labels: 
        app: nginx-pod 
    sp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值