Kubernetes探索-Deployment面试

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 文件创建一个 Deployment
  kubectl apply -f tempalte.yaml
2.显示 Deployment 相关信息
  1) 查看指定deployment的描述信息(详细)
    kubectl describe deployment nginx-deployment
  2) 查看deployment的运行状态
    kubectl get deployment nginx-deployment
  3) 列出全部deployment
    kubectl get deployments
  4)查看deployment的ReplicaSet(rs)信息
    kubectl get rs
3.更新Deployment(应用新的yaml覆盖/指定项更新)
  1) 直接更新yaml
    kubectl apply -f deployment-update.yaml
  2) 更新指定项(以镜像为例)
    kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.16.1 --record=true
4.基于名称删除 Deployment
    kubectl 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-deployment
  2)指定版本进行回退 (--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

  • 25
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值