6.4. すべてのゾーンに Pod を分散する Topology CR を作成する
コントロールプレーンサービス Pod をゾーン全体に分散する Topology カスタムリソース (CR) を作成します。次の手順では、サンプルの Topology CR を作成します。Pod の配置を制御する方法は、RHOCP ノード ガイドの ノードへの Pod 配置の制御 (スケジュール) を参照してください。
手順
ワークステーション上に、コントロールプレーンサービス Pod をゾーン全体に分散する
TopologyCR を定義するファイル (例:spread_pods.yaml) を作成します。apiVersion: topology.openstack.org/v1beta1 kind: Topology metadata: name: spread-pods namespace: openstack spec: topologySpreadConstraints: - maxSkew: 1 topologyKey: topology.kubernetes.io/zone whenUnsatisfiable: DoNotSchedule matchLabelKeys: - pod-template-hash - controller-revision-hashwhenUnsatisfiable: Pod が分散制約を満たさない場合にどのように処理するかを指定します。-
DoNotSchedule: スケジューラーに Pod をスケジュールしないように指示します。これがデフォルトの動作です。デプロイメントの高可用性 (HA) を確保するには、HA サービスであるrabbitmqとgaleraをDoNotScheduleに設定します。 -
ScheduleAnyway: スケジューラーに、スキューを最小限に抑えるトポロジーを優先して Pod を任意の場所にスケジュールするように指示します。HA サービスをScheduleAnywayに設定すると、分散制約を満たすことができない場合、Pod は別のゾーンに配置されます。その後、ゾーンが実行可能になったときに Pod を手動で正しいゾーンに移動する必要があります。Pod を手動で移動する方法の詳細は、RHOCP ノード の ノードへの Pod 配置の制御 (スケジュール) を参照してください。
-
-
matchLabelKeys: アフィニティールールが適用される Pod をグループ化するために使用するラベルキーを指定します。このフィールドを使用して、スケジュール時に、同じstatefulsetまたはdeploymentリソースの Pod にのみアフィニティールールが適用されます。matchLabelKeysフィールドを使用すると、新規 Pod でリソースを更新し、分散制約ルールを新規 Pod のセットにのみ適用することができます。
各ゾーンに複数のホストノードがある場合は、ホストのアンチアフィニティーを設定して、サービス Pod を同じゾーン内のホスト全体に分散できます。
spec: topologySpreadConstraints: ... - maxSkew: 1 topologyKey: kubernetes.io/hostname whenUnsatisfiable: DoNotSchedule matchLabelKeys: - pod-template-hash - controller-revision-hashTopologyCR を作成します。$ oc create -f spread_pods.yaml
次のステップ