在 kubernetes 中向下/向上扩展/重新启动应用程序的正确方法(副本集、部署和 Pod 删除)?



我通常通过以下方式重新启动我的应用程序:

kubectl scale deployment my-app --replicas=0

其次:

kubectl scale deployment my-app --replicas=1

这工作正常。我还有另一个正在运行的应用程序,但是当我查看其复制集时,我看到:

$ kubectl get rs
NAME                                        DESIRED   CURRENT   READY     AGE
another-app                                 2         2         2         2d

因此,要正确重新启动它,我当然需要:

kubectl scale deployment another-app --replicas=0
kubectl scale deployment another-app --replicas=2

但是有没有更好的方法来做到这一点,这样我就不必在缩放/重新启动我的应用程序之前手动查看 repliaset(这可能replicas > 1(?

您可以使用级别重新启动 pod

kubectl delete pods -l name=myLabel

您可以滚动重新启动部署的所有 Pod,这样您就不会关闭服务

kubectl patch deployment your_deployment_name -p 
"{"spec":{"template":{"metadata":{"annotations":{"date":"`date +'%s'`"}}}}}"

在 kubernetes 版本 1.15 之后,您可以

kubectl rollout restart deployment your_deployment_name

要在当前部署中进行更改,可以使用kubectl rollout pause deployment/YOUR_DEPLOYMENT。这样,部署将被标记为已暂停,并且控制器不会协调。暂停后,您可以对配置进行必要的更改,然后使用kubectl rollout resume deployment/YOUR_DEPLOYMENT恢复配置。这样,它将创建一个具有更新配置的新replicaset

具有新配置的 Pod 将启动,当它处于running状态时,具有旧配置的 Pod 将被终止。

使用此方法,您将能够使用以下方法将部署推出到以前的版本:

kubectl rollout history deployment/YOUR_DEPLOYMENT

检查部署的历史记录,然后执行以下命令进行回滚:

kubectl rollout undo deployment/YOUR_DEPLOYMENT --to-revision=REVISION_NO

最新更新