如何优雅地减少 GKE 的 Kubernetes 集群中的节点(vm)运行?

How to reduce nodes(vm) running in a Kubernetes cluster of GKE gracefully?

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

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

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

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

备注

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

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

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

参考文献

在调整集群大小之前,让我们通过运行以下命令在云中设置项目上下文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