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

Container Service for Kubernetes:特定のノードプールへのアプリケーション ポッドのスケジュール

最終更新日:Mar 06, 2025

ノードプール内のノードにラベルを追加し、ノードプール内の指定されたラベルを持つノードでアプリケーション ポッドを実行するようにスケジュールできます。

手順

  1. ノードプール内のノードにラベルを追加します。

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

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

    3. [ノードプール] ページの右上隅にある [ノードプールの作成] をクリックします。

    4. [ノードプールの作成] ダイアログボックスで、[詳細オプションの表示] をクリックし、节点池[ノードラベル] パラメーターの右側にある アイコンをクリックして、ノードプール内のノードにラベルを追加します。

      この例では、 pod: nginx ラベルが追加されています。

    [ノードプール] ページで管理するノードプールを見つけ、[アクション] 列の [編集] をクリックして、ノードプール内のノードのラベルを更新または追加することもできます。Podnginx

  2. アプリケーション ポッドのスケジューリング ポリシーを構成します。

    前の手順が完了すると、 pod: nginx ラベルがノードプール内のノードに追加されます。ノードプール内の指定されたラベルを持つノードでアプリケーション ポッドを実行するようにスケジュールするには、ポッド構成で nodeSelector フィールドまたは nodeAffinity フィールドを指定します。詳細:

    • nodeSelector フィールドを指定します。

      nodeSelector は、ポッド構成の spec セクションにあるフィールドです。nodeSelector フィールドに pod: nginx ラベルを指定します。サンプルコード:

      apiVersion: apps/v1 
      kind: Deployment
      metadata:
        name: nginx-deployment-basic
        labels:
          app: nginx
      spec:
        replicas: 2
        selector:
          matchLabels:
            app: nginx
        template:
          metadata:
            labels:
              app: nginx
          spec:
            nodeSelector:
              pod: nginx      # アプリケーション ポッドがノードプール内の指定されたラベルを持つノードでのみ実行されるように、ノードプール内のノードにラベルを追加します。
            containers:
            - name: nginx
              image: nginx:1.7.9
              ports:
              - containerPort: 80
    • nodeAffinity フィールドを指定します。

      nodeAffinity は、次のスケジューリング ポリシーをサポートしています。

      • - requiredDuringSchedulingIgnoredDuringExecution

        このポリシーを使用すると、ポッドは指定された条件を満たすノードにのみスケジュールできます。指定された条件を満たすノードがない場合、条件を満たすノードが見つかるまでシステムは再試行します。IgnoreDuringExecution は、ポッドがデプロイされているノードのラベルが変更され、ノードが指定された条件を満たさなくなった場合でも、ポッドがノード上で引き続き実行されることを示します。

      • - preferredDuringSchedulingIgnoredDuringExecution

        このポリシーを使用すると、ポッドは、指定された条件を満たすノードで優先的に実行するようにスケジュールされます。条件を満たすノードがない場合、システムは条件を無視し、デフォルトのロジックに基づいてポッドをスケジュールします。

      次の例では、 requiredDuringSchedulingIgnoredDuringExecution ポリシーを使用して、アプリケーション ポッドがノードプール内の指定されたラベルを持つノードでのみ実行されるようにスケジュールしています。

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: nginx-with-affinity
        labels:
          app: nginx-with-affinity
      spec:
        replicas: 2
        selector:
          matchLabels:
            app: nginx-with-affinity
        template:
          metadata:
            labels:
              app: nginx-with-affinity
          spec:
            affinity:
              nodeAffinity:
                requiredDuringSchedulingIgnoredDuringExecution:
                  nodeSelectorTerms:
                  - matchExpressions:
                    - key: pod         # ノードに追加されるラベルのキー。この例では、 pod を使用しています。
                      operator: In      # アプリケーション ポッドが pod: nginx ラベルを持つノードで実行されるように指定します。
                      values:
                      - nginx        # ノードに追加されるラベルの値。この例では、 nginx を使用しています。
            containers:
            - name: nginx-with-affinity
              image: nginx:1.7.9
              ports:
              - containerPort: 80

構成の確認

アプリケーションの名前をクリックします。アプリケーションの詳細ページで、[ポッド] タブをクリックします。アプリケーション ポッドは、ノードプールで pod: nginx ラベルが追加されている xx.xx.33.88 ノードと xx.xx.33.92 ノードにスケジュールされます。2.jpg

参照

  • nodeSelectornodeAffinity の詳細については、「Assigning Pods to Nodes」をご参照ください。

  • ResourcePolicy を使用すると、異種ノード リソース全体でのアプリケーションのスケジューリング順序を指定し、順次スケールアウトと逆順スケールインを有効にすることができます。詳細については、「優先順位ベースのリソース スケジューリングを構成する」をご参照ください。

  • ノードプール機能がリリースされる前に作成されたレガシークラスターには、ノードプールによって管理されていない空きノードが存在する場合があります。「空きノードをノードプールに追加する」をご参照ください。