ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
StatefulSet 可以使用字段`spec.updateStrategy.type`设置更新策略,可以用于更新 StatefulSet 中 Pod 的 container images、resource requests、limits、labels、以及 annotations 等,目前支持两种更新策略: * `RolingUpdate`:默认策略,更新 StatefulSet 模板后,自动删除旧的 Pod 并创建新的 Pod,并且更新顺序与序号索引相反 * `OnDelete`:更新 StatefulSet 模板后,只有手动删除了旧的 Pod 才会创建新的 Pod 比如我们使用默认策略更新容器的镜像,首先新开一个终端监控 Pod 的变化过程: ~~~bash kubectl get pods -w -l app=nginx ~~~ 更新 Pod 的镜像为 nginx-slim:0.7: ~~~bash $ kubectl patch statefulset web --type='json' -p='[{"op": "replace", "path": "/spec/template/spec/containers/0/image", "value":"registry-vpc.cn-hangzhou.aliyuncs.com/chenshi-kubernetes/nginx-slim:0.7"}]' statefulset.apps/web patched ~~~ 然后我们再看 Pod 的变化过程: ~~~bash $ kubectl get pods -w -l app=nginx NAME READY STATUS RESTARTS AGE web-0 1/1 Running 0 38s web-1 1/1 Running 0 36s # 先更新 web-1 Pod web-1 1/1 Terminating 0 68s web-1 0/1 Terminating 0 69s web-1 0/1 Terminating 0 75s web-1 0/1 Terminating 0 75s web-1 0/1 Pending 0 0s web-1 0/1 Pending 0 0s web-1 0/1 ContainerCreating 0 0s web-1 1/1 Running 0 2s # 然后更新 web-0 Pod web-0 1/1 Terminating 0 79s web-0 0/1 Terminating 0 79s web-0 0/1 Terminating 0 87s web-0 0/1 Terminating 0 87s web-0 0/1 Pending 0 0s web-0 0/1 Pending 0 0s web-0 0/1 ContainerCreating 0 0s web-0 1/1 Running 0 3s ~~~ 现在来查看新创建的 Pod 的容器镜像,可以发现都已经更新为新镜像了: ~~~bash $ kubectl get pod -l app=nginx -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.containers[0].image}{"\n"}{end}' web-0 registry-vpc.cn-hangzhou.aliyuncs.com/chenshi-kubernetes/nginx-slim:0.7 web-1 registry-vpc.cn-hangzhou.aliyuncs.com/chenshi-kubernetes/nginx-slim:0.7 $ kubectl rollout status sts/web partitioned roll out complete: 2 new pods have been updated... ~~~