全部產品
Search
文件中心

Container Compute Service:ACK託管叢集Pro版接入ACS算力

更新時間:Sep 11, 2025

阿里雲Container Compute Service (ACS)已經整合到Container Service for Kubernetes,您可以通過ACK託管叢集Pro版快速使用ACS提供的容器算力。本文介紹ACK叢集如何接入ACS算力。

ACK叢集對接方式

Container Compute Service (ACS)是以Kubernetes為使用者介面的Container Service產品,提供符合容器規範的算力資源。ACS的Kubernetes管控和容器算力分層設計,為Kubernetes提供一種層次化的解決方案:ACS的計算資源層負責底層Pod容器資源的調度和分配,而Kubernetes則在此基礎上負載業務負載管理,例如管理Deployment、Service、StatefulSet、CronJob等。

ACS容器算力可以通過虛擬節點(Virtual Node)的形式接入到Kubernetes叢集中,使得叢集可以輕鬆獲得極大的彈效能力,而不必受限於叢集的節點計算容量。ACS在接管Pod容器底層基礎設施的管理工作後,Kubernetes不再需要直接負責單個Pod的放置、啟動等工作,也不再需要關心底層虛擬機器的資源情況,通過ACS即可確保Pod需要的資源隨時可用。

Container Service for Kubernetes (ACK)是全球首批通過Kubernetes一致性認證的服務平台,提供高效能的容器應用管理服務。它整合了阿里雲虛擬化、儲存、網路和安全能力,簡化叢集的搭建和擴容等工作,讓您專註於容器化的應用的開發與管理。

ACK託管叢集Pro版中,您需要先手動部署虛擬節點,才能建立ACS Pod。叢集需要擴容時,可以直接在虛擬節點下按需建立ACS Pod,而無需規劃節點的計算容量,ACS Pod與叢集中真實節點上的Pod之間網路互連。建議您將部分長時間運行且流量彈性變化的業務負載調度至虛擬節點,這可以充分利用已有資源,縮短彈性擴容的時間,並減少擴容成本。當業務流量下降後,您可以快速釋放部署在虛擬節點上的Pod,從而降低使用成本。虛擬節點上的Pod均基於ACS運行在安全隔離的容器運行環境中,每個Pod對應一個ACS執行個體。更多資訊,請參見ACK產品概述

前提條件

  • 對於不同Kubernetes版本的ACK託管叢集Pro版,虛擬節點群組件(ACK Virtual Node)版本需要滿足以下要求。

    Kubernetes版本

    虛擬節點群組件版本

    1.26及以上

    v2.13.0及以上

安裝ACK Virtual Node組件啟用ACS算力

ACS容器算力可以以虛擬節點的形式接入到ACK叢集中,使得叢集可以輕鬆獲得極大的彈效能力,而不必受限於叢集的節點計算容量。具體操作步驟如下:

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

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

  3. 核心組件分頁選擇ACK Virtual Node組件進行安裝或者升級到指定版本。

    image

  4. 若安裝ACK Virtual Node前提示開通並授權ACS,需要按指引開通並授權ACS。完成ACS的開通和授權後點擊確定安裝。

  5. 安裝完成後,在左側導覽列選擇節點管理 > 節點,新增的虛擬節點名稱預設會以virtual-kubelet-為開頭。

    image

ACK使用ACS CPU算力樣本

ACK Virtual Node組件安裝或升級到前提條件中的指定版本後,將同時支援ACS和ECI兩種算力。

說明

在Pod調度到虛擬節點的情境中,如果沒有指定為ACS的算力類型,則預設會優先使用ECI彈性執行個體。

ACK使用ACS CPU算力可以通過以下步驟實現:

  1. 通過NodeSelector、親和性和反親和性、ResourcePolicy和配置標籤alibabacloud.com/acs: "true"等調度方式將Pod調度到虛擬節點。具體步驟,請參見節點親和性調度

    說明

    alibabacloud.com/acs: "true"的調度方式不支援在ACK Serverless叢集中使用,目前支援範圍為:ACK託管叢集ACK專有叢集ACK One註冊叢集ACK Edge叢集

  2. 通過標籤(alibabacloud.com/compute-class:計算類型)指定建立ACS Pod的執行個體類型。關於ACS執行個體類型的介紹,請參見ACS Pod執行個體概述

具體操作步驟如下:

  1. 部署Deployment。

    重要

    如果採用添加Pod Label(alibabacloud.com/acs: "true")的調度方式,則不支援使用WaitForFirstConsumer類型的Storageclass。因此,在ACK叢集中使用ACS算力,且ACS Pod需要掛載雲端硬碟時,請採用nodeSelector或者ResourcePolicy的方式將Pod調度到虛擬節點。關於ResourcePolicy的配置,請參見ACK Pro叢集支援ECS和ACS算力混合調度

    NodeSelector

    1. 執行以下命令,查看虛擬節點的標籤。命令中的virtual-kubelet-cn-hangzhou-k請按實際內容修改。

      kubectl get node virtual-kubelet-cn-hangzhou-k -oyaml

      預期輸出(僅展示labels相關關鍵內容):

      apiVersion: v1
      kind: Node
      metadata:
        labels:
          kubernetes.io/arch: amd64
          kubernetes.io/hostname: virtual-kubelet-cn-hangzhou-k
          kubernetes.io/os: linux
          kubernetes.io/role: agent
          service.alibabacloud.com/exclude-node: "true"
          topology.diskplugin.csi.alibabacloud.com/zone: cn-hangzhou-k
          topology.kubernetes.io/region: cn-hangzhou
          topology.kubernetes.io/zone: cn-hangzhou-k
          type: virtual-kubelet # 所有虛擬節點都存在該標籤,可以使用該標籤實現Pod定向調度到虛擬節點。
        name: virtual-kubelet-cn-hangzhou-k
      spec:
        taints:
        - effect: NoSchedule
          key: virtual-kubelet.io/provider
          value: alibabacloud 
    2. 使用以下YAML內容建立nginx.yaml,部署2個Pod。

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: nginx
        labels:
          app: nginx
      spec:
        replicas: 2
        selector:
          matchLabels:
            app: nginx
        template:
          metadata:
            name: nginx
            labels:
              app: nginx 
              alibabacloud.com/compute-class: general-purpose # 配置ACS Pod的算力類型,未配置預設general-purpose
              alibabacloud.com/compute-qos: default # 配置ACS Pod的算力品質,未配置預設default
          spec:
            nodeSelector:
              type: virtual-kubelet #定向調度到虛擬節點
            tolerations:
            - key: "virtual-kubelet.io/provider" # 容忍虛擬節點的汙點 
              operator: "Exists"
              effect: "NoSchedule"
            containers:
            - name: nginx
              image: registry.openanolis.cn/openanolis/nginx:1.14.1-8.6
              resources:
                limits:
                  cpu: 2
                requests:
                  cpu: 2
    3. 建立應用Nginx並查看部署結果。

      1. 執行以下命令,建立應用Nginx。

        kubectl apply -f nginx.yaml 
      2. 執行以下命令,查看部署結果。

        kubectl get pods -o wide

        預期輸出:

        NAME                    READY   STATUS    RESTARTS   AGE   IP               NODE                            NOMINATED NODE   READINESS GATES
        nginx-9cdf7bbf9-s****   1/1     Running   0          36s   10.0.6.68        virtual-kubelet-cn-hangzhou-j   <none>           <none>
        nginx-9cdf7bbf9-v****   1/1     Running   0          36s   10.0.6.67        virtual-kubelet-cn-hangzhou-k   <none>           <none>

        可以看到,這兩個Pod通過nodeSelector被調度到labeltype=virtual-kubelet的節點上。

    Pod標籤調度

    1. 使用以下YAML內容建立nginx.yaml。

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: nginx
        labels:
          app: nginx
      spec:
        replicas: 2
        selector:
          matchLabels:
            app: nginx
        template:
          metadata:
            labels:
              app: nginx 
              alibabacloud.com/acs: "true" # 配置使用ACS算力
              alibabacloud.com/compute-class: general-purpose # 配置ACS Pod的算力類型,未配置預設general-purpose
              alibabacloud.com/compute-qos: default # 配置ACS Pod的算力品質,未配置預設default
          spec:
            containers:
            - name: nginx
              image: registry.openanolis.cn/openanolis/nginx:1.14.1-8.6
              resources:
                limits:
                  cpu: 2
                requests:
                  cpu: 2
    2. 建立應用Nginx並查看部署結果。

      1. 執行以下命令,建立應用Nginx。

        kubectl apply -f nginx.yaml 
      2. 執行以下命令,查看部署結果。

        kubectl get pods -o wide

        預期輸出:

        NAME                    READY   STATUS    RESTARTS   AGE   IP               NODE                            NOMINATED NODE   READINESS GATES
        nginx-9cdf7bbf9-s****   1/1     Running   0          36s   10.0.6.68        virtual-kubelet-cn-hangzhou-j   <none>           <none>
        nginx-9cdf7bbf9-v****   1/1     Running   0          36s   10.0.6.67        virtual-kubelet-cn-hangzhou-k   <none>           <none>

        可以看到,這兩個Pod通過nodeSelector被調度到labeltype=virtual-kubelet的節點上。

  2. 查看應用Nginx的Pod詳情,確認Pod為ACS Pod執行個體。

    1. 執行以下命令,查看應用Nginx的Pod詳情。

      kubectl describe pod nginx-9cdf7bbf9-s**** 

      預期輸出(關鍵資訊):

      Annotations:      ProviderCreate: done
                        alibabacloud.com/client-token: edf29202-54ac-438e-9626-a1ca007xxxxx
                        alibabacloud.com/instance-id: acs-2ze008giupcyaqbxxxxx
                        alibabacloud.com/pod-ephemeral-storage: 30Gi
                        alibabacloud.com/pod-use-spec: 2-4Gi
                        alibabacloud.com/request-id: A0EF3BF3-37E7-5A07-AC2D-68A0CFCxxxxx
                        alibabacloud.com/schedule-result: finished
                        alibabacloud.com/user-id: 14889995898xxxxx
                        kubernetes.io/pod-stream-port: 10250
                        kubernetes.io/preferred-scheduling-node: virtual-kubelet-cn-hangzhou-j/1
                        kubernetes.io/resource-type: serverless

      輸出的Pod內容中存在註解alibabacloud.com/instance-id: acs-2ze008giupcyaqbxxxxx則可確認該Pod為ACS Pod執行個體。

ACK使用ACS GPU算力樣本

與ACS CPU算力的主要鏈路和使用流程相同,但使用ACS GPU算力還需要確保調度相關的組件版本符合預期,並進行一些額外的配置。

組件配置

對於不同Kubernetes版本ACK託管叢集Pro版,叢集調度器組件kube-scheduler版本需要滿足以下要求。

Kubernetes版本

叢集調度器版本

1.26及以上

各叢集版本對應的調度器組件版本如下:

  • 1.31叢集版本,對應v1.31.0-aliyun.6.8.4.8f585f26及以上的調度器版本。

  • 1.30叢集版本,對應v1.30.3-aliyun.6.8.4.946f90e8及以上的調度器版本。

  • 1.28叢集版本,對應v1.28.12-aliyun-6.8.4.b27c0009及以上的調度器版本。

  • 1.26叢集版本,對應v1.26.3-aliyun-6.8.4.4b180111及以上的調度器版本。

使用方法

...     
     labels:
        # label中聲明acs GPU資源需求
        alibabacloud.com/compute-class: gpu     #如為GPU類型,固定gpu即可
        alibabacloud.com/compute-qos: default   #計算qos類型,含義與普通acs算力相同
        alibabacloud.com/gpu-model-series: GN8IS  # GPU卡型,請按照實際情況替換
...
說明
  1. 以下是GPU算力三種不同的配置樣本。

    NodeSelector

    使用以下內容,建立GPU負載。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: dep-node-selector-demo
      labels:
        app: node-selector-demo
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: node-selector-demo
      template:
        metadata:
          labels:
            app: node-selector-demo
            # acs屬性
            alibabacloud.com/compute-class: gpu
            alibabacloud.com/compute-qos: default
            alibabacloud.com/gpu-model-series: example-model  # GPU卡型,請按照實際情況替換,例如T4
        spec:
          # 指定vk的標籤
          nodeSelector:
            type: virtual-kubelet
          # 容忍vk的taint
          tolerations:
          - key: "virtual-kubelet.io/provider" # 容忍虛擬節點的汙點
            operator: "Exists"
            effect: "NoSchedule"
          containers:
          - name: node-selector-demo
            image: registry-cn-hangzhou.ack.aliyuncs.com/acs/stress:v1.0.4
            command:
            - "sleep"
            - "1000h"
            resources:
              limits:
                cpu: 1
                memory: 1Gi
                nvidia.com/gpu: "1"
              requests:
                cpu: 1
                memory: 1Gi
                nvidia.com/gpu: "1"

    ResourcePolicy

    使用以下內容,建立GPU負載。

    apiVersion: scheduling.alibabacloud.com/v1alpha1
    kind: ResourcePolicy
    metadata:
      name: dep-rp-demo
      namespace: default
    spec:
      selector:
        app: dep-rp-demo
      units:
      - resource: acs
        podLabels:
          alibabacloud.com/compute-class: gpu
          alibabacloud.com/compute-qos: default
          alibabacloud.com/gpu-model-series: example-model  # GPU卡型,請按照實際情況替換,例如T4
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: dep-rp-demo
      labels:
        app: dep-rp-demo
      annotations:
        resourcePolicy: "dep-rp-demo"  # 引用 ResourcePolicy 的名稱
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: dep-rp-demo
      template:
        metadata:
          labels:
            app: dep-rp-demo
        spec:
          containers:
          - name: demo
            image: registry-cn-hangzhou.ack.aliyuncs.com/acs/stress:v1.0.4
            command:
            - "sleep"
            - "1000h"
            resources:
              limits:
                cpu: 1
                memory: 1Gi
                nvidia.com/gpu: "1"
              requests:
                cpu: 1
                memory: 1Gi
                nvidia.com/gpu: "1"

    更多使用ResourcePolicy進行資源調度的配置,請參見自訂資源優先順序調度

    Pod標籤調度

    使用以下內容,建立GPU負載。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: dep-node-selector-demo
      labels:
        app: node-selector-demo
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: node-selector-demo
      template:
        metadata:
          labels:
            app: node-selector-demo
            # acs屬性
            alibabacloud.com/acs: "true" # 配置使用ACS算力
            alibabacloud.com/compute-class: gpu
            alibabacloud.com/compute-qos: default
            alibabacloud.com/gpu-model-series: example-model  # GPU卡型,請按照實際情況替換,例如T4
        spec:
          containers:
          - name: node-selector-demo
            image: registry-cn-hangzhou.ack.aliyuncs.com/acs/stress:v1.0.4
            command:
            - "sleep"
            - "1000h"
            resources:
              limits:
                cpu: 1
                memory: 1Gi
                nvidia.com/gpu: "1"
              requests:
                cpu: 1
                memory: 1Gi
                nvidia.com/gpu: "1"
  2. 執行以下命令,查看GPU負載運行狀態。

    kubectl get pod node-selector-demo-9cdf7bbf9-s**** -oyaml

    預期輸出(關鍵資訊):

        phase: Running
    
        resources:
          limits:
            #other resources
            nvidia.com/gpu: "1"
          requests:
            #other resources
            nvidia.com/gpu: "1"

ACK使用ACS GPU HPN算力樣本

ACS GPU HPN算力的使用與ACS CPU算力的主要鏈路和使用流程相同,但存在以下使用要求:

  • 僅支援在ACK託管叢集、ACK One註冊叢集、ACK One分布式工作流程Argo叢集中使用,不支援其他類型叢集。

  • 需提前購買GPU-HPN容量預留,並關聯到叢集。

  • kube-scheduler版本要求如下:

    ACK版本

    ACK調度器版本

    1.28

    v1.28.12-aliyun-6.9.3.cd73f3fe及以上。

    1.30

    v1.30.3-aliyun.6.9.3.ce7e2faf及以上。

    1.31

    v1.31.0-aliyun.6.9.3.051bb0e8及以上。

    1.32

    v1.32.0-aliyun.6.9.3.515ac311及以上。

    1.33

    v1.33.0-aliyun.6.9.4.8b58e6b4及以上。

  • ACK Virtual Node組件要求v2.15.0及以上版本。

使用方法

...     
labels:
  # label中聲明acs GPU資源需求
  alibabacloud.com/compute-class: gpu-hpn     #固定為gpu-hpn類型
  alibabacloud.com/compute-qos: default   #計算qos類型,含義與普通acs算力相同
...
說明
  • 關於ACS的算力類型和算力品質,請參見計算類型與算力品質的對應關係

  • 關於ACS Pod的其他功能參數配置,請參見ACS Pod

  • ACS GPU HPN類型Node僅能調度gpu-hpn計算類的Pod(Pod資源聲明中可以不填寫GPU資源需求),不能調度其他計算類或者未聲明計算類的Pod。

  1. 您可以使用K8s的NodeSelector配置,將Pod指定調度到GPU HPN節點上。

    重要

    ACS GPU HPN類型Pod請重點關注以下欄位配置:

    • 指定計算類:alibabacloud.com/compute-class: gpu-hpn

    • 指定預留節點標籤:alibabacloud.com/node-type: reserved

    • 資源規格的requestslimits欄位的裝置資源名稱,請參考實際的裝置卡型填寫,例如NVIDIA或其他。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: dep-node-selector-demo
      labels:
        app: node-selector-demo
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: node-selector-demo
      template:
        metadata:
          labels:
            app: node-selector-demo
            # acs屬性
            alibabacloud.com/compute-class: gpu-hpn
            alibabacloud.com/compute-qos: default
        spec:
          # 指定gpu-hpn預留節點標籤
          nodeSelector:
            alibabacloud.com/node-type: reserved
          containers:
          - name: node-selector-demo
            image: registry-cn-hangzhou.ack.aliyuncs.com/acs/stress:v1.0.4
            command:
            - "sleep"
            - "1000h"
            resources:
              limits:
                cpu: 1
                memory: 1Gi
                nvidia.com/gpu: "1" # 請根據實際卡型填寫對應的資源名稱
              requests:
                cpu: 1
                memory: 1Gi
                nvidia.com/gpu: "1" # 請根據實際卡型填寫對應的資源名稱
  2. 查看GPU負載運行狀態。

    kubectl get pod node-selector-demo-9cdf7bbf9-s**** -oyaml

    預期輸出(關鍵資訊):

        phase: Running
    
        resources:
          limits:
            #other resources
            nvidia.com/gpu: "1"
          requests:
            #other resources
            nvidia.com/gpu: "1"