topologySpreadConstraints パラメーター

topologySpreadConstraints パラメータを使用して、ポッドをノードに均等に分散させるための Topology Spread Constraints 定義のリストを定義します。

このパラメータを定義すると、リージョン、ゾーン、ノード、およびその他のユーザー定義トポロジードメインなどの障害ドメイン間で、クラスタ全体にどのようにポッドが広がるかを制御できます。 サーバー構成が定義されている場合、Operator は事前に定義された制約セットから引き出し、それらを管理ワークロードのポッド仕様に統合します。

次のYAMLスニペットは、 topologySpreadConstraints のスキーマのサンプルです:

spec:
  topologySpreadConstraints:
    - name: constraint1
      maxSkew: 1
      topologyKey: topology.kubernetes.io/zone
      whenUnsatisfiable: DoNotSchedule
      labelSelector:
        matchLabels:
          app: sip
      matchLabelKeys:
        - type
      minDomains: 3

    - name: constraint2
      maxSkew: 2
      topologyKey: kubernetes.io/hostname
      whenUnsatisfiable: ScheduleAnyway
  
以下の表は、 SIPEnvironmentの topologySpreadConstraints パラメータに適用されるプロパティについて説明したものである。 詳細については、「 ポッドトポロジースプレッド制約 」を参照してください。
表 1. 特性 topologySpreadConstraints
プロパティー デフォルト値 値タイプ 必須 説明
name   ストリング はい Topology Spread Constraintの名前を指定します。
maxSkew   整数 はい ポッドの偏在の程度を指定する。 これは必須のプロパティであり、その値はゼロより大きくなければならない。
minDomains   整数 いいえ 対象となるドメインの最小数を指定します。
topologyKey   ストリング はい ノード・ラベルのキーを指定する。
whenUnsatisfiable   ストリング はい このプロパティを指定して、ポッドがスプレッド制約を満たさない場合の処理方法を決定する。
labelSelector   ストリング いいえ 一致するポッドを検索するには、このプロパティを指定します。
matchLabelKeys   ストリング いいえ ポッドラベルキーのリストを指定して、広がりを計算するポッドを選択する。
nodeAffinityPolicy   ストリング いいえ ポッドのトポロジースプレッドスキューを計算するときに、ポッドの nodeAffinity または nodeSelector をどのように扱うかを決定するには、このプロパティを指定する。 許可される値は Honor または Ignore である。
nodeTaintsPolicy   ストリング いいえ このプロパティを指定すると、ポッドのトポロジースプレッドスキューを計算する際に、ノードのテイントをどのように扱うかを決定することができる。 許可される値は Honor または Ignore である。

サーバーからトポロジー拡散制約を呼び出す例

例 1

次の例では、 topologySpreadConstraints を定義し、 ApiSuppliesApiDemands からのすべてのポッドが、 matchLabelKeys を使用して、均等に独立して広がる方法を示しています。

  1. SIPEnvironment カスタムリソースで topologySpreadConstraints
    
    spec:
      topologySpreadConstraints:
        - name: constraint1
          maxSkew: 1
          topologyKey: topology.kubernetes.io/zone
          whenUnsatisfiable: ScheduleAnyway
          labelSelector:
            matchLabels:
              app: sip
           matchLabelKeys: type
     
  2. 個々のサーバーまたはサービスグループのカスタムリソースから、手順1で定義したトポロジーを呼び出します。
     appServers:
        - active: true
          names:
            - ApiSupplies
          podLabels:
              app: sip
              type: appserver1
          topology:
            - [constraint1]
        - active: true
          names:
            - ApiDemands
          podLabels:
              app: sip
              type: appserver2
          topology:
            - [constraint1]

例 2

次の例は、 topologySpreadConstraints を定義し、 ApiSuppliesApiDemands のすべてのポッドが一緒に広がるように使用する方法を示しています。

  1. SIPEnvironment カスタムリソースで topologySpreadConstraints
    spec:
      topologySpreadConstraints:
        - name: constraint1
          maxSkew: 1
          topologyKey: topology.kubernetes.io/zone
          whenUnsatisfiable: ScheduleAnyway
          labelSelector:
            matchLabels:
              app: sip
  2. 個々のサーバーまたはサービスグループのカスタムリソースから、手順1で定義したトポロジーを呼び出します。
    appServers:
        - active: true
          names:
            - ApiSupplies
          podLabels:
              app: sip
              type: appserver1
          topology:
            - [constraint1]
        - active: true
          names:
            - ApiDemands
          podLabels:
              app: sip
              type: appserver2
          topology:
            - [constraint1]