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/&lt;deployment-name&gt;

【讨论】:

以上是关于kubectl - 如何重新启动部署(或所有部署)的主要内容,如果未能解决你的问题,请参考以下文章

如何将 GitLab-Ci 与 Azure Kubernetes + Kubectl + ACR 集成以进行部署?

如何更新jboss EAP -6.2中的JSP / JS而无需重新启动或重新部署构建

“kubectl rollout restart deploy”会导致停机吗?

k8s部署应用入门之kubectl apply

Kubernetes等待部署完成 kubectl wait rollout

如何让 kubernetes “kubectl apply”不更新现有部署