本文主要介绍如何使用弹性容器实例(VCI)库存感知调度,感知 VCI 资源的库存,合理规划容器业务。
说明
【邀测·申请试用】:该功能目前处于邀测阶段,如需使用,请提交申请。
一个 Kubernetes 集群分为控制面和数据面,通常编排和调度 Pod 的组件在控制面,拉起 Pod 使其运行的组件在数据面,因此一个 Pod 的生命周期可以简单分为两个阶段:
对于 VKE 集群而言,VCI 属于一个特殊的数据面,可将集群中的 Pod 调度到 VCI 上。然而 VCI 资源,尤其 GPU 等稀缺资源和大规格(例如 64 核)资源可能会有售罄的情况,此时集群仍将 Pod 调度到 VCI 上会导致 VCI 没有足够的资源拉起 Pod,从而使 Pod 进入 Failed 状态。
针对上述场景,VCI 提供库存感知调度能力,使得 VKE 在调度 Pod 时,能够感知到 VCI 的资源库存,选择库存更加充足的可用区(AZ)或者部署模式来调度 Pod 到 VCI 或者 ECS,从而提升 Pod 创建成功率。
由于库存感知调度依赖多个 VKE 中组件的共同作用,部分组件是需要在 VKE 集群升级到特定版本之后才能具备对应的能力,因此使用 VCI 库存感知调度能力前,请确保业务所在的 VKE 集群版本满足如下要求:
若集群版本不满足要求,请升级集群版本。详细操作,请参见 升级集群。
集群版本满足要求后,需要确保已安装 VCI 库存感知调度能力依赖的组件 vci-virtual-kubelet 和 scheduler-plugin 组件,同时在 scheduler-plugin 中开启 VCI 库存感知调度 开关。
...
> 安装 后,自定义设置 库存感知频率,调整组件对 VCI 库存信息的查询频率。首次配置该参数时,建议您设置为:60 秒。详细说明,请参见 vci-virtual-kubelet 组件。...
> 安装 后需要进行二次配置,在本文操作中必须开启 VCI 库存感知调度 开关。详细操作和组件配置参数说明,请参见 scheduler-plugin 组件。VCI 库存感知能力的最终结果会受到集群调度器、VCI Annotation、VCI Profile 以及 ResourcePolicy 等多种机制共同影响,具体影响举例说明请见下文。
通过如下两种方式,实现指定 Pod 必须调度到 VCI 资源上:
vke.volcengine.com/burst-to-vci: enforce
,详细操作,请参见 创建实例、Pod Annotation 说明。enforceSelectorToVci: true
。详细操作,请参见 通过配置 vci-profile 使用 VCI。根据 步骤二 中 VCI 库存感知调度 开关的开启和关闭状态的不同,Pod 创建结果也不同:
通过如下三种方式,实现同时允许 Pod 调度到 ECS 节点和 VCI 资源上:
tolerations: # 该 toleration 表示允许 Pod 调度到 VCI 上 - effect: NoSchedule key: vci.vke.volcengine.com/node-type operator: Equal value: vci
enforceSelectorToVci: true
或 配置enforceSelectorToVci: false
。详细操作,请参见 通过配置 vci-profile 使用 VCI。根据 步骤二 中 VCI 库存感知调度 开关的开启和关闭状态的不同,Pod 创建结果也不同:
通过为 Pod 指定node name
为某个虚拟节点名称,可以实现强制 Pod 调度到指定的虚拟节点上。
这种场景下,VCI 库存感知调度不会生效,因为 Pod 会绕过 Kubernetes 调度机制直接在虚拟节点中创建,因此即便打开了 VCI 库存感知调度,Pod 仍然可能会因为 VCI 资源不足而创建失败,进入 Failed 状态。