更新时间:2024-09-29 GMT+08:00

容器垂直弹性引擎

CCE容器垂直弹性引擎是一款支持应用垂直弹性伸缩(VPA,Vertical Pod Autoscaling)的插件,可以根据容器资源历史使用情况自动调整Pod的CPU、Memory资源申请量。

开源社区地址:https://github.com/kubernetes/autoscaler/tree/master/vertical-pod-autoscaler

功能概述

VPA以容器为单位对资源指标进行聚合计算,根据容器的资源实际使用情况动态调整容器的资源申请值(Requests),同时保证调整前和调整后资源限制值(Limits)与资源申请值(Requests)的比值不变。目前支持CPU与Memory两类资源的垂直伸缩。

详细功能说明如下:

  • VPA计算CPU与Memory建议值时需要数依赖Metrics API采集的数据。
  • VPA在计算资源建议值时,Memory资源的单Pod最小理论建议值250Mi,Pod内单容器的最小理论建议值为250Mi/Pod容器数目。CPU资源的单Pod最小理论建议值为25m,Pod内单容器的最小理论建议值为25m/Pod容器数目。

    您可在创建VPA任务时,通过配置containerPolicies字段为容器配置弹性资源上下限。

  • 如果容器初始时同时配置了资源申请值与限制值,VPA计算后给出的建议值会修改该容器的资源申请值,而限制值则根据容器初始创建时申请值与限制值的比例进行计算。

    例如,某个容器原来配置了CPU资源申请值为100m与限制值为200m,申请值与限制值的比例为1:2。如果VPA计算后的资源申请值建议为80m,则该容器最终的CPU资源申请值为80m,限制值为160m。

  • VPA会尽量让建议值符合其他资源限制要求。但如果VPA建议值与资源限制出现冲突,VPA建议值不会根据资源限制进行调整,可能导致VPA配置值超出其他资源限制要求。

    例如,某一个命名空间的内存申请值不能超过2GiB,而VPA的建议值如果比较大,可能导致Pod更新后整个命名空间的资源申请量超过2GiB从而出现无法调度。

前提条件

  • 集群版本需满足v1.25及以上。
  • 使用VPA需要在集群中安装能够提供Metrics API的插件,您可根据实际需求选择其中之一:

安装插件

  1. 登录CCE控制台,单击集群名称进入集群,单击左侧导航栏的“插件中心”,在右侧找到容器垂直弹性引擎插件,单击“安装”
  2. 在安装插件页面,根据需求选择“规格配置”

    • 选择“系统预置规格”时,您可根据集群Pod数量选择“小规格”、“中规格”或“大规格”,系统会根据不同的预置规格配置插件的实例数及资源配额,具体配置值请以控制台显示为准。
    • 选择“自定义规格”时,您可根据需求调整插件实例数和资源配额。实例数为1时插件不具备高可用能力,当插件实例所在节点异常时可能导致插件功能无法正常使用,请谨慎选择。

  3. 设置插件实例的部署策略。

    • 调度策略对于DaemonSet类型的插件实例不会生效。
    • 设置多可用区部署或节点亲和策略时,需保证集群中存在满足调度策略的节点且拥有足够的资源,否则插件实例将无法运行。
    表1 插件调度配置

    参数

    参数说明

    多可用区部署

    • 优先模式:优先将插件的Deployment实例调度到不同可用区的节点上,如集群下节点不满足多可用区,插件实例将调度到单可用区下的不同节点。
    • 强制模式:插件Deployment实例强制调度到不同可用区的节点上,每个可用区下最多运行一个实例。如集群下节点不满足多可用区,插件实例将无法全部运行。节点故障后,插件实例存在无法迁移风险。

    节点亲和

    • 不配置:插件实例不指定节点亲和调度。
    • 指定节点调度:指定插件实例部署的节点。若不指定,将根据集群默认调度策略进行随机调度。
    • 指定节点池调度:指定插件实例部署的节点池。若不指定,将根据集群默认调度策略进行随机调度。
    • 自定义亲和策略:填写期望插件部署的节点标签实现更灵活的调度策略,若不填写将根据集群默认调度策略进行随机调度。

      同时设置多条自定义亲和策略时,需要保证集群中存在同时满足所有亲和策略的节点,否则插件实例将无法运行。

    容忍策略

    容忍策略与节点的污点能力配合使用,允许(不强制)插件的 Deployment 实例调度到带有与之匹配的污点的节点上,也可用于控制插件的 Deployment 实例所在的节点被标记污点后插件的 Deployment 实例的驱逐策略。

    插件会对实例添加针对node.kubernetes.io/not-readynode.kubernetes.io/unreachable污点的默认容忍策略,容忍时间窗为60s。

    详情请参见设置容忍策略

  4. 单击“安装”

组件说明

表2 CCE容器垂直弹性引擎组件

容器组件

说明

资源类型

vpa-admission-controller

Pod创建时,将容器的资源申请量调整为VPA生成的建议值。

Deployment

vpa-recommender

采集容器的CPU、Memory的实际资源指标,根据实际资源使用率生成容器资源申请量配置建议值。

Deployment

vpa-updater

驱逐实际资源申请量与VPA建议值有偏差的Pod,触发Pod重建以使得资源建议值生效至新建的Pod。

Deployment

版本记录

表3 容器垂直弹性引擎版本记录

插件版本

支持的集群版本

更新特性

社区版本

1.0.4

v1.25

v1.27

v1.28

v1.29

v1.30

支持VPA能力

1.1.2