Mr. Cappuccino的第42杯咖啡——Kubernetes之Pod控制器(一)

Pod控制器介绍

Pod是Kubernetes集群中能够被创建和管理的最小部署单元。所以需要有工具去操作和管理它们的生命周期,这里就需要用到控制器了。
Pod 控制器由Master的kube-controller-manager组件提供,常见的控制器有 Replication Controller、ReplicaSet、Deployment、DaemonSet、StatefulSet、Job 和 CronJob 等,它们分别以不同的方式管理 Pod 资源对象。

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

ReplicaSet

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

apiVersion: apps/v1 # 版本号
kind: ReplicaSet # 类型
metadata:
  name: pc-replicaset # rs名称
  namespace: bubble-dev # 命名空间
spec:
  replicas: 3 # 副本数量
  selector: # 选择器,通过它指定该控制器可以管理哪些Pod
    matchLabels: # 标签匹配规则
      app: nginx-pod 
  template: # 启动pod的模板
    metadata:
      labels:
        app: nginx-pod
    spec:
      containers:
      - name: nginx
        image: nginx:1.17.9
kubectl delete ns bubble-dev
kubectl create ns bubble-dev
vi pc-replicaset.yaml
cat pc-replicaset.yaml
kubectl create -f pc-replicaset.yaml
kubectl describe pods -n bubble-dev
kubectl get pods -n bubble-dev

在这里插入图片描述
在这里插入图片描述

查看ReplicaSet

kubectl get rs pc-replicaset -n bubble-dev -o wide

在这里插入图片描述

弹性扩容
kubectl edit rs pc-replicaset -n bubble-dev

在这里插入图片描述

kubectl get pods -n bubble-dev
kubectl get rs pc-replicaset -n bubble-dev -o wide

在这里插入图片描述

弹性缩容

操作同上(弹性扩容)

kubectl edit rs pc-replicaset -n bubble-dev
kubectl get pods -n bubble-dev
kubectl get rs pc-replicaset -n bubble-dev -o wide

在这里插入图片描述

使用scale命令进行扩容或者缩容
kubectl scale rs pc-replicaset --replicas=4 -n bubble-dev
kubectl get pods -n bubble-dev
kubectl get rs pc-replicaset -n bubble-dev -o wide

在这里插入图片描述

更新镜像
kubectl edit rs pc-replicaset -n bubble-dev
kubectl get rs pc-replicaset -n bubble-dev -o wide

调整nginx的版本
在这里插入图片描述
在这里插入图片描述

删除ReplicaSet
kubectl delete rs pc-replicaset -n bubble-dev

k8s删除ReplicaSet前,会将ReplicaSet的replicas调整为0,等待所有的Pod被删除后,再删除ReplicaSet。

kubectl get rs pc-replicaset -n bubble-dev -o wide

在这里插入图片描述

Deployment

Deployment为Pod和Replica Set(下一代Replication Controller)提供声明式更新。
在这里插入图片描述

Deployment的主要功能如下:

支持ReplicaSet的所有功能;
支持发布的停止、继续;
支持版本滚动更新和版本回退;

apiVersion: apps/v1
kind: Deployment
metadata:
  name: pc-deployment
  namespace: bubble-dev
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx-pod
  template:
    metadata:
      labels:
        app: nginx-pod
    spec:
      containers:
      - name: nginx
        image: nginx:1.17.9
kubectl delete ns bubble-dev
kubectl create ns bubble-dev
vi pc-deployment.yaml
cat pc-deployment.yaml
kubectl create -f pc-deployment.yaml
kubectl describe pods -n bubble-dev
kubectl get pods -n bubble-dev

在这里插入图片描述
在这里插入图片描述

查看Deployment

kubectl get deploy pc-deployment -n bubble-dev -o wide

在这里插入图片描述

弹性扩容与缩容

Deployment也和ReplicaSet一样可以使用命令或者编辑的形式管理Pod的数量

使用编辑配置清单的方式

kubectl edit deploy pc-deployment -n bubble-dev

在这里插入图片描述
在这里插入图片描述
使用scale命令的方式

kubectl scale deploy pc-deployment --replicas=4 -n bubble-dev

在这里插入图片描述

删除Deployment
kubectl delete deploy pc-deployment -n bubble-dev

在这里插入图片描述

更新镜像

Deployment支持两种方式修改镜像:分别是重建更新和滚动更新

重建更新

先杀掉所有已存在的Pod,再创建出新的Pod。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: pc-deployment-recreate
  namespace: bubble-dev
spec:
  strategy: 
    type: Recreate # 重建更新
  replicas: 3
  selector:
    matchLabels:
      app: nginx-pod
  template:
    metadata:
      labels:
        app: nginx-pod
    spec:
      containers:
      - name: nginx
        image: nginx:1.17.9
vi pc-deployment-recreate.yaml
cat pc-deployment-recreate.yaml
kubectl create -f pc-deployment-recreate.yaml

在这里插入图片描述
单独打开一个shell窗口监听

kubectl get pods -n bubble-dev -w

修改镜像版本

kubectl set image deploy pc-deployment-recreate nginx=nginx:1.17.8 -n bubble-dev

在这里插入图片描述
从单独打开的shell窗口中可以看到Deployment是先把Pod全部杀死,然后再重新创建并启动新的Pod。
在这里插入图片描述

滚动更新

先杀死一部分,再启动一部分,直到全部更新完成。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: pc-deployment-rollingupdate
  namespace: bubble-dev
spec:
  strategy: 
    type: RollingUpdate # 滚动更新
    rollingUpdate: # 当type为RollingUpdate时生效,用于为RollingUpdate设置参数
      maxUnavailable: 25% # 用来指定在升级过程中不可用Pod的最大数量,默认为25%
      maxSurge: 25% # 用来指定在升级过程中,可以超过期望的Pod的最大数量,默认为25%
  replicas: 3
  selector:
    matchLabels:
      app: nginx-pod
  template:
    metadata:
      labels:
        app: nginx-pod
    spec:
      containers:
      - name: nginx
        image: nginx:1.17.9
kubectl delete deploy pc-deployment-recreate -n bubble-dev
vi pc-deployment-rollingupdate.yaml
cat pc-deployment-rollingupdate.yaml
kubectl create -f pc-deployment-rollingupdate.yaml

在这里插入图片描述

单独打开一个shell窗口监听

kubectl get pods -n bubble-dev -w

修改镜像版本

kubectl set image deploy pc-deployment-rollingupdate nginx=nginx:1.17.8 -n bubble-dev

在这里插入图片描述

kubectl get deploy pc-deployment-rollingupdate -n bubble-dev -o wide

在这里插入图片描述
从单独打开的shell窗口中可以看到Deployment是先杀死掉部分Pod,然后再重新创建并启动部分Pod,直至全部更新完成。
在这里插入图片描述

版本回退
kubetl rollout 参数 deploy xx  # 支持下面的选择
# status 显示当前升级的状态
# history 显示升级历史记录
# pause 暂停版本升级过程
# resume 继续已经暂停的版本升级过程
# restart 重启版本升级过程
# undo 回滚到上一级版本 (可以使用--to-revision回滚到指定的版本)

如果需要实现版本回退功能,在执行yaml文件时需要携带附加参数(–record)

kubectl delete deploy pc-deployment-rollingupdate -n bubble-dev
kubectl create -f pc-deployment-rollingupdate.yaml --record

修改镜像版本

kubectl set image deploy pc-deployment-rollingupdate nginx=nginx:1.17.8 -n bubble-dev

查看rs

kubectl get rs -n bubble-dev

查看版本更新的状态

kubectl rollout status deploy pc-deployment-rollingupdate -n bubble-dev

查看所有版本

kubectl rollout history deploy pc-deployment-rollingupdate -n bubble-dev

根据指定的版本回退

kubectl rollout undo deployment pc-deployment-rollingupdate --to-revision=1 -n bubble-dev

查看当前版本

kubectl get deploy -n bubble-dev -o wide

在这里插入图片描述
当前版本已经回退到1.17.9啦!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值