kubectl - 如何重新启动部署(或所有部署)
Posted
技术标签:
【中文标题】kubectl - 如何重新启动部署(或所有部署)【英文标题】:kubectl - How to restart a deployment (or all deployment) 【发布时间】:2021-01-24 00:16:30 【问题描述】:我们有一个 AKS 集群,有时我们最终会遇到需要重新启动部署的问题(例如,缓存数据已更新,我们想要刷新它,或者我们想要刷新的缓存数据损坏)。
我一直在使用将部署缩放到 0 的方法,然后使用以下命令将其重新缩放:
kubectl scale deployments/<deploymentName> --replicas=0
kubectl scale deployments/<deploymentName> --replicas=1
这符合我的预期,但感觉很笨拙,这意味着在此过程发生时我们没有运行任何部署。
有什么更好的方法来做到这一点?对于特定部署和所有部署?
【问题讨论】:
假设您不想实际进行新部署,我认为这是正确的方法。你当然不想随意删除部署,因为你可能会丢失一些重要的东西,比如 PVC。如果有什么我想说的“黑客”感觉可能来自图像上的最新标签...... 这能回答你的问题吗? How to rolling restart pods without changing deployment yaml in kubernetes? 在当前的Kubernetes上,你可以kubectl rollout restart deployment ...
。
【参考方案1】:
如果您在部署中有RollingUpdate
策略,则可以删除 pod 以替换 pod 并刷新它。
关于 RollingUpdate 策略:
用户希望应用程序始终可用,而开发人员 预计每天会多次部署它们的新版本。在 Kubernetes 这是通过滚动更新完成的。滚动更新允许 部署更新以增量方式进行,停机时间为零 用新实例更新 Pod 实例。
滚动更新配置:
spec:
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
type: RollingUpdate
maxSurge
指定在所需 Pod 数量上可以创建的最大 Pod 数量。
maxUnavailable
指定更新过程中不可用的 Pod 的最大数量。
删除 pod:
kubectl delete pod <pod-name>
编辑:
此外,您可以推出部署,这将重新启动 pod,但也会创建部署的新修订版。
例如:kubectl rollout restart deployments/<deployment-name>
【讨论】:
以上是关于kubectl - 如何重新启动部署(或所有部署)的主要内容,如果未能解决你的问题,请参考以下文章
如何将 GitLab-Ci 与 Azure Kubernetes + Kubectl + ACR 集成以进行部署?
如何更新jboss EAP -6.2中的JSP / JS而无需重新启动或重新部署构建
“kubectl rollout restart deploy”会导致停机吗?