Kubernetes kubectl patch pod 与 delete/create pod

Kubernetes kubectl patch pod vs delete/create pod

我有一个 Pod - 我想更新到最新版本的容器镜像,如果失败则想将其恢复到早期版本的容器镜像。

以下哪种方法适合更新到最新或更早的容器映像。 1> 使用 kubectl 补丁是个不错的选择? 2> 删除 pod 并重新创建 pod 是个不错的选择吗?

两种方法的benefits/disadvantages是什么。

kubectl patch pod test-pod -p '{"spec":{"containers":[{"name":"test","image":"1.0"}]}}'

kubectl delete pod test-pod and kubectl apply -f testpod.yaml

根据您提出的场景,您可以选择使用滚动更新策略寻找做金丝雀部署,如果新部署的容器无法服务负载则旧的不会被销毁和加载将继续由预先存在的容器提供服务。

另一种方法是保留部署历史,您可以定义要由 kubernetes 保存的清单的数量,然后您可以手动回滚到您想要的版本

如果您不知道哪个版本带有哪个图像,那么您可以使用补丁命令,正如您在问题中所描绘的那样

来自文档here部署用例之一

Rollback to an earlier Deployment revision if the current state of the Deployment is not stable. Each rollback updates the revision of the Deployment.

因此在必要时使用部署来执行rolling update and rollback

kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.161 --record=true

检查发布历史

kubectl rollout history deployment.v1.apps/nginx-deployment

回滚到以前的版本

kubectl rollout undo deployment.v1.apps/nginx-deployment