6.3. 特定のゾーンの Topology CR を作成する
openstack namespace 内の各ゾーンに Topology カスタムリソース (CR) を作成します。これらのゾーンのいずれかで Pod を実行するようにスケジュールできます。次の手順では、サンプルの Topology CR を作成します。この手順を繰り返して、環境内のすべてのゾーンに Topology CR を作成します。
手順
ワークステーション上に、ゾーンの
TopologyCR を定義するファイル (例:topology_zone1.yaml) を作成します。apiVersion: topology.openstack.org/v1beta1 kind: Topology metadata: name: <topology_name> namespace: openstack spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: topology.kubernetes.io/zone operator: In values: - <zone_name>-
<topology_name>は、このTopologyCR の名前 (例:zone1-node-affinity) に置き換えます。名前は一意で、小文字の英数字と - (ハイフン) または . (ピリオド) のみを使用し、先頭と末尾は英数字でなければなりません。 -
<zone_name>は、このTopologyCR に関連付けられているゾーンの名前 (例:zone1) に置き換えます。
-
各ゾーンに複数のホストノードがある場合は、ホストのアンチアフィニティーを設定して、サービス Pod を同じゾーン内のホスト全体に分散できます。
spec: ... topologySpreadConstraints: - maxSkew: 1 topologyKey: kubernetes.io/hostname 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 のセットにのみ適用することができます。
TopologyCR を作成します。$ oc create -f topology_zone1.yaml