6.7.2. Pod のアンチアフィニティーを使用するノードの再起動
ノードの正常な再起動を実行する前に、Pod アンチアフィニティーを使用して、ノード上のワークロードを他のノードに分散させることができます。
Pod のアンチアフィニティーは、ノードのアンチアフィニティーとは若干異なります。ノードのアンチアフィニティーの場合、Pod のデプロイ先となる適切な場所が他にない場合には違反が生じる可能性があります。Pod のアンチアフィニティーの場合は required (必須) または preferred (優先) のいずれかに設定できます。
これが有効になっていると、2 つのインフラストラクチャーノードのみが利用可能で、1 つのノードが再起動される場合に、コンテナーイメージレジストリー Pod は他のノードで実行できなくなります。oc get pods は、適切なノードが利用可能になるまで Pod を Unready (準備が未完了) として報告します。ノードが利用可能になり、すべての Pod が Ready (準備ができている) 状態に戻ると、次のノードを再起動することができます。
以下の手順では、Pod アンチアフィニティーを使用してノードを再起動する方法を示します。
手順
ノードの仕様を編集して Pod のアンチアフィニティーを設定します。
apiVersion: v1 kind: Pod metadata: name: with-pod-antiaffinity spec: affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchExpressions: - key: registry operator: In values: - default topologyKey: kubernetes.io/hostname #...各項目の説明:
spec.affinity.podAntiAffinity- Pod のアンチアフィニティーを設定するスタンザを指定します。
spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution- 優先ルールを指定します。
spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.weight- preferred (優先) ルールの重みを指定します。最も高い重みを持つノードが優先されます。
spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.podAffinityTerm.labelSelector.matchExpressions.key- アンチアフィニティールールが適用されるタイミングを決定する Pod ラベルを指定します。ラベルのキーと値を定義します。
spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.podAffinityTerm.labelSelector.matchExpressions.operator既存の Pod のラベルと、新しい Pod の仕様における
matchExpressionパラメーターの値のセットとの間の関係を指定します。これにはIn、NotIn、Exists、またはDoesNotExistのいずれかを使用できます。この例では、コンテナーイメージレジストリー Pod に
registry=defaultのラベルがあることを想定しています。Pod のアンチアフィニティーでは任意の Kubernetes の一致式を使用できます。
-
スケジューリングポリシーファイルで、
MatchInterPodAffinityスケジューラー述語を有効にします。 - ノードのグレースフルな再起動を実行します。