更新和回滚
更新和回滚
在 relicasets 和 deployment 中存在 spec.strategy 指令指定更新策略
1.重建执行删除完毕一个创建一个
strategy:
type: Recreate
2.滚动更新 按照更新策略滚动更新
strategy:
rollingUpdate:
maxSurge: 25% # 更新期间可调度的最大 Pod 数量超过所需数量的pod。可以是百分比或具体是数字
maxUnavailable: 25% # 更新期间最多不可达的pod数量,可以是百分比或具体是数字
type: RollingUpdate
revisionHistoryLimit 是一个可选字段,用来设定出于会滚目的所要保留的旧 ReplicaSet 数量.系统保留 10 个旧 ReplicaSet```
在statefulset 中存在updateStrategy的更新策略
配置位置: statefulset.spec.updateStrategy
当template中内容变更是,默认使用rollingUpdate 更新所有pod,而partition的功能在于帮使用者模拟一种金丝雀更新的效果。假如你的statefuset 存在0,1,2 三个副本,你只希望对1,2副本进行更新。可以把partition设置为1。这样无论你重建pod,还是pod意外重启,新的配置都 不会对0副本造成影响。
updateStrategy:
type: RollingUpdate
rollingUpdate:
partition: 0
默认情况下你一旦修改了statefulset.spec.template中的内容,k8s 都会让pod朝着预期的方向更新【也就是你会看到pod被重建了】,当我们不希望pod立即重启时可以把更新类型改为 OnDelete
updateStrategy:
type: OnDelete
3.蓝绿
旧版本的deployment 不变,新建一个deployment 。等待新的deployment 的就绪后通过修改service 把流量调度到新的pod
- 金丝雀部署
旧版本的deployment 不变,新建一个deployment 。其他不变,同时访问多个版本
5.影子部署
在istio 中通过 VirtualServer 部署
6.A/B测试
在istio 中通过 VirtualServer 部署
7.回滚
rollout 用于部署回滚,可以作用于 deploy
ds
statefulsets
命令 | 子命令 | |
---|---|---|
kubectl rollout | status | |
undo | ||
restart | kubectl rollout restart deployment/abc |
|
pause/resume | ||
history |
回滚到指定版本
kubectl rollout undo deployment/openvpn --to-revision=3
查看指定版本的更新信息
kubectl rollout history deployment/openvpn --revision=1