【问题标题】:How to reduce nodes(vm) running in a Kubernetes cluster of GKE gracefully?如何优雅地减少 GKE Kubernetes 集群中运行的节点(vm)?
【发布时间】:2017-05-10 18:37:31
【问题描述】:

我想知道在 GKE 上减少 Kubernetes 集群中节点的优雅方法。

我有一些节点,每个节点都有一些 pod 监视共享作业队列并执行作业。我还有一个脚本,它监视作业队列的长度,并在长度超过阈值时通过执行gcloud compute instance-groups managed resize 命令增加实例数,它工作正常。

但是我不知道当长度低于阈值时减少实例数量的优雅方法。

有什么好的方法可以在实例终止之前停止 Pod 在终止实例上的工作?或任何其他好的做法?

注意

  • 每个作业大约需要 30m 到 1h 之间
  • 如果一个作业被执行多次(在最坏的情况下......)是可以接受的

【问题讨论】:

  • 听起来你想要一些带有自定义策略的 cluster autoscaler 变体。
  • 绝对。似乎它需要一些技巧才能准备好。

标签: kubernetes google-kubernetes-engine


【解决方案1】:

我认为最好的方法不是使用 pod 来运行您的任务,而是使用 kubernetes 作业对象。这样,当任务完成时,作业会终止容器。您只需要一个可以基于队列启动 kubernetes 作业的小 pod。

创建的 kube 作业越多,消耗的资源就越多,集群自动扩缩器会发现它需要添加更多节点。即使 kube 作业被终止,它也需要完成,它会被重新安排完成。

GKE 文档中没有直接信息表明如果 Job 在节点上运行,是否会发生缩减,但规定似乎是 pod 是否可以轻松移动到另一个节点并且资源未充分利用它将耗尽节点。

参考

【讨论】:

    【解决方案2】:

    在调整集群大小之前,让我们通过运行以下命令在云 shell 中设置项目上下文:

    gcloud config set project [PROJECT_ID]
    gcloud config set compute/zone [COMPUTE_ZONE]
    gcloud config set compute/region [COMPUTE_REGION]
    gcloud components update 
    

    注意:您还可以使用 --project、--zone 和 --region 操作标志在以下命令中将项目、计算区域和区域设置为标志

    gcloud container clusters resize [CLUSTER_NAME] --node-pool [POOL_NAME] --num-nodes [NUM_NODES]
    

    为每个节点池运行上述命令。如果您只有一个节点池,则可以省略 --node-pool 标志。

    参考:https://cloud.google.com/kubernetes-engine/docs/how-to/resizing-a-cluster

    【讨论】:

      猜你喜欢
      • 2022-07-12
      • 1970-01-01
      • 2017-04-16
      • 1970-01-01
      • 2018-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-11
      相关资源
      最近更新 更多