すべてのプロダクト
Search
ドキュメントセンター

Container Compute Service:ACK Pro クラスターで ACS のコンピューティング能力を使用する

最終更新日:Jun 11, 2025

Container Compute Service (ACS)Container Service for Kubernetes に統合されています。これにより、ACK Pro クラスター で ACS のコンピューティング能力を使用できます。このトピックでは、ACK Pro クラスターで ACS のコンピューティング能力を使用する方法について説明します。

ACK Pro クラスターで ACS のコンピューティング能力を使用する方法

Container Compute Service (ACS) は、Kubernetes のコンテナ仕様に準拠したコンテナコンピューティングリソースを提供するクラウドコンピューティングサービスです。ACS は、階層型アーキテクチャを採用して Kubernetes の制御とコンピューティング能力を実装しています。コンピューティングリソース層は、Pod にリソースをスケジュールおよび割り当てます。Kubernetes 制御層は、デプロイメント、サービス、ステートフルセット、CronJob などのワークロードを管理します。

ACS のコンピューティング能力は、仮想ノードを使用して Kubernetes クラスターに実装できます。このように、Kubernetes クラスターは高い弾力性を備え、クラスターノードのコンピューティング容量に制限されなくなります。ACS を使用して Pod のインフラストラクチャ管理を引き継いだ後、Kubernetes クラスターは個々の Pod をスケジュールまたは起動する必要がなくなります。さらに、Kubernetes クラスターは基盤となる VM のリソースを気にする必要がなくなります。ACS はいつでも Pod のリソース要件を満たすことができます。

Container Service for Kubernetes (ACK) は、世界で初めて Certified Kubernetes Conformance Program に参加したサービスの 1 つです。ACK は、高性能なコンテナ化アプリケーション管理サービスを提供します。ACK は、Alibaba Cloud によって提供される仮想化、ストレージ、ネットワーク、およびセキュリティ機能と統合されています。ACK は、クラスターのセットアップとスケーリングを簡素化し、コンテナ化アプリケーションの開発と管理に集中できるようにします。

ACK Pro クラスター に ACS Pod を作成する前に、クラスターに仮想ノードをデプロイする必要があります。ACK Pro クラスターをスケールアウトする必要がある場合は、仮想ノードのリソース容量を計画することなく、仮想ノードに ACS Pod を作成できます。ACS Pod は、クラスター内の物理ノード上の Pod と通信できます。ワークロードが定期的に変動する長期アプリケーションを仮想ノードにデプロイすることをお勧めします。これにより、リソース使用率が向上し、リソースコストが削減され、スケーリングプロセスが高速化されます。アプリケーションのワークロードが減少した場合は、仮想ノードから Pod を削除してリソースコストを削減できます。仮想ノード上の Pod は、ACS 上に構築された安全で隔離された環境で実行されます。この場合、Pod は ACS Pod と呼ばれます。詳細については、「ACK クラスターの概要」をご参照ください。

前提条件

  • ACK Pro クラスターで ACS のコンピューティング能力を使用するには、最初に必要なクラウドサービスをアクティブ化し、必要な権限を付与する必要があります。

    • Container Service for Kubernetes をアクティブ化し、ACS にデフォルトのロールを割り当て、その他の必要なクラウドサービスをアクティブ化します。詳細については、「ACK マネージドクラスターを作成する」をご参照ください。

    • ACS コンソール にログオンします。画面の指示に従って ACS をアクティブ化します。

  • Kubernetes 1.26 以降を実行する ACK Pro クラスター が作成されます。詳細については、「ACK マネージドクラスターを作成する」をご参照ください。クラスターを更新する方法の詳細については、「ACK クラスターを手動でアップグレードする」をご参照ください。

  • ACK Pro クラスター の Kubernetes バージョンに基づいて、特定のバージョンの ACK Virtual Node コンポーネントをインストールする必要があります。次の表に、バージョンのマッピングの詳細を示します。

    Kubernetes バージョン

    ACK Virtual Node バージョン

    ≥ 1.26

    ≥ v2.13.0

ACK Virtual Node をインストールして ACS のコンピューティング能力を実装する

ACS のコンピューティング能力は、仮想ノードを使用して ACK クラスターに実装できます。このように、Kubernetes クラスターは高い弾力性を備え、クラスターノードのコンピューティング容量に制限されなくなります。次のセクションでは、SFTP を使用してファイルを転送する方法について説明します。

  1. ACK コンソール にログオンします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、管理するクラスターを見つけて、その名前をクリックします。左側のナビゲーションウィンドウで、[アドオン] をクリックします。

  3. [コアコンポーネント] タブで、[ACK 仮想ノード] を選択し、[インストール] をクリックしてコンポーネントをインストールするか、[更新] をクリックしてコンポーネントを必要なバージョンに更新します。

    image

  4. [ACK Virtual Node] をインストールするときに、コンソールから [ACS をアクティブ化して権限を付与する] よう求められた場合は、画面の指示に従って ACS をアクティブ化して権限を付与します。[OK] をクリックします。

  5. コンポーネントをインストールした後、クラスタ詳細ページの左側のナビゲーションウィンドウで [ノード] > [ノード] を選択します。デフォルトでは、仮想ノードの名前には virtual-kubelet- というプレフィックスが付いています。

    image

前提条件 セクションの説明に従って、必要なバージョンの ACK Virtual Node をインストールするか、コンポーネントを必要なバージョンに更新した後、ACS Pod と Elastic Container Instance を作成できます。

説明

仮想ノードに Pod をスケジュールするときに、Pod のコンピューティングクラスを指定しないと、デフォルトで Elastic Container Instance が Pod スケジューリングの優先順位付けられます。

ACK クラスターで ACS のコンピューティング能力を実装するには、次の手順を実行します。

  1. ノードセレクター、affinity および anti-affinity ルール、ResourcePolicy、および alibabacloud.com/acs: "true" ラベルを構成して、Pod を仮想ノードにスケジュールします。詳細については、「ノード affinity スケジューリング」をご参照ください。

    説明

    alibabacloud.com/acs: "true" ラベルは、サーバーレス Kubernetes クラスター には適用されません。これは、ACK マネージドクラスター専用クラスターACK One 登録済みクラスター、および ACK Edge クラスター に適用されます。

  2. ACS Pod を作成するときは、Pod に alibabacloud.com/compute-class:Compute class ラベルを追加して、Pod のコンピューティングクラスを指定します。ACS Pod のコンピューティングクラスの詳細については、「ACS Pod の概要」をご参照ください。

次のセクションでは、SFTP を使用してファイルを転送する方法について説明します。

  1. デプロイメントを作成します。

    重要

    alibabacloud.com/acs: "true" Pod ラベルを使用して Pod を仮想ノードにスケジュールする場合、WaitForFirstConsumer StorageClass はサポートされていません。したがって、ACK クラスターでディスクがマウントされている 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 を仮想ノードにスケジュールする場合は、このラベルを Pod のノードセレクターとして構成できます。
        name: virtual-kubelet-cn-hangzhou-k
      spec:
        taints:
        - effect: NoSchedule
          key: virtual-kubelet.io/provider
          value: alibabacloud 
    2. 次のコンテンツに基づいて nginx.yaml という名前の 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 の QoS クラス。デフォルト値: 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 アプリケーションをデプロイし、Pod をクエリします。

      1. 次のコマンドを実行して、NGINX アプリケーションをデプロイします。

        kubectl apply -f nginx.yaml 
      2. 次のコマンドを実行して、NGINX アプリケーションがデプロイされているかどうかを確認します。

        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>

        この結果から、2 つの Pod が type=virtual-kubelet ラベル を持つノードにデプロイされていることがわかります。これは、デプロイメント構成の nodeSelector パラメーターで指定されています。

    Pod ラベルに基づいて Pod をスケジュールする

    1. 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 の QoS クラス。デフォルト値: 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 アプリケーションをデプロイし、Pod をクエリします。

      1. 次のコマンドを実行して、NGINX アプリケーションをデプロイします。

        kubectl apply -f nginx.yaml 
      2. 次のコマンドを実行して、NGINX アプリケーションがデプロイされているかどうかを確認します。

        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>

        この結果から、2 つの Pod が type=virtual-kubelet ラベル を持つノードにデプロイされていることがわかります。これは、デプロイメント構成の nodeSelector パラメーターで指定されています。

  2. NGINX アプリケーション用に 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 であることを示しています。

ACS GPU コンピューティング能力を使用する手順は、ACS CPU コンピューティング能力を使用する手順と似ています。ただし、スケジューリングコンポーネントがバージョン要件を満たしていることを確認し、追加の構成を追加する必要もあります。

コンポーネントを構成する

ACK Pro クラスター の Kubernetes バージョンに基づいて、特定のバージョンの kube-scheduler コンポーネントをインストールする必要があります。次の表に、バージョンのマッピングの詳細を示します。

Kubernetes バージョン

スケジューラーバージョン

≥ 1.26

Kubernetes のさまざまなバージョンに対応するスケジューラーバージョン:

  • Kubernetes 1.31 のスケジューラーバージョン: v1.31.0-aliyun.6.8.4.8f585f26 以降。

  • Kubernetes 1.30 のスケジューラーバージョン: v1.30.3-aliyun.6.8.4.946f90e8 以降。

  • Kubernetes 1.28 のスケジューラーバージョン: v1.28.12-aliyun-6.8.4.b27c0009 以降。

  • Kubernetes 1.26 のスケジューラーバージョン: v1.26.3-aliyun-6.8.4.4b180111 以降。

アクティブ化する方法

ACK クラスターで ACS GPU コンピューティング能力を使用する機能は、招待プレビューです。この機能を使用するには、チケットを提出 して機能をアクティブ化する必要があります。

この機能の使用方法

...     
     labels:
        # 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 コンピューティングパワーの使用例を 3 つ示します。

    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:
          # 指定されたラベル。
          nodeSelector:
            type: virtual-kubelet
          # 許容される汚染。
          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 を使用してリソースをスケジュールする方法の詳細については、「カスタムの優先順位に基づくリソーススケジューリング」をご参照ください。

    ポッドラベルに基づいてポッドをスケジュールする

    以下の内容に基づいて、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:
            #その他のリソース
            nvidia.com/gpu: "1"
          requests:
            #その他のリソース
            nvidia.com/gpu: "1"

ACK での ACS GPU-HPN ポッドの使用例

ACS GPU-HPN ポッドは、ACS CPU アクセラレーテッドポッドと同じ方法で使用できます。以下の要件が満たされていることを確認してください。

  • ACS GPU-HPN ポッドは、ACK マネージドクラスター、ACK One 登録済みクラスター、および分散 Argo ワークフロー用の ACK One Kubernetes クラスターでのみ使用できます。

  • 最初に GPU-HPN キャパシティ予約 を購入し、クラスターに関連付ける必要があります。

  • kube-scheduler および ACK Virtual Node コンポーネントを更新および構成する必要があります。コンポーネントのバージョンは招待プレビュー中です。[チケットの送信] してこれらのバージョンに更新してください。

手順

...     
labels:
  # ACS GPU リソースをリクエストするためのラベルを追加します。
  alibabacloud.com/compute-class: gpu-hpn     #gpu-hpn に設定します。
  alibabacloud.com/compute-qos: default   #QoS クラス。
...
説明
  1. Kubernetes NodeSelector を構成して、ポッドを GPU-HPN ノードにスケジュールできます。

    重要

    ACS GPU-HPN ポッドを構成する際は、次のパラメーターに注意してください。

    • alibabacloud.com/compute-class: gpu-hpn: コンピューティングクラスを指定します。

    • alibabacloud.com/node-type: reserved: 予約ノードを指定します。

    • 実際のモデルに基づいて requestslimits を構成します。

    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:
            #その他のリソース
            nvidia.com/gpu: "1"
          requests:
            #その他のリソース
            nvidia.com/gpu: "1"