调整 Container Engine 集群上的实例类型大小

Posted

技术标签:

【中文标题】调整 Container Engine 集群上的实例类型大小【英文标题】:Resize instance types on Container Engine cluster 【发布时间】:2015-09-26 22:16:36 【问题描述】:

我们的一些容器在内存高于当前部署在容器引擎集群中的实例类型时运行得更好。是否有推荐的做法是在创建容器引擎集群后为更大的实例重建容器引擎模板?

例如,从 GCE 实例 n1-standard-2 转到 n1-highmem-8 以运行具有 8GB 以上 RAM 的容器?

【问题讨论】:

【参考方案1】:

Container Engine 目前没有用于执行此操作的 API,但由于它对集群中的节点使用 Compute Engine instance group,因此您实际上可以在不需要 GKE 帮助的情况下对其进行更新。在 Developers Console 中,复制看起来像“gke--”的 instance template 并修改其中的机器类型,然后编辑名称相似的实例组以使用新模板。您可以分别在Compute > Compute Engine > Instance templatesCompute > Compute Engine > Instance groups 下找到这些选项。

【讨论】:

请注意,执行 API 升级会将您的节点回滚到以前的规范。由于内存不足,这导致我的应用程序交换 @Andre API 升级是什么意思? Google Cloud SDK 或 Kubernetes 还是其他? > gcloud container clusters upgrade CLUSTER_NAME 。此处概述:cloud.google.com/container-engine/docs/clusters/upgrade 这不是平台的主要限制吗?如何在不停机的情况下扩展 GKE?您可以创建另一个集群并进行故障转移吗? @dcgoss 它无需停机即可工作。创建新实例模板后,您可以将当前实例组切换到新模板并进行横向扩展。【参考方案2】: 使用自定义机器类型、磁盘大小、节点数和任何其他必需参数创建新节点池。 所有步骤都在 Google Container Engine GKE node pools

【讨论】:

【参考方案3】:

另一种方法是:

(1) 使用垂直扩展的机器类型为 GKE 集群创建一个新的节点池 ...

$ gcloud container node-pools create pool-n1std2 --zone europe-west1-d --cluster prod-cluster-1 --machine-type  n1-standard-2  --image-type gci --disk-size=250 --num-nodes 3

(2) 然后,将工作负载从旧节点迁移出去 ...

$ kubectl drain gke-prod-cluster-1-default-pool-f1eabad5-9ml5 --delete-local-data --force

(3) 最后,删除旧的节点池

$ gcloud container node-pools delete default-pool --cluster=prod-cluster-1

注意事项:

警告:第 2 步会删除节点本地卷,例如 emptyDir !!! 需要对池中的每个节点重复第 2 步 可以配置适当的nodeSelector 来将 Pod 调度到新池中,而不是耗尽节点。要匹配的标签是cloud.google.com/gke-nodepool: pool-n1std2

【讨论】:

【参考方案4】:

从 GCE 实例 n1-standard-2 到 n1-highmem-8 以运行具有 8GB 以上 RAM 的容器?

Kubernetes 1.12(2018 年 9 月)应该提供一种官方方式来管理您现有的资源,使用 kubernetes issue 21“Pods 垂直缩放”(或“VPA”:垂直 Pod Autoscaler")。

作为announced on the blog:

Pod 的垂直扩展现在处于测试阶段,这使得在其生命周期内改变 Pod 的资源限制成为可能。特别是,这对宠物很有价值(即销毁和重建成本非常高的豆荚)。

Warning:

这是在 1.12 左右登陆,但它是一个独立插件的发布。它不包含在 1.12 Kubernetes 版本中。 Sig-Architecture 在此周期开始时决定将 VPA API 保留为 CRD,因此不将其绑定到任何特定的 K8S 版本。

查看更多:

“kubernetes/autoscaler/vertical-pod-autoscaler” “Vertical pod autoscaler”来自Toader Sebastian

BanzaiCloud 的最后一篇文章有​​点过时(一些链接不再有效),但它仍然说明了如何管理 pod 资源。

【讨论】:

【参考方案5】:

有一个官方的 GKE 教程:

将工作负载迁移到不同的机器类型本教程演示了如何将在 GKE 集群上运行的工作负载迁移到同一集群内的一组新节点,而不会导致您的应用程序。如果您想将工作负载迁移到具有不同机器类型的节点,这种迁移会很有用。"

https://cloud.google.com/kubernetes-engine/docs/tutorials/migrating-node-pool

【讨论】:

以上是关于调整 Container Engine 集群上的实例类型大小的主要内容,如果未能解决你的问题,请参考以下文章

Google的Container OS可以与Compute Engine上的gRPC一起使用吗?

使用 Container OS (COS) 在 Google Container Engine 中挂载 NFS 卷

Google Cloud Platform:无法从 Container Engine 访问 Pubsub

使用 Google Container Engine (GKE) 和 Stackdriver 监控和提醒 Pod 状态或重启

Google Cloud 中的 Google Compute Engine、App Engine 和 Container Engine 有啥区别?

Google App Engine Flexible 和 Google Container Engine 之间的区别?