You need to enable JavaScript to run this app.
文档中心
容器服务

容器服务

复制全文
下载 pdf
调度
VCI 实例库存感知调度
复制全文
下载 pdf
VCI 实例库存感知调度
本文介绍如何在弹性容器实例(VCI)场景下开启并使用库存感知调度(Inventory-Aware Scheduling)能力,将 VCI 实时库存信息引入调度决策,从而提升 Pod 创建到指定可用区的成功率,减少因库存不足导致的创建失败与反复重试。​
背景信息​
在传统的 VCI 实例创建流程中,调度器在为 Pod 选择可用区(AZ)时无法感知底层 VCI 的真实库存情况,可能将 Pod 调度到库存不足的可用区,导致实例创建失败。失败后需要重新走完整的调度与创建流程,既增加了创建耗时,也降低了 Pod 的创建成功率。​
库存感知调度能力在调度决策阶段引入 VCI 管控的实时库存信息。在正式创建实例之前,VCI 结合实时库存,先返回合适的可用区及预留的预调度实例,再按该结果创建实例。通过“先看库存、再定可用区、后创建实例”的方式,降低 Pod 被调度到库存不足可用区的概率,从而减少创建失败后的重试次数。​
功能说明​
库存感知调度通过在 Pod 上添加 Annotation 来开启。核心 Annotation 说明如下所示。​
​
Annotation Key​
Annotation Value 示例值​
说明​
vci.volcengine.com/inventory-aware​
true​
是否开启 VCI 实例库存感知调度:​
  • false:(默认值)不开启。​
  • true:开启。本场景需要开启库存感知调度。​
​
开启 VCI 库存感知调度后,您还可以使用以下 Annotation 声明调度偏好,在库存筛选时匹配更合适的可用区与 VCI 实例规格。更多 Annotation 说明,请参见 Pod Annotation 说明。​
​
Annotation Key​
说明​
vke.volcengine.com/burst-to-vci​
Pod 调度模式,取值:enforce,表示将 Pod 强制调度到 VCI。​
vke.volcengine.com/preferred-subnet-ids​
指定 VCI 实例使用的子网,多个子网之间以半角逗号(,)分隔,系统从多个子网中选择一个剩余 IP 数量最多的子网创建 VCI 实例。​
vci.vke.volcengine.com/preferred-instance-types​
指定 VCI 实例规格,多个规格之间以半角逗号(,)分隔,并按照前后顺序排列优先级。​
注意​
与preferred-instance-family二选一使用,避免同时配置规格和规格族,导致资源选择冲突。​
vci.vke.volcengine.com/preferred-instance-family​
指定 VCI 实例使用的规格族,多个规格之间以半角逗号(,)分隔,并按照前后顺序排列优先级。​
注意​
与preferred-instance-types二选一使用,避免同时配置规格和规格族,导致资源选择冲突。​
​
使用限制​
使用库存感知调度能力时,请注意以下限制。​
​
限制项​
说明​
功能生效范围​
库存感知仅在强制调度 Pod 到 VCI 的场景生效,即 Pod 满足如下任一情况:​
  • 使用 Annotation:vke.volcengine.com/burst-to-vci: enforce,强制调度 Pod 到 VCI。Annotation 详细说明,请参见 Pod Annotation 说明。​
  • 使用 vci-profile:enforceSelectorToVci: "true",将被selector选中的 Pod 强制调度到 VCI。vci-profile 详细说明,请参见 通过配置 vci-profile 使用 VCI。​
注意​
库存感知调度,对于通过node name为 Pod 指定某个虚拟节点的场景不生效。​
不支持 VKE 和 VCI 混部场景​
基于 ResourcePolicy 的 VKE 和 VCI 混合部署场景,暂不支持库存感知调度。ResourcePolicy 相关说明,请参见 弹性资源优先级调度。​
不兼容延迟绑定 PVC​
使用 WaitForFirstConsumer(延迟绑定)模式的 PVC 与库存感知调度不兼容,此类 Pod 会被 Webhook 拦截拒绝。​
不兼容指定网卡功能​
通过 pod-networks-definition 指定网卡的 Pod 与库存感知调度不兼容,会被 Webhook 拦截拒绝。​
库存不足时 Pod 保持 Pending​
开启库存感知后,若目标可用区库存不足,保持 Pending 状态并按指数退避持续重试,默认不设超时时间,直至库存可用后完成创建。​
​
前提条件​
  • 集群中已安装 vci-virtual-kubelet 组件。详细操作,请参见 vci-virtual-kubelet。​
操作步骤​
步骤一:强制调度到 VCI​
需要将工作负载中的全部 Pod 强制调度到 VCI。本文以创建无状态负载(Deployment)为例,更多工作负载相关操作,请参见 创建工作负载。​
  1. 使用 kubectl 连接集群。详情请参见 连接集群。​
  1. 创建 Deployment 的 YAML 文件。示例文件inventory-aware-demo.yaml代码如下。​
  • ​
    apiVersion: apps/v1​
    kind: Deployment​
    metadata:​
    name: inventory-aware-demo # Deployment 名称。​
    namespace: default # Deployment 所属命名空间。​
    spec:​
    replicas: 1 # Deployment 副本数,即 Pod 数量。​
    selector:​
    matchLabels:​
    app: inventory-aware-demo​
    template:​
    metadata:​
    labels:​
    app: inventory-aware-demo​
    annotations:​
    vke.volcengine.com/burst-to-vci: "enforce" # 将 Pod 强制调度到 VCI。​
    vci.volcengine.com/inventory-aware: "true" # 是否开启 VCI 实例库存感知调度,取值:true(开启),false(不开启)。​
    vke.volcengine.com/preferred-subnet-ids: "subnet-xxxxxxxx" # 指定 Pod 使用的子网 ID。​
    vci.vke.volcengine.com/preferred-instance-family: "vci-g3i" # 指定 Pod 使用的 VCI 实例规格族。​
    ​
    spec:​
    containers:​
    - name: app​
    image: your-image​
    command: ["/bin/sh", "-c", "sleep 36000"]​
    resources:​
    requests:​
    cpu: "1"​
    memory: 2Gi​
    limits:​
    cpu: "1"​
    memory: 2Gi​
    ​
  1. 执行以下命令创建 Deployment。​
  • ​
    kubectl apply -f inventory-aware-demo.yaml​
    ​
步骤二:验证库存感知调度效果​
创建工作负载后,调度器会先向 VCI 发起预调度,库存充足时 Pod 被调度到有库存的可用区并成功创建实例,库存不足时 Pod 保持 Pending 状态并按退避策略持续重试,直到有可用库存后再完成创建。您可以通过以下步骤观察 Pod 的调度与创建状态。​
  1. 执行以下命令,查看 Pod 状态。​
  • ​
    kubectl get pod -l app=inventory-aware-demo -o wide​
    ​
  • 预期返回结果如下:​
  • ​
    库存充足
    库存不足
    ​
    ​
    NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES​
    inventory-aware-demo-xxxxxxxxx-xxxxx 1/1 Running 0 2m 192.168.x.x x.x.x.x <none> <none>​
    ​
    ​
  1. 执行以下命令,查看调度与创建事件。​
  • ​
    kubectl describe pod <pod-name>​
    #将命令中的 <pod-name> 替换成上一步查询结果中获取到的真实 Pod 名称。​
    ​
  • 预期返回结果如下:​
  • ​
    库存充足
    库存不足
    ​
    ​
    Events:​
    Type Reason Age From Message​
    ---- ------ ---- ---- -------​
    Normal Scheduled 2m default-scheduler Successfully assigned default/inventory-aware-demo-xxx to cn-hangzhou.x.x​
    Normal Pulled 2m kubelet Container image already present on machine​
    Normal Created 2m kubelet Created container inventory-aware-demo​
    Normal Started 2m kubelet Started container inventory-aware-demo​
    ​
    ​
最近更新时间:2026.08.19 14:51:58
这个页面对您有帮助吗?
有用
有用
无用
无用