機械翻訳について

ノード・ヒーティングの問題

WebLogic Kubernetes Operatorは、起動される各WebLogic Serverインスタンスのポッドを作成します。 次に、「Kubernetesスケジューラ」はポッドごとにノードを選択します。 デフォルトのスケジューリング・アルゴリズムでは、必要なコンテナ・イメージがすでにプルされているノードを選択する場合に大幅に重み付けされるため、多くの場合、Kubernetesは同じノード上でWebLogic Serverインスタンスのポッドの多くを実行しますが、他のノードはあまり利用されません。 これは、一般的に「ノード・ヒーティングの問題」と呼ばれます。

解決策の1つは、ノードのプロビジョニングの一環として、必要なすべてのコンテナ・イメージをワーカー・ノードで使用できるようにすることです。 必要なコンテナ・イメージが各ワーカー・ノードで使用可能な場合、Kubernetesスケジューラは、かわりに、使用可能なCPUおよびメモリーや単純なラウンドロビンなどの他のファクタに基づいてノードを選択します。

オペレータ・チームは、「インターポッド・アフィニティとアンチ・アフィニティ」に基づく別のソリューションを推奨します。 このソリューションには、ノード・ヒーティング問題の解決と、特定のクラスタまたはドメインからWebLogic Serverインスタンスのポッドをより広範囲に分散するようにKubernetesスケジューラに明示的に指示する利点があります。 ポッド・アフィニティとアンチ・アフィニティは、スケジューラがすでに実行中のポッドの詳細に基づいて新しいポッドのノードを選択できるようにするKubernetesスケジューラの機能です。 WebLogic Serverユースケースでは、多くの場合、サーバー・インスタンスが使用可能なノードに分散するように、他のWebLogic Serverインスタンスのポッドとのアンチ・アフィニティを目的とします。

オペレータ・バージョン4.0から、デフォルトでは、オペレータは、ドメイン・カスタム・リソースのクラスタ・スコープのserverPod要素に次のコンテンツを追加します。

clusters:
- clusterName: cluster-1
  serverPod:
    affinity:
      podAntiAffinity:
        preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 100
            podAffinityTerm:
              labelSelector:
                matchExpressions:
                  - key: "weblogic.clusterName"
                    operator: In
                    values:
                    - $(CLUSTER_NAME)
                  - key: "weblogic.domainUID"
                    operator: In
                    values:
                    - $(DOMAIN_UID)
              topologyKey: "kubernetes.io/hostname"

ここでのserverPod要素はクラスタにスコープ指定されているため、affinity要素のコンテンツは、このWebLogicクラスタのメンバーである各WebLogic Serverインスタンスに対して生成されたポッドに追加されます。 このポッド間アンチ・アフィニティ文は、スケジューラが新しいポッドに対してノードを選択するプリファレンスを表します。これによって、ラベルweblogic.clusterNameおよびこのクラスタの名前を持つポッドがすでにあるノードと、ラベルweblogic.domainUIDおよびこのドメインのUIDが回避されます。 weightは最大重量である100に設定されているため、この用語はコンテナ・イメージの可用性に基づいてノードの可能なプリファレンスを上回ることに注意してください。

WebLogicクラスタの一部ではないサーバー・ポッドの場合、オペレータは、ドメイン・カスタム・リソースのドメイン・スコープのserverPod要素に次のコンテンツを追加します。 次に示すのはアフィニティ対策ですが、ドメイン内のすべてのWebLogic Serverインスタンスが、実行中のインスタンスに対してポッドがまだないノードで実行することを希望するようにテストを変更します。

clusters:
- clusterName: cluster-1
  serverStartState: "RUNNING"
  serverPod:
    affinity:
      podAntiAffinity:
        preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 100
            podAffinityTerm:
              labelSelector:
                matchExpressions:
                  - key: "weblogic.domainUID"
                    operator: In
                    values:
                    - $(DOMAIN_UID)
              topologyKey: "kubernetes.io/hostname"

デフォルトのアフィニティ設定をカスタマイズしたり、ほかの多くのスケジューリング設定や制約を表示したりできます。 次の例も同様に、アンチ・アフィニティを表しますが、ドメイン内のすべてのWebLogic Serverインスタンスが、S1の値を持つsecurityラベルを持つPodがまだないノードで実行することを希望するようにテストを変更します。

serverPod:
  affinity:
    podAntiAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 100
        podAffinityTerm:
          labelSelector:
            matchExpressions:
            - key: "security"
              operator: In
              values:
              - "S1"
          topologyKey: "kubernetes.io/hostname"

ラベルや変数置換の詳細など、オペレータがWebLogic Serverインスタンスのポッドを生成する方法の詳細は、「こちら」を参照してください。