配置 VerticalPodAutoscaler (VPA)
目录
概述了解 VerticalPodAutoscalerVPA 如何工作?支持的特性前提条件安装 Vertical Pod Autoscaler 插件升级 Vertical Pod Autoscaler 插件创建 VerticalPodAutoscaler使用 CLI使用 Web 控制台高级 VPA 配置更新策略选项容器策略选项后续操作概述
Alauda Container Platform Vertical Pod Autoscaler 基于开源的 Vertical Pod Autoscaler 组件。它会分析 Pod 的历史资源使用数据,并提供资源建议,以提高资源利用率。
对于无状态和有状态应用,VerticalPodAutoscaler (VPA) 会根据应用需求自动建议,并可选地应用更合适的 CPU 和内存资源限制。这有助于确保 Pod 拥有充足资源,同时提升整个集群的资源利用率。
了解 VerticalPodAutoscaler
VerticalPodAutoscaler (VPA) 用于根据 Pod 的历史使用模式,为其推荐或自动更新 CPU 和内存资源请求和限制。
创建 VPA 后,平台会开始监控目标 Pod 的资源使用情况。当收集到足够的数据后,VPA 会计算推荐的资源值。根据所配置的更新模式,VPA 可以自动应用这些建议,也可以仅提供给用户进行手动审查和应用。
通过分析一段时间内的资源使用情况,VPA 有助于确保 Pod 获得所需资源而不过度预留,从而实现更高效的集群级资源利用。
VPA 如何工作?
VerticalPodAutoscaler (VPA) 扩展了 Pod 资源优化的概念。VPA 会监控 Pod 的资源使用情况,并根据观察到的使用模式提供 CPU 和内存请求建议。
VPA 通过持续监控 Pod 的资源使用情况,并在新数据可用时更新其建议。VPA 可以运行在以下模式中:
- Off:VPA 仅提供建议,不会自动应用。
- 手动调整:你可以根据 VPA 建议手动调整资源配置。
重要:当集群资源充足时,弹性伸缩(水平或垂直)的效果最佳。当资源紧张时,伸缩操作可能会导致 Pod 卡在
Pending状态。请确保集群具有足够的资源,设置合理的配额,并配置告警来监控伸缩事件。
支持的特性
VPA 基于历史使用模式提供资源建议,可帮助你优化 Pod 的 CPU 和内存配置。
重要:手动应用 VPA 建议时,会发生 Pod 重新创建,这可能会对应用造成短暂中断。对于生产工作负载,请考虑在维护窗口期间应用这些建议。
VPA 建议和原地 Pod 调整解决的是资源管理中的不同问题。VPA 会根据观测到的使用情况建议或应用资源值。原地 Pod 调整是 Kubernetes 中的一种机制,可通过 Pod resize 子资源更新运行中 Pod 的 CPU 或内存资源。某些 VPA 版本支持 InPlaceOrRecreate,即 VPA 可以尝试通过原地 Pod 调整应用建议,在无法进行原地更新时回退到 Pod 重新创建。此模式需要 Kubernetes 支持原地 Pod 调整、启用 InPlaceOrRecreate 功能的 VPA 组件,以及接受此 updateMode 值的 VPA CRD。有关手动运行时调整和 resizePolicy 行为,请参阅 在不影响 Pod 的情况下调整 Pod 资源级别。
前提条件
使用 VPA 之前,请确保满足以下条件:
-
你的集群中已安装 Alauda Container Platform Vertical Pod Autoscaler 集群插件。
- 下载与你的平台版本兼容的最新插件包。
- 使用
violetCLI 工具将 Alauda Container Platform Vertical Pod Autoscalers 和 Alauda DevOps Pipelines 软件包上传到目标集群。有关使用violet的详细说明,请参阅 CLI。
-
请确保监控组件已部署在当前集群中并正常运行。你可以通过点击平台右上角的
> 平台健康状态。 来查看监控组件的部署情况和健康状态。
安装 Vertical Pod Autoscaler 插件
-
登录并导航到 管理员 页面。
-
点击 Marketplace > 集群插件,进入 集群插件 列表页。
-
找到 Alauda Container Platform Vertical Pod Autoscaler 集群插件,单击 安装,然后继续进入安装页面。
升级 Vertical Pod Autoscaler 插件
-
登录并导航到 管理员 页面。
-
点击 Marketplace > 集群插件,进入 集群插件 列表页。
-
找到 Alauda Container Platform Vertical Pod Autoscaler 集群插件,单击 升级,然后继续进入安装页面。
创建 VerticalPodAutoscaler
使用 CLI
你可以通过命令行界面创建 VerticalPodAutoscaler:定义一个 YAML 文件,然后使用 kubectl create 命令。以下示例展示了对 Deployment 对象进行垂直 Pod 自动伸缩:
-
创建名为
vpa.yaml的 YAML 文件,内容如下:- 使用 autoscaling.k8s.io/v1 API。
- VPA 的名称
- 指定目标工作负载对象。VPA 会使用工作负载的选择器来查找需要调整资源的 Pod。支持的工作负载类型包括 DaemonSet、Deployment、ReplicaSet、StatefulSet、ReplicationController、Job 和 CronJob。
- 指定要伸缩对象的 API 版本。
- 指定对象类型。
- VPA 所应用的目标资源
- 定义 VPA 如何应用建议的更新策略。
updateMode可以是:- Off:不会自动修改 Pod 资源请求,只会在 VPA 对象中提供建议。
- Initial:仅在创建 Pod 时设置资源请求,之后不再修改。
- Recreate:在创建 Pod 时自动设置资源请求,并驱逐当前 Pod 以更新为推荐的资源请求。不会使用原地更新。
- Auto:在创建 Pod 时自动设置资源请求,并将当前 Pod 更新为推荐的资源请求。目前等同于 "Recreate",并可能导致应用停机。
- InPlaceOrRecreate:仅当集群支持原地 Pod 调整、VPA 组件启用了
InPlaceOrRecreate功能且 VPA CRD 接受此值时可用。VPA 会先尝试通过原地 Pod 调整应用建议,然后在无法应用原地更新时回退到 Pod 重新创建。容器resizePolicy设置可以决定容器在调整期间是否重启。
- 资源策略,可为不同容器设置特定策略。例如,将某个容器的模式设为 "Auto" 表示会为该容器计算建议,而 "Off" 表示不会计算建议。
- 将策略应用于 Pod 中的所有容器。
- 将模式设置为 Auto 或 Off。Auto 表示会为该容器生成建议,Off 表示不会生成任何建议。
-
应用 YAML 文件以创建 VPA:
示例输出:
-
创建 VPA 后,可以通过运行以下命令查看建议:
示例输出(部分):
使用 Web 控制台
-
登录并导航到 容器平台。
-
在左侧导航栏中,点击 工作负载 > Deployments。
-
点击 Deployment Name。
-
向下滚动到 弹性伸缩 区域,并单击右侧的 更新。
-
选择 垂直扩缩 并配置伸缩规则。
-
单击 更新。
高级 VPA 配置
更新策略选项
updateMode: "Off"- VPA 仅提供建议,不会自动应用。你可以根据需要手动应用这些建议。updateMode: "Initial"- 仅在创建 Pod 时设置资源请求,之后不再修改。updateMode: "Recreate"- 在创建 Pod 时自动设置资源请求,并驱逐当前 Pod 以更新为推荐值。updateMode: "Auto"- 在创建 Pod 时自动设置资源请求,并将当前 Pod 更新为推荐值。目前等同于 "Recreate"。updateMode: "InPlaceOrRecreate"- 仅当集群支持原地 Pod 调整、VPA 组件启用了InPlaceOrRecreate功能且 VPA CRD 接受此值时可用。VPA 会先尝试通过原地 Pod 调整应用建议,然后在无法应用原地更新时回退到 Pod 重新创建。容器resizePolicy设置可以决定容器在调整期间是否重启。minReplicas: <number>- 最小副本数。确保当 Updater 驱逐 Pod 时,至少保留该数量的 Pod 可用。必须大于 0。
容器策略选项
containerName: "*"- 将策略应用于 Pod 中的所有容器。mode: "Auto"- 自动为该容器生成建议。mode: "Off"- 不为该容器生成建议。
注意:
- VPA 建议基于历史使用数据,因此 Pod 需要运行数天后,建议才会变得准确。
- 当 VPA 建议以 Auto 或 Recreate 模式应用时,会发生 Pod 重新创建,这可能会对应用造成短暂中断。如果你的 VPA 插件支持 InPlaceOrRecreate 模式,当请求的调整无法原地应用时,原地更新仍可能回退为 Pod 重新创建。
后续操作
配置 VPA 后,可在 弹性伸缩 区域查看目标容器 CPU 和内存资源限制的推荐值。在 容器 区域,选择目标容器选项卡,然后单击 资源限制 右侧的图标,即可根据推荐值更新资源限制。