1. 简述Deployment的升级策略
在Deployment的定义中,可以通过'spec.strategy'指定Pod更新的策略,目前支持两种策略:Recreate(重建)和RollingUpdate(滚动更新),默认值为RollingUpdate。
- Recreate:设置spec.strategy.type=Recreate,表示Deployment在更新Pod时,会先杀掉所有正在运行的Pod,然后创建新的Pod。
- RollingUpdate:设置spec.strategy.type=RollingUpdate,表示Deployment会以滚动更新的方式来逐个更新Pod。同时,可以通过设置spec.strategy.rollingUpdate下的两个参数(maxUnavailable和maxSurge)来控制滚动更新的过程。
2. 简述Deployment滚动升级策略的参数
-
maxUnavailable: 定义在更新过程中最多可以有多少个旧版 Pod 不可用(未就绪)。它可以是:
- 绝对数量(如 "maxUnavailable: 2" 表示最多允许2个Pod不可用)
- 百分比(如 "maxUnavailable: 25%" 表示最多允许25%的Pod不可用)【向下取整】
在更新开始时,系统会确保至少有 (总副本数 - maxUnavailable) 个 Pod 始终处于可用状态以保证服务的整体容量。
-
maxSurge:
定义在更新过程中能额外创建的新版 Pod 数量上限,以加快更新速度或者处理可能因为新版 Pod 启动慢而导致的可用性问题。它也可以是:
- 一个绝对数量(比如 "maxSurge: 1" 表示最多可以额外创建1个新的Pod进行更新)
- 一个百分比(例如 "maxSurge: 20%" 表示最多可以超出原有副本数的20%来创建新的Pod)【向上取整】
3. 简述 Deployment的升级过程
假设deployment的滚动更新参数如下:
replicas: 3
deployment.spec.strategy.type: RollingUpdate
maxUnavailable:25%
maxSurge:25%
通过计算可得出:
3*25%=0.75,maxUnavailable是向下取整 ===> maxUnavailable=0;
3*25%=0.75,maxSurge是向上取整 ===> maxSurge=1;
所以我们得出在整个deployment升级镜像过程中:
pod总数不能超过3+maxSurge=4个;
最小pod可用数为3-maxUnavailable=3个;
具体更新过程如下:
1、deployment创建一个新的replaceset,先新增1个新版本pod,此时pod总数为4个,不能再新增了,再新增就超过pod总数4个了;旧=3,新=1,总=4;
2、减少一个旧版本的pod,此时pod总数为3个,这时不能再减少了,再减少就不满足最小pod可用数3个了;旧=2,新=1,总=3;
3、再新增一个新版本的pod,此时pod总数为4个,不能再新增了;旧=2,新=2,总=4;
4、减少一个旧版本的pod,此时pod总数为3个,这时不能再减少了;旧=1,新=2,总=3;
5、再新增一个新版本的pod,此时pod总数为4个,不能再新增了;旧=1,新=3,总=4;
6、减少一个旧版本的pod,此时pod总数为3个,更新完成,pod都是新版本了;旧=0,新=3,总=3;
4. Deployment常用命令
4.1 基本操作
1.通过 YAML 文件创建一个 Deploymentkubectl apply -f tempalte.yaml
2.显示 Deployment 相关信息1) 查看指定deployment的描述信息(详细)kubectl describe deployment nginx-deployment2) 查看deployment的运行状态kubectl get deployment nginx-deployment3) 列出全部deploymentkubectl get deployments4)查看deployment的ReplicaSet(rs)信息kubectl get rs
3.更新Deployment(应用新的yaml覆盖/指定项更新)1) 直接更新yamlkubectl apply -f deployment-update.yaml2) 更新指定项(以镜像为例)kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.16.1 --record=true
4.基于名称删除 Deploymentkubectl delete deployment nginx-deployment
4.2 扩缩容
1.指定缩放数量# kubectl scale --replicas 指定副本数量kubectl scale deployment/nginx-deployment --replicas=10# 修改yaml的replicas字段值kubectl edit deployment nginx-deployment
2.水平自动缩放(指定最大最小值)kubectl autoscale deployment/nginx-deployment --min=10 --max=15 --cpu-percent=80
4.3 回滚
1.查看回滚历史kubectl rollout history deployment/nginx-deployment
2.查看修订历史的详细信息 (通过--revision 指定版本 )kubectl rollout history deployment/nginx-deployment --revision=2
3.版本回退1)回退当前版本到之前kubectl rollout undo deployment/nginx-deployment2)指定版本进行回退 (--to-revision=2)kubectl rollout undo deployment/nginx-deployment --to-revision=2
4.基于名称查看Deployment上线运行状态kubectl rollout status deployment/nginx-deployment
5.暂停上线过程kubectl rollout pause deployment/nginx-deployment
6.恢复上线过程kubectl rollout resume deployment/nginx-deployment