kubernetes deployment 升级pod的时候,旧的有4个,怎么保证只升级一个,测试没问题后,在升级其余的3个?

难以入眠 发表于: 2022-01-04   最后更新时间: 2022-01-04 11:08:59   1,396 游览

1、deployment 运行了4个pod ,版本0.0.1

2、现在要将pod升级为0.0.2

3、只升级一个pod,即1个0.0.2的,3个0.0.1的,怎么保证我的请求能到0.0.2的pod进行测试,没有问题后,再将0.0.1的全部升级为0.0.2.有问题的话,回滚到0.0.1

发表于 2022-01-04

暂停

这个需要基于滚动升级,实现一个变通的方式,跟金丝雀发布一样,你可以看看这篇文章:

Kubernetes(k8s)之金丝雀发布(灰度)

kubectl rollout pause deployment myapp-deploy -n test

主要是用到其中的暂停,你测试完成没问题后,恢复继续滚动升级。

升级的比例

最核心的问题是,为了保障第一次只更新1个,你需要借助滚动升级策略的

maxSurgemaxUnavailable用来控制滚动更新的更新策略(升级的比例)

修改更新策略最多不可用0个,最大不能超过1个

kubectl patch deployment myapp-deploy -p '{"spec":{"strategy":{"rollingUpdate":{"maxSurge":1,"maxUnavailable":0}}}}' -n test

这样,就会新发一个新的pod。

这时,你紧接着执行暂停,停止继续滚动升级。

如果确认无误,可以调整该比例,加速后面的3个版本升级,如按25%的递进:

kubectl patch deployment myapp-deploy -p '{"spec":{"strategy":{"rollingUpdate":{"maxSurge":25,"maxUnavailable":25}}}}' -n test

描述:

rollingUpdate:
  maxSurge: 25%
  maxUnavailable: 25%
type: RollingUpdate
你的答案

查看kubernetes相关的其他问题或提一个您自己的问题