ノードプール内のノードにラベルを追加し、ノードプール内の指定されたラベルを持つノードでアプリケーション ポッドを実行するようにスケジュールできます。
手順
ノードプール内のノードにラベルを追加します。
ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけ、その名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
[ノードプール] ページの右上隅にある [ノードプールの作成] をクリックします。
[ノードプールの作成] ダイアログボックスで、[詳細オプションの表示] をクリックし、
[ノードラベル] パラメーターの右側にある アイコンをクリックして、ノードプール内のノードにラベルを追加します。
この例では、 pod: nginx ラベルが追加されています。
[ノードプール] ページで管理するノードプールを見つけ、[アクション] 列の [編集] をクリックして、ノードプール内のノードのラベルを更新または追加することもできます。
アプリケーション ポッドのスケジューリング ポリシーを構成します。
前の手順が完了すると、 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
ノードにスケジュールされます。
参照
nodeSelector
とnodeAffinity
の詳細については、「Assigning Pods to Nodes」をご参照ください。ResourcePolicy
を使用すると、異種ノード リソース全体でのアプリケーションのスケジューリング順序を指定し、順次スケールアウトと逆順スケールインを有効にすることができます。詳細については、「優先順位ベースのリソース スケジューリングを構成する」をご参照ください。ノードプール機能がリリースされる前に作成されたレガシークラスターには、ノードプールによって管理されていない空きノードが存在する場合があります。「空きノードをノードプールに追加する」をご参照ください。