在不中断服务的情况下重新创建部署
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。
在以下创建新部署的场景中:
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。