kubernetes-Deployment

工作负载控制器是什么

工作负载控制器(Workload Controllers)是k8s的一个抽象概念,用于更高层次对象,部署和管理pod
常用工作负载控制器:

  • Deployment:无状态应用部署
  • StatefulSet:有状态应用部署
  • DaemonSet:确保所有Node运行同一个Pod
  • Job:一次性任务
  • Cronjob:定时任务

控制器的作用:

  • 管理Pod对象
  • 使用标签与Pod关联
  • 控制器实现了Pod 的运维,例如滚动更新、伸缩、副本管理、维护Pod状态等

直接去创建pod有很多功能使用不了的,都是需要控制器去来管理,所以实际生产环境Pod用作测试比较多

Deployment

Deployment可以管理Pod和ReplicaSet,具有上线部署、副本设定、滚动升级、回滚等功能,他的应用场景主要在网站、API、微服务等

Deployment使用流程如下

第一步:部署镜像

部署使用的镜像,镜像来源与两个位置(docker hub、私有仓库)
在这里只是简单的测试一下Deployment的使用流程,以nginx版本为例去进行测试,生产环境中的部署方式类似

# 部署nginx镜像,尽量使用yaml去部署,yaml可以通过kubectl create命令去生成后修改,也可以自己去手写
# 生成一个deployment的yaml,然后去部署nginx
[root@k8s-master ~]# kubectl create deployment web --image=nginx --dry-run=client -o yaml > deployment.yaml
kubectl apply -f deployment.yaml
# 生成一个service的yaml
[root@k8s-master ~]# kubectl expose deployment web --port=80 --target-port=80 --type=NodePort --dry-run=client -o yaml > services.yaml
[root@k8s-master ~]# kubectl apply -f services.yaml

访问下这个nginx页面,看到版本号为1.21.6,那么我们来坐下滚动升级
在这里插入图片描述

第二步:滚动升级

滚动发布是指每次只升级一个或多个服务,升级完成后加入生产环境,不断执行这个过程,直到集群中的全部旧版本升级新版本
应用的升级有三种方式

  • 修改yaml,然后kubectl apply -f进行升级
  • 使用命令去升级,kubectl set image deployment/web nginx=nginx:1.18
  • 使用系统编辑器打开,kubectl edit deployment/web

第一种方式,修改yaml文件进行升级

在这里插入图片描述>再去访问nginx页面,nginx版本号变更
在这里插入图片描述

第二种方式,使用命令升级

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

第三种方式,使用系统的编辑器打开修改

改完即生效,我将其中的image改为了nginx:1.20
在这里插入图片描述
在这里插入图片描述

深入理解下k8s是如何实现滚动升级的
master另开两个终端持续查看在滚动更新时情况

先将副本数改为3,然后重新更新一下
在这里插入图片描述

# 一台机器查看nginx请求头信息,这样子可以看到nginx版本号为多少
[root@k8s-master ~]# for i in {1..1000};do curl -I 10.96.93.68 ;sleep 1;don

在这里插入图片描述

# 一台机器查看副本数状态
[root@k8s-master ~]# kubectl get replicaset -w

在这里插入图片描述

开始更新版本

[root@k8s-master ~]# kubectl set image deployment web nginx=nginx:1.15

更新好后他会一个一个去替换掉
在这里插入图片描述
还可以拿这条命令去查看升级情况
在这里插入图片描述

滚动更新策略

maxSurge:滚动更新过程中最大Pod副本数,确保在更新时启动的Pod数量比期望(replicas)Pod数量最大多出25%
maxUnavailable:滚动更新过程中最大不可用Pod副本数,确保在更新时最大25%Pod数量不可用,即确保75%Pod数量是可用状态
其实默认就是25%的

# 案例
spec:
  replicas: 3
  revisionHistoryLimit: 10 # RS历史版本保存数量
  selector:
    matchLabels:
      app: web
    strategy:
      rollingUpdate:
        maxSurge: 25%
        maxUnavailable: 25%
      type: RollingUpdate
第三步:水平扩容

他是通过replicas参数来控制Pod数量的(也是由ReplicaSet来控制的),有两种方法

  • 修改yaml里的replicas值,在apply
  • 使用命令,kubectl scale deployment web --replicas=10
第四步:回滚

发布的版本不合适需要退回到上个版本或者指定版本,可以使用以下命令来实现

  • kubectl rollout history deployment web # 查看历史发布版本,web是项目所在deployment的名称,我这里的名称就为web
  • kubectl rollout undo deployment web # 回滚到上一个版本
  • kubectl rollout undo deployment web --to-revison=2 # 回滚历史指定版本

可以使用以下命令来查看历史版本和镜像版本的对应关系,不过信息太多需要使用正则语句去匹配出来

  • kubectl describe rs | grep -C 9 revision #找到关键字revision后向下查询9行
第五步:应用下线

删除即可

  • kubectl delete deploy web
  • kubectl delete svc web
ReplicaSet控制器

ReplicaSet:副本集,主要维护Pod副本数量,不断对比当前Pod数量与期望Pod数量
ReplicaSet用途:Deployment每次发布都会创建一个RS作为记录,用于实现滚动升级和回滚

  • kubectl get rs # 查看RS记录
  • kubectl rollout history deployment web # 版本对应RS记录

DaemonSet

DaemonSet应用场景:网络插件(kube-proxy、calico)、其他Agent
DaemonSet功能:

  • 在每一个Node上运行一个Pod
  • 新加入的Node也同样会自动运行一个Pod

DaemonSet和deployment的使用方式类似,只是不支持副本集,因为默认每个节点都有一个

Job

Job分为普通任务(Job)和定时任务(CronJob)

  • 一次性执行
    应用场景:离线数据处理,视频解码等业务
# 案例
apiVersion: batch/v1
kind: Job
metadata:
  name: pi
spec:
  template:
    spec:
      containers:
      - name: pi
        image: perl
        command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restarPollicy: Never

CronJob

CronJob用于实现定时任务,像Linux的Crontab一样

  • 定时任务

应用场景:通知,备份

# 案例
apiVersion: batch/v1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"  # 每分钟运行一次
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            args:
            - /bin/sh
            - -c
            - date; echo Hello hahaha
          restartPolicy: OnFailure
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值