旧光泽的 GKE 集群自动扩缩器配置文件

Posted

技术标签:

【中文标题】旧光泽的 GKE 集群自动扩缩器配置文件【英文标题】:GKE Cluster autoscaler profile for older luster 【发布时间】:2021-02-16 11:00:33 【问题描述】:

现在在 GKE 中创建新的 K8s 集群时有一个新选项卡

Automation - 为自动维护、自动扩展和自动供应设置集群级标准。编辑节点池以实现自动扩展、自动升级和修复等自动化。

它有两个选项 - 平衡(默认) & 优化利用率(测试版)

我们不能为旧集群设置这个吗?

我们正在运行旧的 GKE 版本 1.14,我们希望在现有节点的资源利用率达到 70% 时自动扩展集群。

目前,我们有 2 个不同的池 - 只有 一个 启用了自动节点配置,但在高峰时段如果 HPA 扩展 POD,新节点需要一些时间才能加入集群有时由于资源压力,退出节点开始崩溃。

【问题讨论】:

您可以通过以下路径为集群设置Optimize utilization参数:GCP Cloud Console (Web UI) --> Kubernetes Engine --> CLUSTER -> Edit -> Autoscaling profile。您可以通过关注this documentation 来了解它的行为方式。 Autoscaler 基于集群无法在当前存在的节点上调度 pod。它考虑了工作负载的请求,而不是实际的资源利用率。您是否在工作负载上设置了requests 参数? 是的,我们在所有工作负载中都有资源请求和限制。 【参考方案1】:

您可以通过以下方式设置自动缩放配置文件:

GCP Cloud Console (Web UI) -> Kubernetes Engine -> CLUSTER-NAME -> Edit -> Autoscaling profile

此截图是在GKE 版本1.14.10-gke.50 上制作的

你也可以运行:

gcloud beta container clusters update CLUSTER-NAME --autoscaling-profile optimize-utilization

官方文档说明:

您可以指定在做出此类决定时使用哪个自动缩放配置文件。当前可用的配置文件有:

balanced:默认配置文件。 optimize-utilization:优先考虑优化利用率而不是保留集群中的备用资源。选中后,集群自动缩放器会更积极地缩减集群:它可以删除更多节点,并更快地删除节点。 此配置文件已针对对启动延迟不敏感的批处理工作负载进行了优化。我们目前不建议将此配置文件用于服务工作负载。

-- Cloud.google.com: Kubernetes Engine: Cluster autoscaler: Autoscaling profiles

此设置 (optimize-utilization) 在用于处理工作负载时可能不是最佳选择。它将更积极地尝试scale-down(删除一个节点)。它会自动减少集群拥有的可用资源量,并且可能更容易受到工作负载高峰的影响。


回答部分问题:

我们正在运行旧的 GKE 1.14 版,我们希望在现有节点的资源利用率达到 70% 时自动扩展集群。

如文档中所述:

Cluster autoscaler 根据在该节点池的节点上运行的 Pod 的资源请求(而不是实际资源利用率)自动增加或减少节点池的大小。它会定期检查 Pod 和节点的状态,并采取行动:

如果 Pod 由于节点池中没有足够的节点而无法调度,则集群自动扩缩器会添加节点,直至节点池的最大大小

-- Cloud.google.com: Kubernetes Engine: Cluster autoscaler: How cluster autoscaler works

您无法根据资源利用率 (70%) 的百分比直接扩展集群。 Autoscaler 基于集群无法在当前存在的节点上调度 pod。

您可以通过CPU 使用Horizontal Pod Autoscaler 来扩展Deployment 的副本数量。这个Pods 可以有一个缓冲区来处理增加的流量,并且在特定阈值之后,它们可以产生新的PodsCA(集群自动缩放器)将发送一个新节点的请求(如果新的Pods 是不可调度)。该缓冲区将成为防止应用程序无法管理的突然峰值的机制。

缓冲区部分和over-provisioning详细解释在:

Cloud.google.com: Solutions: Best practices for running cost effective kubernetes applications on gke: Autoscaler and over-provisioning

GKE 上有大量关于运行具有成本效益的应用程序的文档:

Cloud.google.com: Solutions: Best practices for running cost effective kubernetes applications on gke

我鼓励您查看上面的链接,因为有很多关于(扩展、过度配置、工作负载峰值、HPAVPA 等)的提示和见解

其他资源:

Cloud.google.com: Kubernetes Engine: Node auto provisioning

【讨论】:

以上是关于旧光泽的 GKE 集群自动扩缩器配置文件的主要内容,如果未能解决你的问题,请参考以下文章

GKE 自动扩缩器“优化利用率”

在 Google Cloud 上的何处配置 Kubernetes 集群自动扩缩器?

通过 GKE 资源预留进行 GCE 自动扩缩

如何使用 Terraform 配置 AWS EKS 自动扩缩器?

如何为 kops 在 AWS 上安装的 k8s 做集群自动扩缩器?

在创建 GKE 集群时启用自动扩缩