【发布时间】:2015-09-26 22:16:36
【问题描述】:
我们的一些容器在内存高于当前部署在容器引擎集群中的实例类型时运行得更好。是否有推荐的做法是在创建容器引擎集群后为更大的实例重建容器引擎模板?
例如,从 GCE 实例 n1-standard-2 转到 n1-highmem-8 以运行具有 8GB 以上 RAM 的容器?
【问题讨论】:
我们的一些容器在内存高于当前部署在容器引擎集群中的实例类型时运行得更好。是否有推荐的做法是在创建容器引擎集群后为更大的实例重建容器引擎模板?
例如,从 GCE 实例 n1-standard-2 转到 n1-highmem-8 以运行具有 8GB 以上 RAM 的容器?
【问题讨论】:
Container Engine 目前没有用于执行此操作的 API,但由于它对集群中的节点使用 Compute Engine instance group,因此您实际上可以在不需要 GKE 帮助的情况下对其进行更新。在 Developers Console 中,复制看起来像“gke--”的 instance template 并修改其中的机器类型,然后编辑名称相似的实例组以使用新模板。您可以分别在Compute > Compute Engine > Instance templates 和Compute > Compute Engine > Instance groups 下找到这些选项。
【讨论】:
gcloud container clusters upgrade CLUSTER_NAME 。此处概述:cloud.google.com/container-engine/docs/clusters/upgrade
【讨论】:
另一种方法是:
(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
注意事项:
emptyDir !!!nodeSelector 来将 Pod 调度到新池中,而不是耗尽节点。要匹配的标签是cloud.google.com/gke-nodepool: pool-n1std2
【讨论】:
从 GCE 实例 n1-standard-2 到 n1-highmem-8 以运行具有 8GB 以上 RAM 的容器?
Kubernetes 1.12(2018 年 9 月)应该提供一种官方方式来管理您现有的资源,使用 kubernetes issue 21“Pods 垂直缩放”(或“VPA”:垂直 Pod Autoscaler")。
Pod 的垂直扩展现在处于测试阶段,这使得在其生命周期内改变 Pod 的资源限制成为可能。特别是,这对宠物很有价值(即销毁和重建成本非常高的豆荚)。
这是在 1.12 左右登陆,但它是一个独立插件的发布。它不包含在 1.12 Kubernetes 版本中。
Sig-Architecture 在此周期开始时决定将 VPA API 保留为 CRD,因此不将其绑定到任何特定的 K8S 版本。
查看更多:
BanzaiCloud 的最后一篇文章有点过时(一些链接不再有效),但它仍然说明了如何管理 pod 资源。
【讨论】:
有一个官方的 GKE 教程:
将工作负载迁移到不同的机器类型
“本教程演示了如何将在 GKE 集群上运行的工作负载迁移到同一集群内的一组新节点,而不会导致您的应用程序。如果您想将工作负载迁移到具有不同机器类型的节点,这种迁移会很有用。"
https://cloud.google.com/kubernetes-engine/docs/tutorials/migrating-node-pool
【讨论】: