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

Container Service for Kubernetes:仮想ノードを使用した ACS への Pod のスケジュール

最終更新日:Jan 24, 2026

このトピックでは、仮想ノードを使用して、ACK One 登録済みクラスターから Alibaba Cloud Serverless (ACS) の計算能力に Pod をスケジュールする方法について説明します。仮想ノードを使用すると、物理ノードをプロビジョニングまたは管理することなく、ACS 上でワークロードを実行できます。

仕組み

仮想ノードは、ACS の計算能力をお客様の ACK One 登録済みクラスターに統合します。`ack-virtual-node` コンポーネントをインストールすると、お客様のクラスターに仮想ノードが作成されます。Pod を仮想ノードにスケジュールすると、ACS はその Pod 用にサーバーレス計算リソースを自動的にプロビジョニングします。Pod は ACS 上の分離された環境で実行され、クラスター内の他の Pod と通信できます。仮想ノードは、物理ノードのプロビジョニングや管理を必要とせずにオンデマンドでスケールするため、トラフィックパターンが変動的または予測不能なワークロードに最適です。

image

仮想ノードの詳細については、「登録済みクラスターの概要」をご参照ください。

前提条件

ack-virtual-node コンポーネントの RAM 権限の設定

onectl

  1. ご利用のオンプレミスマシンに onectl をインストールします。詳細については、「onectl を使用した登録済みクラスターの管理」をご参照ください。

  2. 次のコマンドを実行して、ack-virtual-node コンポーネントの RAM 権限を設定します:

    onectl ram-user grant --addon ack-virtual-node

    想定される出力:

    Ram policy ack-one-registered-cluster-policy-ack-virtual-node granted to ram user ack-one-user-ce313528c3 successfully.

コンソール

コンポーネントをインストールする前に、RAM ユーザーを作成し、必要な権限を付与し、その AccessKey を作成します。この AccessKey を使用して、コンポーネントがクラウドサービスにアクセスできるようにする Secret を作成します。

  1. RAM コンソールに移動します。

  2. (オプション) カスタムポリシーを作成します。次のポリシー内容を使用します。

    カスタムポリシーのテンプレート

    {
        "Version": "1",
        "Statement": [
            {
                "Action": [
                    "vpc:DescribeVSwitches",
                    "vpc:DescribeVpcs"
                ],
                "Resource": "*",
                "Effect": "Allow"
            },
            {
                "Action": [
                    "eci:CreateContainerGroup",
                    "eci:DeleteContainerGroup",
                    "eci:DescribeContainerGroups",
                    "eci:DescribeContainerGroupStatus",
                    "eci:DescribeContainerGroupEvents",
                    "eci:DescribeContainerLog",
                    "eci:UpdateContainerGroup",
                    "eci:UpdateContainerGroupByTemplate",
                    "eci:CreateContainerGroupFromTemplate",
                    "eci:RestartContainerGroup",
                    "eci:ExportContainerGroupTemplate",
                    "eci:DescribeContainerGroupMetric",
                    "eci:DescribeMultiContainerGroupMetric",
                    "eci:ExecContainerCommand",
                    "eci:CreateImageCache",
                    "eci:DescribeImageCaches",
                    "eci:DeleteImageCache",
                    "eci:DescribeContainerGroupMetaInfos",
                    "eci:UpdateImageCache",
                    "eci:RestartContainer",
                    "eci:RestartContainers"
                ],
                "Resource": [
                    "*"
                ],
                "Effect": "Allow"
            },
            {
                "Action": [
                    "acc:RecommendZones",
                    "acc:DescribeZones",
                    "acc:CreateInstance",
                    "acc:UpdateInstance",
                    "acc:DeleteInstance",
                    "acc:RestartInstance",
                    "acc:DescribeInstances",
                    "acc:DescribeInstanceStatus",
                    "acc:DescribeInstanceEvents",
                    "acc:DescribeInstanceDetail",
                    "acc:DescribeMultiInstanceMetric",
                    "acc:DescribeContainerLog",
                    "acc:ResizeInstanceVolume",
                    "acc:CreateCustomResource",
                    "acc:UpdateCustomResource",
                    "acc:DeleteCustomResource",
                    "acc:DescribeCustomResources",
                    "acc:DescribeCustomResourceDetail",
                    "acc:DescribeReservationMetrics"
                ],
                "Resource": "*",
                "Effect": "Allow"
            }
        ]
    }
  3. RAM ユーザーに権限を付与する。システムポリシーの AliyunECIFullAccessAliyunVPCReadOnlyAccess、および AliyunAccFullAccess をアタッチするか、作成したカスタムポリシーをアタッチできます。

  4. RAM ユーザーの AccessKey を作成します。

    警告

    AccessKey のネットワークアクセス制御ポリシー」で説明されているように、ネットワークアクセス制御ポリシーを設定して、AccessKey の呼び出しを信頼できるネットワーク環境に制限します。これにより、AccessKey のセキュリティが強化されます。

  5. AccessKey を使用して、登録済みクラスターに alibaba-addon-secret という名前のシークレットを作成します。

    kubectl -n kube-system create secret generic alibaba-addon-secret --from-literal='access-key-id=<your access key id>' --from-literal='access-key-secret=<your access key secret>'

    ここで <your access key id><your access key secret> は、前のステップで取得した AccessKey の値です。

    ack-virtual-node コンポーネントをインストールすると、この AccessKey を使用して、対応するクラウドサービスに自動的にアクセスします。

例:ACS CPU 計算能力の使用

ack-virtual-node コンポーネントをバージョン 2.13.0 以降にインストールまたはアップグレードすると、ACS と Elastic Container Instance (ECI) の両方の計算能力がサポートされます。

説明

Pod が仮想ノードにスケジュールされるシナリオでは、計算能力タイプとして ACS を指定しない場合、デフォルトで ECI が使用されます。

ACK One 登録済みクラスターで ACS CPU 計算能力を使用するには、次の手順を実行します。

  1. 登録済みクラスターのセキュリティグループ設定を更新します。

  2. クラスターの[基本情報]ページで、[コントロールプレーンセキュリティグループ]の ID をクリックします。

  3. セキュリティグループの詳細ページで、[ルールを追加] をクリックします。以下の値を使用してルールを設定します。

    ルールタイプ

    プロトコル

    ポート範囲

    ソース IP 範囲

    説明

    インバウンド

    TCP

    80

    IDC クラスターの CIDR ブロック (例:192.168.1.0/24)。

    ACS エンドポイントシナリオを設定するため。

    インバウンド

    TCP

    443

    IDC クラスターの CIDR ブロック (例:192.168.1.0/24)。

    ACS エンドポイントシナリオを設定するため。

    インバウンド

    TCP

    10250

    IDC クラスターの CIDR ブロック (例:192.168.1.0/24)。

    サーバーレス kubelet サービスがリッスンするポート。

  4. ACS 計算能力を使用する Deployment を作成します。

  5. 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 の計算能力タイプを設定します。
            alibabacloud.com/compute-qos: default # ACS Pod の計算能力品質を設定します。
        spec:
          containers:
          - name: nginx
            image: mirrors-ssl.aliyuncs.com/nginx:stable-alpine
            ports:
              - containerPort: 80
                protocol: TCP 
            resources:
              limits:
                cpu: 2
              requests:
                cpu: 2
  6. 次のコマンドを実行して、nginx アプリケーションを作成します。

    kubectl apply -f nginx.yaml 
  7. 次のコマンドを実行して、デプロイメントのステータスを確認します。

    kubectl get pods -o wide

    想定される出力 (簡略版):

    NAME                     READY   STATUS    RESTARTS   AGE     IP               NODE                            NOMINATED NODE   READINESS GATES
    nginx-54bcbc9b66-****   1/1     Running   0          3m29s   192.168.XX.XXX   virtual-kubelet-cn-shanghai-l   <none>           <none>
    nginx-54bcbc9b66-****   1/1     Running   0          3m29s   192.168.XX.XXX   virtual-kubelet-cn-shanghai-l   <none>           <none>

    出力から、2つの Pod が type=virtual-kubelet というラベルの付いたノードにスケジュールされていることがわかります。

  8. 次のコマンドを実行して、nginx Pod の詳細を表示します。

    kubectl describe pod nginx-54bcbc9b66-**** 

    想定される出力:

    Annotations:  ProviderCreate: done
                  alibabacloud.com/instance-id: acs-uf6008giwgjxlvn*****
                  alibabacloud.com/pod-ephemeral-storage: 30Gi
                  alibabacloud.com/pod-use-spec: 2-2Gi
                  kubernetes.io/pod-stream-port: 10250
                  network.alibabacloud.com/enable-dns-cache: false
                  topology.kubernetes.io/region: cn-shanghai

    出力に Annotation alibabacloud.com/instance-id: acs-uf6008giwgjxlvn***** が含まれている場合、その Pod は ACS Pod インスタンスです。

例:ACS GPU 計算能力の使用

ACK One 登録済みクラスター向けの ACS GPU 計算能力は招待プレビュー中です。この機能を有効にするには、チケットを送信してください。

GPU ワークロードの設定

機能が有効になったら、GPU ワークロードを設定できます。次の例は、Pod を 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. 次のサンプル YAML を使用して 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"

例:ACS GPU HPN 計算能力の使用

ACS GPU HPN 計算能力を使用するプロセスは、ACS CPU 計算能力を使用する場合と似ていますが、次の要件があります。

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

  • ACS GPU HPN の計算能力には、ack-virtual-node コンポーネントのアップグレードが必要です。必要なコンポーネントのバージョンは現在、招待プレビュー中です。この機能を有効にするには、チケットを送信してください。

GPU HPN ワークロードの設定

ACS GPU HPN 計算能力を使用するには、Pod 仕様で次のラベルを設定します。

...     
labels:
  # ラベルで ACS GPU リソース要件を宣言します。
  alibabacloud.com/compute-class: gpu-hpn     # gpu-hpn タイプに設定します。
  alibabacloud.com/compute-qos: default    # コンピューティング QoS タイプ。意味は通常の ACS 計算能力と同じです。
  alibabacloud.com/acs: "true"           # ACS 計算能力の使用を設定するためのラベル。
...
説明
  • ACS のコンピューティングタイプと計算能力品質の関係の詳細については、「コンピューティングタイプと計算能力品質の関係」をご参照ください。

  • ACS Pod の他のパラメーターの詳細については、「ACS Pod」をご参照ください。

  • ACS GPU HPN タイプのノードは、gpu-hpn コンピュートクラスの Pod のみをスケジュールできます。GPU リソース要件は、Pod のリソース宣言から省略できます。これらのノードは、他のコンピュートクラスの Pod、またはコンピュートクラスが宣言されていない Pod をスケジュールできません。

  1. Pod を GPU HPN ノードにスケジュールするには、Kubernetes の nodeSelector を使用します。例:

    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
            alibabacloud.com/acs: "true" 
        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" # 実際のカードモデルに基づいて対応するリソース名を入力します。
    重要

    ACS GPU HPN タイプの Pod については、次のフィールド設定に注意してください。

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

    • 予約済みノードラベルには、 alibabacloud.com/node-type: reserved を指定します。

    • リソース仕様の requests および limits フィールドにあるデバイスリソース名には、NVIDIA などの実際のデバイスモデルを使用します。

  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"