Kubernetes での Flex Gateway デプロイメントのノード選択の設定 (ノードアフィニティ)

Flex Gateway は、クラスターのパフォーマンスやセキュリティにとって不可欠であることが少なくないため、他のデプロイメントをホストするノードを使用する代わりに、特定の要件を満たす専用のノードでホストすることが重要です。

Kubernetes スケジューラーで、Flex Gateway が含まれるポッドの適切なホストノードを選択できるようにするには、ポッドの要件を Flex Gateway デプロイメントの Helm チャートに組み込むカスタムノードアフィニティルールを YAML 設定ファイルで設定します。ノードアフィニティについての詳細は、 Kubernetes ドキュメント​を参照してください。

ノードアフィニティを設定するためのタスクの概要を次に示します。

  1. ノードアフィニティルールおよび条件を定義するときに使用するノード表示ラベルを検索して作成する (「​ノード表示ラベルのリストおよび作成​」を参照)。

  2. コンテナ化された Flex Gateway アプリケーションを使用してポッドをホストするノードの要件および設定を YAML 設定ファイルで指定する (「​Flex Gateway コンテナのポッドに対してノードを照合するルールの設定​」を参照)。

  3. YAML 設定を使用して Helm チャートをアップグレードする (「​Helm チャートのアップグレード​」を参照)。

始める前に

ソフトウェア要件​で説明されている Kubernetes および Helm の最小バージョン要件を満たします。

ノード表示ラベルのリストおよび作成

各ノードアフィニティルールでは、ノード表示ラベルのキーと 1 つ以上の表示ラベルの値が必要です。既存のノード表示ラベルを使用するか、新しいノード表示ラベルを作成できます。ノード表示ラベルは、キー-値ペアとして定義されます。

  • クラスターのノードおよびノード表示ラベルをリストするには、以下を実行します。

    kubectl get nodes --show-labels
  • クラスターのノードの表示ラベルを作成するには、以下を実行します。

    kubectl label nodes <node-name> <label-key>=<label-value>

関連する Kubernetes ドキュメントについては、 「ラベルをノードに追加する」​を参照してください。

Flex Gateway コンテナのポッドに対してノードを照合するルールの設定

Kubernetes スケジューラーは、ノードアフィニティルールを使用して、ポッドに対してノードを照合できます。照合プロセスにより、スケジューラーはポッドにデプロイされるノードを選択できます。

ノードアフィニティルールを [required (必須)]、[preferred (優先)]、またはその両方として設定します。

  • requiredDuringSchedulingIgnoredDuringExecution​: Kubernetes スケジューラーがこの種類の照合を適用する場合、ノードはポッドに設定されたすべてのノードアフィニティルールに一致する必要があります。それ以外の場合は、デプロイメントに失敗します。

  • preferredDuringSchedulingIgnoredDuringExecution​: ポッドのに設定された加重設定に基づいて、Kubernetes スケジューラーは最も一致するノードを選択します。スケジューラーはノードを選択する必要があるため、設定に一致するノードがない場合は一致しないノードを選択します。

案内については、次の設定オプションを参照してください。

Flex Gateway が含まれるポッドの [Required (必須)] ノード一致ルールの設定

[required (必須)] ノード一致では、ノードはポッドに設定されたすべてのノードアフィニティルールに一致する必要があります。それ以外の場合は、デプロイメントに失敗します。

Flex Gateway が含まれるポッドのノードアフィニティルールを YAML 設定ファイルで設定します。ルールの条件ごとに、ノード表示ラベル (​key​ として)、演算子、およびそのキーのノードを受け入れる 1 つ以上のノード表示ラベル値が必要です。​In​、​NotIn​、​Exists​、​DoesNotExist​、​Gt​、​Lt​ を演算子として使用できます。

affinity:
 nodeAffinity:
   requiredDuringSchedulingIgnoredDuringExecution:
     nodeSelectorTerms:
     - matchExpressions:
       - key: <node-label-key>
         operator: <operator>
         values:
         - <node-label-value>
       # - Add any other node label values.
    # - Add any other required conditions.

値と条件は、ノードで必要なだけ追加できます。

ポッドの YAML 設定ファイルを設定したら、「Helm チャートのアップグレード」に進みます。

Flex Gateway が含まれるポッドの [Preferred (優先)] ノード一致ルールの設定

[preferred (優先)] ノード一致では、Kubernetes スケジューラーは加重設定に基づいてノードを選択します。スケジューラーはノードを選択する必要があるため、設定に一致するノードがない場合は一致しないノードを選択します。

Flex Gateway が含まれるポッドのノードアフィニティルールを YAML 設定ファイルで設定します。ルールの条件ごとに、ノード表示ラベル (​key​ として)、演算子、およびそのキーのノードを受け入れる 1 つ以上のノード表示ラベル値が必要です。​In​、​NotIn​、​Exists​、​DoesNotExist​、​Gt​、​Lt​ を演算子として使用できます。 また、Kubernetes スケジューラーがより重要なルールを判断して、最も一致するノードを選択できるように、​preference​ ごとに ​1​ ~ ​100​ の ​weight​ 値を指定します。照合は、ノードに適合する加重設定の合計に基づいて行われます。スケジューラーは、加重の少ない他のノードを除外して加重の合計の最も大きいノードを選択します。

affinity:
 nodeAffinity:
   preferredDuringSchedulingIgnoredDuringExecution:
   - weight: <integer-x>
     preference:
       matchExpressions:
       - key: <node-label-key1>
         operator: <operator>
         values:
         - <node-label-value>
       # - Add any other values.
    - weight: <integer-y>
      preference:
        matchExpressions:
        - key: <node-label-key2>
          operator: <operator>
          values:
          - <node-label-value>
        # - Add any other node label values.
      # - Add any other preferred conditions.
  # - Any any more preferred rules.

任意の数の優先値、条件、ルールを追加できます。

ポッドの YAML 設定ファイルを設定したら、「Helm チャートのアップグレード」に進みます。

Flex Gateway が含まれるポッドの [Required (必須)] および [Preferred (優先)] ノード一致ルールの設定

同じ YAML ファイルで両方のノードアフィニティ種別 ([required (必須)] および [preferred (優先)]) を設定できます。

Flex Gateway が含まれるポッドのノードアフィニティルールを YAML 設定ファイルで設定します。ルールの条件ごとに、ノード表示ラベル (​key​ として)、演算子、およびそのキーのノードを受け入れる 1 つ以上のノード表示ラベル値が必要です。​In​、​NotIn​、​Exists​、​DoesNotExist​、​Gt​、​Lt​ を演算子として使用できます。 また、Kubernetes スケジューラーがより重要なルールを判断して、最も一致するノードを選択できるように、​preference​ ごとに ​1​ ~ ​100​ の ​weight​ 値を指定します。照合は、ノードに適合する加重設定の合計に基づいて行われます。スケジューラーは、加重の少ない他のノードを除外して加重の合計の最も大きいノードを選択します。

affinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
      - matchExpressions:
        - key: <node-label-key>
          operator: <operator>
          values:
          - <node-label-value>
        # - Add any other node label values.
    # - Add any other conditions.
    preferredDuringSchedulingIgnoredDuringExecution:
      - weight: <integer-x>
        preference:
          matchExpressions:
          - key: <node-label-key1>
            operator: <operator>
            values:
            - <node-label-value>
          # - Add any other node label values.
      - weight: <integer-y>
        preference:
          matchExpressions:
          - key: <node-label-key2>
            operator: <operator>
            values:
            - <node-label-value>
          # - Add any other node label values.
       # - Add any other preferred conditions.
    # - Any any other preferred rules.

ポッドの YAML 設定ファイルを設定したら、「Helm チャートのアップグレード」に進みます。

Helm チャートのアップグレード

ノードアフィニティ設定を YAML 設定ファイルに追加したら、Kubernetes スケジューラーが設定を使用できるように、ファイルを Flex Gateway デプロイメントの Helm チャートに組み込みます。

helm​ コマンドを使用して、ノードアフィニティ設定を YAML 設定ファイルから Helm チャートに組み込みます。使用するコマンドは、Flex Gateway がインストールされているかどうかによって異なります。

  • Flex Gateway を始めてインストールする場合、次のコマンドを使用して、すべての値をチャートに設定します。

    helm -n gateway upgrade -i --create-namespace \
    --wait ingress flex-gateway/flex-gateway \
    -f <path-to-yaml-file> \
    --set-file registration.content=<path-to-registration>

    このコマンドでは、ノードアフィニティルールが含まれる YAML ファイルが渡されます。

  • Flex Gateway がすでにインストールされている場合、このコマンドを使用して、チャートの既存の設定を再利用し、ノードアフィニティ設定を定義します。

    helm -n gateway upgrade -i --create-namespace \
    --wait ingress flex-gateway/flex-gateway \
    --reuse-values -f <path-to-yaml-file>

    このコマンドでは、ノードアフィニティルールが含まれる YAML ファイルが渡されます。

Helm コマンドについては、 「Helm Upgrade (Helm のアップグレード)」​を参照してください。