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

Container Compute Service:ノードアフィニティスケジューリング

最終更新日:Mar 01, 2026

ACS クラスターでは、ノードオブジェクトは仮想ノードとして表現されます。仮想ノードはラベルを使用して、ゾーン、リージョン、GPU モデルなどの属性を示します。ネイティブ Kubernetes スケジューリングセマンティクスを使用して、ACS クラスターでノードアフィニティスケジューリングを実装できます。nodeSelector または nodeAffinity フィールドでノード属性を指定して、これらの属性を持つ仮想ノードにアプリケーションをスケジュールします。このトピックでは、ACS におけるノードアフィニティスケジューリングについて説明します。

前提条件

  • kube-scheduler がインストールされており、そのバージョンが次の要件を満たしていること。

    ACS クラスターバージョン

    スケジューラコンポーネントバージョン

    1.31

    v1.31.0-aliyun-1.2.0 以降

    1.30

    v1.30.3-aliyun-1.1.1 以降

    1.28

    v1.28.9-aliyun-1.1.0 以降

  • acs-virtual-node がインストールされており、そのバージョンが v2.12.0-acs.4 以降であること。

注意事項

新しいバージョンでは、ACS スケジューラの設定項目である「GPU-HPN ノードとスケジューラのカスタムラベルを有効にする」はデフォルトで有効になっています。お客様側での設定は不要です。詳細については、「kube-scheduler」をご参照ください。

nodeSelector

nodeSelector を使用して、仮想ノードに直接ラベルを指定し、ノードアフィニティスケジューリングを行います。

nodeAffinity

nodeAffinity を使用して、ノードアフィニティ属性を宣言します。nodeSelector よりも豊富な構文をサポートしています。ACS クラスターでは、以下のすべての条件を満たす Pod に対してノードアフィニティスケジューリングを使用する場合、次の制約が適用されます。

説明

新しいバージョンでは、ACS スケジューラコンポーネントの 「GPU-HPN ノードのカスタムタグとスケジューラ」を有効にする 設定はデフォルトで有効になっています。詳細については、「kube-scheduler」をご参照ください。

  • Pod が高性能ネットワーク GPU (GPU-HPN) コンピューティングタイプを使用している。

  • Pod の schedulerNamedefault-scheduler である。

  • スケジューラコンポーネントの設定で、[GPU-HPN ノードのカスタムタグとスケジューラを有効にする] が選択されていない。

プロトコルフィールド

説明

制約

requiredDuringSchedulingIgnoredDuringExecution

ルールが満たされた場合にのみスケジューリングが実行されます。これは nodeSelector のように機能します。

nodeSelectorTerms フィールドにおいて:

  • matchExpressions では、上記のアフィニティラベルのみ指定できます。

  • matchFields は指定できません。

preferredDuringSchedulingIgnoredDuringExecution

重みによってノードアフィニティを指定します。スケジューラはルールに一致するノードを見つけようとします。一致するノードが見つからない場合でも、スケジューラは Pod をスケジュールします。

サポートされていません。

汎用、コンピューティング最適化、および GPU インスタンスの場合、nodeAffinity にはそのような制約はありません。

この例では、nodeSelector を使用して、アプリケーションを特定のゾーンにスケジュールする方法を示します。

  1. 次のコマンドを実行して、クラスター内の仮想ノードをリスト表示します。

    kubectl get node

    想定される出力:

    NAME                            STATUS   ROLES   AGE     VERSION
    virtual-kubelet-cn-hangzhou-i   Ready    agent   5h42m   v1.28.3-xx
    virtual-kubelet-cn-hangzhou-j   Ready    agent   5h42m   v1.28.3-xx
  2. dep-node-selector-demo.yaml という名前のファイルを作成し、次の YAML コンテンツを記述します。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: dep-node-selector-demo
      labels:
        app: node-selector-demo
    spec:
      replicas: 4
      selector:
        matchLabels:
          app: node-selector-demo
      template:
        metadata:
          labels:
            app: node-selector-demo
        spec:
          containers:
          - name: node-selector-demo
            image: registry-cn-hangzhou.ack.aliyuncs.com/acs/stress:v1.0.4
            command:
            - "sleep"
            - "infinity"
          # ゾーンを cn-hangzhou-j に設定します
          nodeSelector:
            topology.kubernetes.io/zone: cn-hangzhou-j
  3. 次のコマンドを実行して、アプリケーションをクラスターにデプロイします。

    kubectl apply -f dep-node-selector-demo.yaml
  4. 次のコマンドを実行して、Pod がどこにスケジュールされているかを確認します。

    kubectl get pod -o wide

    想定される出力:

    NAME                                     READY   STATUS    RESTARTS   AGE    IP               NODE                            NOMINATED NODE   READINESS GATES
    dep-node-selector-demo-b4578576b-cgpfq   1/1     Running   0          112s   192.168.xx.xxx   virtual-kubelet-cn-hangzhou-j   <none>           <none>
    dep-node-selector-demo-b4578576b-fs8kl   1/1     Running   0          110s   192.168.xx.xxx   virtual-kubelet-cn-hangzhou-j   <none>           <none>
    dep-node-selector-demo-b4578576b-nh8zm   1/1     Running   0          2m8s   192.168.xx.xxx   virtual-kubelet-cn-hangzhou-j   <none>           <none>
    dep-node-selector-demo-b4578576b-rpp8l   1/1     Running   0          2m8s   192.168.xx.xxx   virtual-kubelet-cn-hangzhou-j   <none>           <none>

    4 つの Pod はすべて cn-hangzhou-j ゾーンで実行されます。