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

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

最終更新日:Nov 04, 2024

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

前提条件

手順

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

    ACKを使用すると、ノードプールを使用してクラスターノードのグループを管理できます。 たとえば、ノードプール内のノードのラベルとテイントを一元的に管理できます。 ノードプールの作成方法の詳細については、「ノードプールの作成」をご参照ください。

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

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

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

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

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

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

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

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

    • 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      # Add the label to nodes in the node pool to ensure that application pods run only on nodes that have the specified label in the node pool. 
            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         # The key of the label that is added to nodes. In this example, pod is used. 
                      operator: In      # Specifies that application pods run on nodes that have the pod: nginx label. 
                      values:
                      - nginx        # The value of the label that is added to nodes. In this example, nginx is used. 
            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

関連ドキュメント

  • nodeSelectorおよびnodeAffinityの詳細については、「ノードへのポッドの割り当て」をご参照ください。

  • アプリケーションをデプロイまたはスケールアウトするときに、ResourcePolicyをカスタマイズして、アプリケーションポッドがスケジュールされるさまざまなノードタイプの優先順位を指定できます。 システムがアプリケーションポッドでスケーリングすると、ポッドはノードの優先順位に基づいて昇順でノードから削除されます。 詳細については、「優先度ベースのリソーススケジューリングの設定」をご参照ください。