首页 > 解决方案 > 在不中断服务的情况下重新创建部署

问题描述

在以下创建新部署的场景中:

kubectl apply -f deployment.yaml

/Mugen$ kubectl get deploy
NAME        DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
my-server   1         1         1            1           1h

我正在更改yaml并再次运行apply,并收到一条消息,表明部署已更新。

但随后我看到了两个用于我的部署的 pod,并表明有两个实例,而只有一个是最新的。

/Mugen$ kubectl get deploy
NAME           DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
mysql-server   1         2         1            2           1h

据我了解,如果我使用过,kubectl replace --force我实际上会删除当前部署并创建一个新部署。

但是,这将导致服务中断。

是否有正确的方法来创建新部署并仅在成功推出后删除以前的部署?

标签: kuberneteskubectlkubernetes-deployment

解决方案


优雅地排空所有 pod(然后删除 pod)并继续添加具有新功能的新 pod。

请注意,在生产设置中,不建议重新创建为部署策略,因为这可能会导致停电和服务中断。或者,您可能还想阅读有关不同部署策略的更多信息,例如 Canary Release(另请阅读有关蓝/绿)和/或用于生产管理的 RollingUpdate。


推荐阅读