前面提到的普通的滚动更新,都是修改完sts立即就会发生更新操作
而还有一种更新的策略为, OnDelete,即只有在 pod 被删除时会进行更新操作
还是先看一下web这个sts的当前更新策略如下:
这里我们修改,更新策略,kubectl edit sts web 命令,更新后保存,更新策略的块配置如下:
updateStrategy: type: OnDelete
1、更新nginx的版本为 1.7.9 ,然后可以通过如下看到,所有pod都没有进行更新
[root@k8s-master ~]# kubectl patch sts web --type='json' -p='[{"op": "replace", "path": "/spec/template/spec/containers/0/image", "value":"nginx:1.7.9"}]' statefulset.apps/web patched [root@k8s-master ~]# [root@k8s-master ~]# [root@k8s-master ~]# kubectl describe po web-0 | grep Image: Image: nginx:1.9.1 [root@k8s-master ~]# kubectl describe po web-1 | grep Image: Image: nginx:1.9.1 [root@k8s-master ~]# kubectl describe po web-2 | grep Image: Image: nginx:1.9.1 [root@k8s-master ~]# kubectl describe po web-3 | grep Image: Image: nginx:1.9.1 [root@k8s-master ~]# kubectl describe po web-4 | grep Image: Image: nginx:1.9.1 [root@k8s-master ~]#
2、此时我们可以删除一个pod,如web-2,再进行观察,可以看到,只有被删除的web-2,才会重新生成,更新到指定的版本
[root@k8s-master ~]# kubectl delete po web-2 pod "web-2" deleted [root@k8s-master ~]# kubectl describe po web-0 | grep Image: Image: nginx:1.9.1 [root@k8s-master ~]# kubectl describe po web-1 | grep Image: Image: nginx:1.9.1 [root@k8s-master ~]# kubectl describe po web-2 | grep Image: Image: nginx:1.7.9 [root@k8s-master ~]# kubectl describe po web-3 | grep Image: Image: nginx:1.9.1 [root@k8s-master ~]# kubectl describe po web-4 | grep Image: Image: nginx:1.9.1 [root@k8s-master ~]#
3、最后,没有问题的,再依次将所有的pod进行删除,完成所有的更新
[root@k8s-master ~]# kubectl delete po web-0 web-1 web-3 web-4 pod "web-0" deleted pod "web-1" deleted pod "web-3" deleted pod "web-4" deleted [root@k8s-master ~]#