如何在 GKE 自动驾驶仪中基于自定义指标实现水平自动缩放

Posted

技术标签:

【中文标题】如何在 GKE 自动驾驶仪中基于自定义指标实现水平自动缩放【英文标题】:How to implement horizontal auto scaling in GKE autopilot based on a custom metric 【发布时间】:2021-10-31 02:09:51 【问题描述】:

我在 GKE 自动驾驶仪上运行 Kubernetes 集群

我的 Pod 执行以下操作 - 等待作业,运行作业(这可能需要几分钟或几小时),然后进入 Pod Succeeded 状态,这将导致 Kubernetes 重新启动 Pod。

我需要的 pod 数量取决于平台上的用户数量。每个用户都可以请求一个需要 pod 才能运行的作业。

我不希望用户必须等待 pod 扩大规模,因此我希望保留一些额外的 pod 准备就绪并等待执行。

我的 pod 正在运行的应用程序可以处于 3 种状态 - waiting for jobrunning jobcompleted job

扩大规模很好,因为我可以只使用规模 API 并始终请求在 waiting for job 状态下拥有一定比例的 pod

缩小规模时,我想确保 Kubernetes 不会杀死任何处于 running job 状态的 pod。

我应该实现自定义水平 Pod 自动缩放器吗?

我可以为我的 pod 的应用程序状态配置自定义探针吗?

我也可以使用 pod 优先级或 preStop 挂钩

【问题讨论】:

您能否再描述一下您的应用程序?例如,用户提交什么来触发工作?这些工作需要访问什么? 【参考方案1】:

您可以配置 Pod 水平自动缩放以确保 Kubernetes 不会杀死任何 Pod。

配置 pod 水平缩放的步骤

创建 Deployment,应用 nginx.yaml 清单,运行以下命令:

  kubectl apply -f nginx.yaml

根据资源利用率自动扩缩

1-转到 Cloud Console 中的工作负载页面。

2-单击 nginx 部署的名称。

三键式列表操作>自动缩放

4-指定以下值:

-最小副本数:1

-最大副本数:10

-Auto Scaling 指标:CPU

-目标:50

-单位:%

5 次点击完成

6 次点击自动缩放

要获取集群中的 Horizo​​ntal Pod Autoscaler 列表,请使用以下命令:

kubectl get hpa

关于如何Configure 水平 pod 自动缩放的指南。

您还可以参考此link 使用 Cloud Console 上的自定义指标来了解 GKE 自动驾驶集群的自动扩缩规则。

【讨论】:

以上是关于如何在 GKE 自动驾驶仪中基于自定义指标实现水平自动缩放的主要内容,如果未能解决你的问题,请参考以下文章

GKE K8 HPA 无法获取堆栈驱动程序指标

在 terraform 中设置 gke 自动驾驶仪的好例子

GKE 自动驾驶仪根本没有扩展

GKE 和 prometheus 监控

根据每个 pod 的活动连接数扩展 GKE pod

具有自定义指标的 HPA