K8s应用程序生命周期管理——控制器Deployment
- 一、部署应用程序流程
- 二、Deployment控制器
- 1、应用升级、弹性伸缩、回滚、删除
- 2、滚动升级、回滚机制
- 3、定义Deployment
前言说到K8s程序的生命周期管理我们不得不提到k8s的控制器。其中Deployment是最为常用的controllers,其他控制器还有DaemonSet、StatefulSet、Cronjob等。本篇我们以deployment为例来展开研究,其他控制器我们会逐一研究。
一、部署应用程序流程
-
制作镜像
可以参考以前的文章 Dockerfile编写
-
使用Deployment控制器部署镜像
kubectl create deployment nginx --image=nginx
kubectl get deploy,pods
- 使用Service暴露服务 Nodeport
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get svc,ep
二、Deployment控制器
Deployment是最为常用的controllers(也称为workload)
controllers作用:
- 管理Pod对象
- 使用标签与Pod关联
- 负责Pod维护,如滚动更新、伸缩、副本管理、维护Pod状态等
Deployment功能:
- 管理Pod及ReplicaSet
- 具有上线部署、副本设定、滚动升级、回滚等功能
- 提供声明式更新,例如只更新一个新的Image
ReplicaSet(副本集)功能:
- 协助Deployment做事
- Pod副本数量管理,不断对比当前Pod数量与期望Pod数量
- Deployment每次发布都会创建一个RS作为记录,用于实现回滚
1、应用升级、弹性伸缩、回滚、删除
应用升级
record将升级命令记录到历史命令方便回滚
kubectl set image deployment/web nginx=nginx:1.16 --record
查看升级状态
kubectl rollout status deployment/web
查看RS记录
kubectl get rs
弹性伸缩(手动扩容)
kubectl scale deployment web --replicas=10
回滚
kubectl rollout history deployment/web
kubectl rollout undo deployment/web # 回滚上一个版本
kubectl rollout undo deployment/web --to-revision=2 # 回滚指定版本
删除
kubectl delete deploy/web
kubectl delete svc/web
这里我们以修改image tag为例,演示一下rollout
2、滚动升级、回滚机制
滚动更新
每次只升级一个或多个服务,升级完成加入生产环境,不断执行这个过程,直到集群中的全部旧版升级新版本。
优点:用户无感知
缺点:部署周期长
1个Deployment更新会涉及2个Replicaset,Replicaset会控制Pod副本数量,还会创建RS记录
3、定义Deployment
这是一个典型Deployment的yaml文件,分为两部分:控制器和被控制资源。控制器说白了就是定义的Deployment的属性信息,如name、replicas、seletor等,被控制资源就是本身容器的一些属性,跟我们单独run一个docker类似,指定port、volume等。两者通过labels与matchLabels字段联系在一起,实现Deployment对Pod的管理、控制。
YAML 是一种简洁的非标记语言,语法格式:
- 缩进表示层级关系
- 不支持制表符“tab”缩进,使用空格缩进
- 通常开头缩进 2 个空格
- 字符后缩进 1 个空格,如冒号、逗号等
- “—” 表示YAML格式,一个文件的开始
- “#”注释
对于K8s的维护人员来说,对于各种yaml我们可以看得懂就可以,不一定非要会徒手写yaml。当我们记不住yaml字段的时候
1、从K8s官网查询,每个资源官网都有实例可以参考
2、不方便访问互联网的时候可以使用create、get命令来获取yaml
kubectl create deployment nginx --image=nginx:1.20 -o yaml --dry-run=client > my-deploy.yaml # 使用create创建deployment并获取yaml文件
kubectl get deployment nginx -o yaml > my-deploy.yaml # 从现有deployment生成yaml