全部產品
Search
文件中心

Container Service for Kubernetes:通過虛擬節點將Pod調度到ECI上運行

更新時間:Apr 16, 2025

當您需要在短時間內快速建立大量Pod時,ECS節點擴容速度可能無法滿足要求,而預留額外的ECS節點又會產生資源浪費。藉助ACK虛擬節點,您可以將Pod快速地調度到Elastic Container Instance上運行,無需購買和管理ECS節點。本文介紹如何在ACK託管叢集中將Pod調度到ECI上運行。

適用情境

在ECI上運行Pod適合應對突發流量,也能降低計算成本。典型情境包括:

  • 有明顯波峰波穀的線上業務

    線上教育、電商等業務的流量通常有明顯的波峰波穀,使用ECI Pod可以更快速地應對突發流量,並且能顯著減少固定資源集區的維護,降低計算成本。

  • 非持續啟動並執行計算任務

    使用ECI Pod運行計算任務,無需保留固定節點,僅需為任務執行期間的計算資源付費,降低計算成本,例如Spark、AI任務等。

前提條件

ACK叢集的Kubernetes版本為1.16及以上,且叢集所在地區支援使用ECI。

說明

您可以參見ECI支援的地區和可用性區域確認是否支援叢集所屬地區,然後登入Elastic Container Instance控制台開通ECI服務。

操作步驟

步驟一:部署ack-virtual-node組件

說明

下文操作以ACK託管叢集為例,ACK專有叢集需要通過應用市場頁面部署ack-virtual-node組件,具體請參見部署ack-virtual-node組件

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集列表

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇營運管理 > 組件管理

  3. 組件管理頁面的核心組件地區,找到ACK Virtual Node,然後單擊安裝,並按照頁面提示完成操作。

    安裝時,使用叢集預設虛擬交換器和安全性群組作為初始ECI配置參數。如需修改,可通過配置eci-profile更新。

步驟二:將Pod調度到ECI上運行

說明

下文操作以為Pod或Namespace添加Label的方式為例,介紹如何調度Pod到虛擬節點以ECI運行。更多調度方案請參見調度Pod至虛擬節點

為Pod添加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-specs的Annotation指定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的實際計費規格。

為Namespace添加Label

如果您有一類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-specs的Annotation指定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的實際計費規格。