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

Container Compute Service:Pod を仮想ノードを使用して ACS にスケジューリングする

最終更新日:Mar 26, 2026

Container Compute Service (ACS) は、仮想ノードを介して ACK One 登録済みクラスターと統合されており、基盤となるインフラストラクチャを管理することなく、既存のワークロードと並行してサーバーレス ACS Pod を実行できます。

仕組み

ACS は、Kubernetes コントロールとコンピューティングを分離する階層型アーキテクチャを使用しています。Kubernetes コントロール層はワークロード (Deployment、Service、StatefulSet、CronJob) を管理し、コンピューティング層は Pod にリソースをスケジュールし、割り当てます。

ACK One 登録済みクラスターでは、ack-virtual-node コンポーネントが ACS が提供する仮想ノードをプロビジョニングします。これらの仮想ノードにスケジュールされた Pod は、ノード容量を計画する必要なくオンデマンドでスケーリングする、隔離されたサーバーレスコンテナである ACS Pod として実行されます。ACS Pod は、同じクラスター内の物理ノード上の Pod と通信します。

image

前提条件

開始する前に、以下を確認してください。

スケジューリング方法の選択

ACS は、仮想ノードへの Pod のスケジューリングに 2 つの方法をサポートしています。ユースケースに基づいて選択してください。

方法仕組み最適な用途
ラベルスケジューリング (推奨)Pod ラベルに alibabacloud.com/acs: "true" を追加複数のワークロードの移行。`nodeSelector` または Toleration は不要
NodeSelectornodeSelector: type: virtual-kubelet を設定し、Toleration を追加どの Pod を仮想ノードに配置するかを明示的に制御
コンピューティングクラスを指定しない場合、デフォルトで Elastic Container Instance が Pod スケジューリングで優先されます。

CPU コンピューティング能力の使用

ラベルスケジューリング

ラベルに alibabacloud.com/acs: "true" を含むすべての Pod は、自動的に仮想ノードにスケジュールされます。 nodeSelector や Toleration の指定は不要です。

  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 # コンピューティングクラス。デフォルト: general-purpose。
            alibabacloud.com/compute-qos: default           # QoS クラス。デフォルト: default。
        spec:
          containers:
          - name: nginx
            image: mirrors-ssl.aliyuncs.com/nginx:stable-alpine
            ports:
              - containerPort: 80
                protocol: TCP
            resources:
              limits:
                cpu: 2
              requests:
                cpu: 2
  2. アプリケーションをデプロイします。

    kubectl apply -f nginx.yaml
  3. Pod が仮想ノードで実行されていることを確認します。

    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>
  4. アノテーションを確認して、Pod が ACS Pod であることを確認します。

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

    出力には alibabacloud.com/instance-id: acs-uf6008giwgjxlvn***** アノテーションが含まれており、Pod が ACS Pod として実行されていることを確認できます。

    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

NodeSelector

この方法では、nodeSelector および Toleration を使用して、仮想ノードを明示的に指定します。まず、仮想ノードのラベルを確認し、「type: virtual-kubelet」ラベルが設定されていることを確認します。

  1. 仮想ノードのラベルをクエリします。virtual-kubelet-cn-shanghai-l をご利用の実際の仮想ノード名に置き換えてください。

    kubectl get node virtual-kubelet-cn-shanghai-l -oyaml

    期待される出力:

    apiVersion: v1
    kind: Node
    metadata:
      labels:
       beta.kubernetes.io/arch: amd64
        beta.kubernetes.io/os: linux
        kubernetes.io/arch: amd64
        kubernetes.io/hostname: virtual-kubelet-cn-shanghai-l
        kubernetes.io/os: linux
        kubernetes.io/role: agent
        service.alibabacloud.com/exclude-node: "true"
        topology.diskplugin.csi.alibabacloud.com/zone: cn-shanghai-l
        topology.kubernetes.io/region: cn-shanghai
        topology.kubernetes.io/zone: cn-shanghai-l
        type: virtual-kubelet # このラベルを nodeSelector の値として使用し、仮想ノードをターゲットにします。
      name: virtual-kubelet-cn-shanghai-l
    spec:
      taints:
      - effect: NoSchedule
        key: virtual-kubelet.io/provider
        value: alibabacloud
  2. 次の内容で nginx.yaml という名前のファイルを作成します。

    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 # コンピューティングクラス。デフォルト: general-purpose。
            alibabacloud.com/compute-qos: default           # QoS クラス。デフォルト: default。
        spec:
          nodeSelector:
            type: virtual-kubelet          # 仮想ノードをターゲットにします。
          tolerations:
          - key: "virtual-kubelet.io/provider" # 仮想ノードの Taint を許容します。
            operator: "Exists"
            effect: "NoSchedule"
          containers:
          - name: nginx
            image: mirrors-ssl.aliyuncs.com/nginx:stable-alpine
            ports:
              - containerPort: 80
                protocol: TCP
            resources:
              limits:
                cpu: 2
              requests:
                cpu: 2
  3. アプリケーションをデプロイします。

    kubectl apply -f nginx.yaml
  4. Pod が仮想ノードで実行されていることを確認します。

    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>

アフィニティ、アンチアフィニティ、ResourcePolicies を含むその他のスケジューリングオプションについては、「ノードアフィニティスケジューリング」および「ACS Pod の概要」をご参照ください。

GPU コンピューティング能力の使用

ACK One 登録済みクラスターでの GPU コンピューティング能力は招待プレビュー中です。アクセスをリクエストするには、チケットを送信してください。

手順は CPU と同様ですが、2 つの相違点があります。alibabacloud.com/compute-class: gpu を設定し、alibabacloud.com/gpu-model-series ラベルを追加して GPU モデル (例: T4) を指定します。また、スケジューリングコンポーネントがバージョン要件を満たしていることを確認する必要があります。

サポートされている GPU モデルの完全なリストについては、「GPU モデル」をご参照ください。コンピューティングクラスとサービス品質 (QoS) クラスのマッピングについては、「コンピューティングクラスとコンピューティング能力 QoS クラス間のマッピング」をご参照ください。

ラベルスケジューリング

  1. 次の内容で gpu-workload.yaml という名前のファイルを作成します。

    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
            alibabacloud.com/acs: "true"                        # ACS 仮想ノードにスケジュールします。
            alibabacloud.com/compute-class: gpu                 # GPU コンピューティング能力のために gpu に設定します。
            alibabacloud.com/compute-qos: default
            alibabacloud.com/gpu-model-series: example-model   # T4 など、GPU モデルを指定します。
        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. ワークロードをデプロイします。

    kubectl apply -f gpu-workload.yaml
  3. GPU ワークロードが実行中であることを確認します。

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

    期待される出力:

        phase: Running
    
        resources:
          limits:
            # その他のリソース
            nvidia.com/gpu: "1"
          requests:
            # その他のリソース
            nvidia.com/gpu: "1"

NodeSelector

  1. 次の内容で gpu-workload.yaml という名前のファイルを作成します。

    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
            alibabacloud.com/compute-class: gpu                # GPU コンピューティング能力のために gpu に設定します。
            alibabacloud.com/compute-qos: default
            alibabacloud.com/gpu-model-series: example-model  # T4 など、GPU モデルを指定します。
        spec:
          nodeSelector:
            type: virtual-kubelet                              # 仮想ノードをターゲットにします。
          tolerations:
          - key: "virtual-kubelet.io/provider"                # 仮想ノードの Taint を許容します。
            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"
  2. ワークロードをデプロイします。

    kubectl apply -f gpu-workload.yaml
  3. GPU ワークロードが実行中であることを確認します。

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

    期待される出力:

        phase: Running
    
        resources:
          limits:
            # その他のリソース
            nvidia.com/gpu: "1"
          requests:
            # その他のリソース
            nvidia.com/gpu: "1"

次のステップ