【问题标题】:Scale down Kubernetes pods缩小 Kubernetes pod
【发布时间】:2017-11-30 11:38:44
【问题描述】:

我正在使用

kubectl scale --replicas=0 -f deployment.yaml

停止我所有正在运行的 pod。请让我知道是否有更好的方法可以将所有正在运行的 pod 降为零,保持配置、部署等完好无损,以便我以后可以根据需要进行扩展。

【问题讨论】:

  • 您是否体验到 scale 的行为与您的预期不同,或者您是否只是确认以这种方式使用规模是一种最佳实践(它是,AFAIK)?

标签: kubernetes


【解决方案1】:

您正在采取正确的行动; 传统上 scale 动词仅应用于资源名称,如 kubectl scale deploy my-awesome-deployment --replicas=0,这样就无需始终指向描述该部署的特定文件,但如果对您更方便的话,使用该文件并没有错(据我所知)。

【讨论】:

  • 我在所有部署中都这样做了。所以我观察了kubectl get pods 的输出,并看到了所有 pod 是如何被终止的。现在它告诉No resources found.。如我所见,我仍然有两个运行节点kubectl get nodes。如果我在其中执行docker ps,则只有 Kuberenetes 内置容器在运行。如何终止所有节点(AWS EKS)?
【解决方案2】:

解决方案非常简单直接

kubectl scale deploy -n <namespace> --replicas=0 --all 

【讨论】:

  • 您能解释一下--all 在这种情况下的作用吗?出于某种原因,它只适用于我的这个标志。
  • 这对我不起作用,返回error: no objects passed to scale
  • --all 将比例应用于所有部署(在命名空间中)。您可以将其替换为一个特定部署的名称。
【解决方案3】:

我们开始吧。 缩减整个命名空间中的所有部署:

kubectl get deploy -n <namespace> -o name | xargs -I % kubectl scale % --replicas=0 -n <namespace>

相应地扩大设置--replicas=1(或任何其他必需的数字)

【讨论】:

  • 为什么不直接使用kubectl scale deploy -n &lt;namespace&gt; --replicas=0 --all?
  • 酷,不知道。尽管我们在我的构造中在这些管道之间使用了另一个 grep 来过滤需要停止的部署。 kubectl get deploy -n -o name | grep 后端 | xargs -I % kubectl scale % --replicas=0 -n
  • 如果您需要一些标签过滤器,例如kubectl get deploy -n &lt;namespace&gt; -o name -l app.kubernetes.io/component=consumer | xargs -I % kubectl scale % --replicas=0 -n &lt;namespace&gt;,此命令可能很有用
  • 短命令不适用于旧版本的 kubectl,这个对我有用。谢谢!
【解决方案4】:

使用以下内容缩小/放大当前命名空间中的所有部署和有状态集。在切换项目时在开发中很有用。

kubectl scale statefulset,deployment --all --replicas=0

如果需要,添加命名空间标志

kubectl scale statefulset,deployment -n mynamespace --all --replicas=0

【讨论】:

    【解决方案5】:
      kubectl get deployments
    NAME      READY   UP-TO-DATE   AVAILABLE   AGE
    app-gke   3/3     3            3           13m
    
      kubectl scale deploy app-gke --replicas=5
    deployment.extensions/app-gke scaled
    
    
    kubectl get pods
    NAME                       READY   STATUS              RESTARTS   AGE
    app-gke-7b768cd6d7-b25px   2/2     Running             0          11m
    app-gke-7b768cd6d7-glj5v   0/2     ContainerCreating   0          4s
    app-gke-7b768cd6d7-jdt6l   2/2     Running             0          11m
    app-gke-7b768cd6d7-ktx87   2/2     Running             0          11m
    app-gke-7b768cd6d7-qxpgl   0/2     ContainerCreating   0          4s
    

    【讨论】:

      【解决方案6】:

      如果您需要更精细的管道或 grep,这里是另一种 shell 解决方案:

      for i in $(kubectl get deployments | grep -v NAME | grep -v app | awk '{print $1}'); do kubectl scale --replicas=2 deploy $i; done
      

      【讨论】:

        【解决方案7】:

        如果你想要通用补丁:

        namespace=devops-ci-dev
        kubectl get deployment -n ${namespace} --no-headers| awk '{print $1}' | xargs -I elhay kubectl patch deployment -n ${namespace} -p '{"spec": {"replicas": 1}}' elhay 
        

        将 namespace=devops-ci-dev 更改为您的名称空间。

        【讨论】:

          【解决方案8】:

          kubectl get svc | awk '{print $1}' | xargs kubectl scale deploy --replicas=0

          【讨论】:

            猜你喜欢
            • 2020-04-16
            • 2016-02-10
            • 2021-02-03
            • 2021-01-26
            • 2019-08-07
            • 1970-01-01
            • 1970-01-01
            • 2023-01-11
            • 2017-05-20
            相关资源
            最近更新 更多