通过虚拟节点将Pod调度到ECI上运行

更新时间:2025-04-15 07:34:36

当您需要在短时间内快速创建大量Pod时,ECS节点扩容速度可能无法满足要求,而预留额外的ECS节点又会产生资源浪费。借助ACK虚拟节点,您可以将Pod快速地调度到弹性容器实例ECI上运行,无需购买和管理ECS节点。本文介绍如何在ACK托管集群中将Pod调度到ECI上运行。

适用场景

ECI上运行Pod适合应对突发流量,也能降低计算成本。典型场景包括:

  • 有明显波峰波谷的在线业务

    在线教育、电商等业务的流量通常有明显的波峰波谷,使用ECI Pod可以更快速地应对突发流量,并且能显著减少固定资源池的维护,降低计算成本。

  • 非持续运行的计算任务

    使用ECI Pod运行计算任务,无需保留固定节点,仅需为任务执行期间的计算资源付费,降低计算成本,例如Spark、AI任务等。

前提条件

ACK集群的Kubernetes版本为1.16及以上,且集群所在地域支持使用ECI。

说明

您可以参见ECI支持的地域和可用区确认是否支持集群所属地域,然后登录弹性容器实例控制台开通ECI服务。

操作步骤

步骤一:部署ack-virtual-node组件

说明

下文操作以ACK托管集群为例,ACK专有集群需要通过应用市场页面部署ack-virtual-node组件,具体请参见部署ack-virtual-node组件

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择运维管理 > 组件管理

  3. 组件管理页面的核心组件区域,找到ACK Virtual Node,然后单击安装,并按照页面提示完成操作。

    安装时,使用集群默认虚拟交换机和安全组作为初始ECI配置参数。如需修改,可通过配置eci-profile更新。

步骤二:将Pod调度到ECI上运行

说明

下文操作以为PodNamespace添加Label的方式为例,介绍如何调度Pod到虚拟节点以ECI运行。更多调度方案请参见调度Pod至虚拟节点

为Pod添加Label
为Namespace添加Label

如果您有个别Pod需要调度到ECI上运行,可以直接为Pod添加特定的Label:alibabacloud.com/eci: "true",该Pod将被调度到x86架构的虚拟节点上以ECI运行。

  1. 使用以下YAML创建Deployment。

    kubectl create -f eci-pod.yaml

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

    说明

    以下YAML通过k8s.aliyun.com/eci-use-specsAnnotation指定ECI Pod的规格,如需了解更多关于ECI Pod规格配置的方式,请参见指定ECI算力规格

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: test
      labels:
        app: test
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          name: test
          labels:
            app: nginx
            alibabacloud.com/eci: "true"             # 添加特定Lable将Pod调度到ECI 
          annotations:
            k8s.aliyun.com/eci-use-specs: "2-4Gi"   # 指定ECI Pod的vCPU为2 vCPU,内存为4 GiB
        spec:
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            ports:
            - containerPort: 80
  2. 确认Pod是否运行在虚拟节点上。

    kubectl get pod -o wide -l app=nginx

    预期返回如下,在NODE字段中可以看到Pod已经调度到虚拟节点。

    NAME                    READY   STATUS    RESTARTS   AGE   IP            NODE                            NOMINATED NODE   READINESS GATES
    test-86f7fbc94f-g5m22   1/1     Running   0          38s   10.16.XX.XX   virtual-kubelet-cn-hangzhou-j   <none>           <none>
    test-86f7fbc94f-r4wcn   1/1     Running   0          38s   10.16.XX.XX   virtual-kubelet-cn-hangzhou-j   <none>           <none>
  3. 查看ECI Pod详情。

    kubectl get pod <pod-name> -o yaml

    在返回的YAML详情中,您可以通过k8s.aliyun.com/eci-instance-id获取对应的ECI实例ID,通过k8s.aliyun.com/eci-instance-spec确认ECI Pod的实际计费规格。

如果您有一类Pod需要调度到ECI上运行,可以创建一个Namespace并添加特定的Label:alibabacloud.com/eci: "true",该Namespace下的所有Pod将被调度到x86架构的虚拟节点上以ECI运行。

  1. 创建命名空间vk,并为命名空间添加特定的Label。

    kubectl create ns vk
    kubectl label namespace vk alibabacloud.com/eci=true
  2. 使用以下YAML在命名空间vk下创建Deployment。

    kubectl create -f eci-namespace.yaml

    eci-namespace.yaml的内容示例如下:

    说明

    以下YAML通过k8s.aliyun.com/eci-use-specsAnnotation指定ECI Pod的规格,如需了解更多关于ECI Pod规格配置的方式,请参见指定ECI算力规格

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: test
      namespace: vk       # 指定添加了特定Label的Namespace,将Pod调度到ECI
      labels:
        app: test
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          name: test
          labels:
            app: nginx
          annotations:
            k8s.aliyun.com/eci-use-specs: "2-4Gi"   # 指定ECI Pod的vCPU为2 vCPU,内存为4 GiB
        spec:
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            ports:
            - containerPort: 80
  3. 确认Pod是否运行在虚拟节点上。

    kubectl get pod -o wide -l app=nginx -n vk

    预期返回如下,在NODE字段中可以看到Pod已经调度到虚拟节点。

    NAME                   READY   STATUS    RESTARTS   AGE   IP            NODE                            NOMINATED NODE   READINESS GATES
    test-8f54bcfb5-86pvc   1/1     Running   0          14s   10.16.XX.XX   virtual-kubelet-cn-hangzhou-j   <none>           <none>
    test-8f54bcfb5-skvkg   1/1     Running   0          14s   10.16.XX.XX   virtual-kubelet-cn-hangzhou-j   <none>           <none>
  4. 查看ECI Pod详情。

    kubectl get pod <pod-name> -o yaml -n vk

    在返回的YAML详情中,您可以通过k8s.aliyun.com/eci-instance-id获取对应的ECI实例ID,通过k8s.aliyun.com/eci-instance-spec确认ECI Pod的实际计费规格。

  • 本页导读 (1)
  • 适用场景
  • 前提条件
  • 操作步骤
  • 步骤一:部署ack-virtual-node组件
  • 步骤二:将Pod调度到ECI上运行
  • 相关文档
AI助理

点击开启售前

在线咨询服务

你好,我是AI助理

可以解答问题、推荐解决方案等