更新和回滚

更新和回滚

在 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

  1. 金丝雀部署

旧版本的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
posted @ 2021-10-20 19:49  mingtian是吧  阅读(126)  评论(0编辑  收藏  举报