全部产品
Search
文档中心

弹性容器实例:调度Pod到x86架构的虚拟节点

更新时间:May 23, 2025

对于ACK Serverless集群,所有Pod均运行在虚拟节点(默认x86架构)上,无需进行调度;对于ACK集群,即混合使用标准节点(ECS)和虚拟节点(ECI,基于VK)的模式下,默认会将Pod调度到ECS节点,您可以根据需要将Pod调度到虚拟节点。本文介绍如何将ACK集群中的Pod调度到x86架构的虚拟节点上,以ECI来运行。

调度方式概述

您可以通过以下几种方式将Pod调度到x86架构的虚拟节点:

说明
  • 下述方式均需要对存量资源做一定的修改,无法做到零侵入,建议您配置eci-profile实现将Label匹配的Pod自动调度到ECI。

  • 如果采用添加Lable或者指定nodeName的调度方式,则ECI Pod挂载云盘动态存储卷时,不支持使用WaitForFirstConsumer类型的Storageclass。更多信息,请参见使用云盘动态存储卷

  • 配置Pod Label

    如果您有个别Pod需要调度到ECI上运行,可以直接为Pod添加特定的Label,则该Pod将运行在x86架构的虚拟节点上。

  • 配置Namespace Label

    如果您有一类Pod需要调度到ECI上运行,可以创建一个Namespace并添加特定的Label,则该Namespace下的所有Pod将运行在x86架构的虚拟节点上。

  • 配置nodeSelector和tolerations、指定nodeName等其它方式

    x86架构的虚拟节点默认配置了Label和Taint,因此可以为Pod配置对应的nodeSelector和tolerations将Pod调度到x86架构的虚拟节点上,或者也可以采用指定nodeName的方式进行调度。

方式一:配置Pod Label

您可以为Pod添加alibabacloud.com/eci=true的Label,将Pod调度到ECI上运行。

说明

仍支持添加eci=true的Label,但不推荐。

配置示例如下:

  1. 创建Pod的YAML配置文件。

    vim test-pod.yaml

    test-pod.yaml的内容示例如下:

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx1
      labels: 
        alibabacloud.com/eci: "true"   # 添加特定Label
    spec:
      containers:
      - image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
        imagePullPolicy: Always
        name: nginx
  2. 创建Pod。

    kubectl create -f test-pod.yaml 

方式二:配置Namespace Label

您可以创建一个Namespace并添加alibabacloud.com/eci=true的Label,则该Namespace下的所有Pod将调度到ECI上运行。

说明

仍支持添加virtual-node-affinity-injection=enabled的Label,但不推荐。

配置示例如下:

  1. 创建Namespace。

    kubectl create ns vk
  2. 为Namespace添加Label。

    kubectl label namespace vk alibabacloud.com/eci=true
  3. 创建Pod的YAML配置文件。

    vim test-pod.yaml

    test-pod.yaml的内容示例如下:

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      namespace: vk  # 指定添加了特定Label的Namespace
    spec:
      containers:
      - image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
        imagePullPolicy: Always
        name: nginx
  4. 创建Pod。

    kubectl create -f test-pod.yaml 

(不推荐)其它方式

您可以通过配置nodeSelector和tolerations、指定nodeName等方式将Pod调度到ECI上运行。

配置示例如下:

  1. 创建Pod的YAML配置文件。

    vim test-pod.yaml

    test-pod.yaml的内容示例如下:

    • 配置nodeSelector和tolerations

      apiVersion: v1
      kind: Pod
      metadata:
        name: nginx
      spec:
        containers:
        - image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
          imagePullPolicy: Always
          name: nginx
        nodeSelector:    # 配置nodeSelector
          type: virtual-kubelet
        tolerations:     # 配置tolerations
        - key: virtual-kubelet.io/provider
          operator: Exists
    • 指定nodeName

      apiVersion: v1
      kind: Pod
      metadata:
        name: nginx
      spec:
        containers:
        - image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
          imagePullPolicy: Always
          name: nginx
        nodeName: virtual-kubelet-cn-beijing-g # 指定nodeName
  2. 创建Pod。

    kubectl create -f test-pod.yaml