在不中断服务的情况下重新创建部署

Recreate a deployment without service outage

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

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,我收到一条消息,说明部署已更新。

但后来我看到我的部署有两个 pods,并且指示有两个实例,而只有一个是最新的。

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

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

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

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

优雅地耗尽所有 pods(然后删除 pods)并继续添加具有新功能的新 pods。

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