【问题标题】:How to restart 1000's of pods at a time如何一次重启 1000 个 pod
【发布时间】:2020-10-12 06:20:30
【问题描述】:

我们正在为我们的应用程序运行 1000 个 pod。由于某种原因,我们需要重新启动 100 个 pod。

有什么方法可以在 kubernetes 中使用 kubectl 或任何其他工具来实现。请指教。应该是纯 pod 重启。

【问题讨论】:

  • pure pod restart 是什么?
  • 如果它在一个特定的命名空间然后通过kubectl delete po --all,你可以做到,否则你必须写一个脚本
  • 什么是重启 Pod 的原因?
  • 我们有 1000 个 ...我们需要重新启动 100 个

标签: kubernetes kubernetes-helm kubernetes-pod amazon-eks


【解决方案1】:

一种方式

kubectl scale deploymennt <your-deployment-goes-here> --replicas=0

然后

kubectl scale deploymennt <your-deployment-goes-here> --replicas=1000

另一种方式:

编写一个脚本:

  1. 将获取属于特定部署的所有活动 pod 的列表
  2. 循环发出 kubectl delete pod

另一种方式(如果您的 pod 属于专用命名空间“foo”,则有效):

kubectl delete --all pods --namespace=foo

【讨论】:

    【解决方案2】:

    如果所有 pod 都属于特定的命名空间,您可以使用以下命令将它们全部删除 kubectl delete pods --all --namespace=foo 重新创建它们(这可能会导致停机)。

    如果所有 pod 都由同一个部署控制,您可以使用 kubectl rollout restart deployment/my-deployment-name. † 触发滚动重启

    编辑一些部署无关紧要的值也会触发所有受控 pod 的 Rolling Update(可能不会停机)(例如,将 terminationGracePeriodSeconds30 更改为 31)。

    如果 pod 来自多个不同的部署,这里有一个 bash 脚本,"refreshes" all pods in all deployments by namespace.

    rollout restart 仅在 kubernetes 上可用 v1.15+

    【讨论】:

    • 谢谢,您的建议很有道理。我会试试这个。
    【解决方案3】:

    您可以使用选择器来执行此操作。请注意,这是删除 pod,因此您需要确保它们使用更高级别的结构(如部署)运行。并确保您的选择器与您不想触摸的 pod 不匹配。

    kubectl delete pods -l name=myLabel
    

    【讨论】:

      【解决方案4】:

      重启集群中的所有部署(多个命名空间)

      kubectl get deployments --all-namespaces | tail +2 | awk '{ cmd=sprintf("kubectl rollout restart deployment -n %s %s", $1, $2) ; system(cmd) }'
      

      【讨论】:

        猜你喜欢
        • 2020-07-27
        • 1970-01-01
        • 2020-11-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-24
        • 1970-01-01
        • 2018-12-21
        • 1970-01-01
        相关资源
        最近更新 更多