【ポッドトポロジーぶんさん】

Podトポロジー分散 とは?

最終更新:
💡 新しい卵を置くカゴの偏りを抑えるルール

Podトポロジー分散は、Kubernetesで新しいPodをゾーンやノードへ偏りにくく配置する制約です。maxSkewの正しい範囲と、配置できない場合の動作を説明します。

📌 このページのポイント
Podを置くゾーンの偏りを抑える例:maxSkew = 1 / DoNotScheduleゾーン APodPodPod3個ゾーン BPodPodPodPod4個ゾーン CPodPodPod3個同じラベルの対象Podを数えるAへ1個追加4 − 最少3 = 1この制約は満たすBへ1個追加5 − 最少3 = 2この制約を満たさない
3ゾーンが対象・配置可能な例です。ラベル、minDomains、ほかの配置条件も判断に影響し、既存Podの常時再配置はしません。
ひよこ ひよこ
Podを同じゾーンに固めたくないときは?
ペンギン先生 ペンギン先生
topologySpreadConstraintsで、新しいPodをゾーンやノードに分散させるルールを指定できるよ。スケジューラには既定の分散の優先設定もあるけれど、配置先は空き容量やほかの条件にも影響される。必要な分散の条件は明示して考えよう。
ひよこ ひよこ
どのゾーンの、どのPodを数えるの?
ペンギン先生 ペンギン先生
topologyKeyでノードのラベルを指定するよ。topology.kubernetes.io/zoneならゾーン、kubernetes.io/hostnameならノードを基準にする。labelSelectorで数えるPodを指定し、同じ名前空間の対象を数えるんだ。配置するPod自身もセレクターに合うラベルを付けよう。
ひよこ ひよこ
maxSkew=0なら完全に同じ数になる?
ペンギン先生 ペンギン先生
0は設定できず、1以上の整数が必要だよ。DoNotScheduleの場合は、配置先の対象Pod数と、配置可能な範囲での最少数(global minimum)との差を制限する。図は3ゾーンに3・4・3個の例で、maxSkew=1ならAへ1個追加する候補は差1、Bへ追加する候補は差2になるんだ。
ひよこ ひよこ
ルールに収まらないとどうなる?
ペンギン先生 ペンギン先生
DoNotScheduleなら、その制約を満たさない候補には置かない。ほかにも置ける場所がなければPodはPendingになり得るよ。ScheduleAnywayは偏りを小さくする配置を優先する設定で、maxSkew以内を必ず守るという意味ではないんだ。
ひよこ ひよこ
ゾーンとノード両方を分散できる?
ペンギン先生 ペンギン先生
複数の制約を書けるよ。DoNotScheduleの条件はすべて満たす必要があり、ScheduleAnywayの条件は偏りを減らす優先度の評価に使う。ノードのラベル不足にも注意しよう。さらに、minDomainsで必要な範囲数を指定した場合、利用できる範囲が足りないとglobal minimumを0として扱うので、単なるゾーン間の最大差だけで判断できないんだ。
ひよこ ひよこ
動いているPodも自動で並べ直す?
ペンギン先生 ペンギン先生
この機能は新しくスケジュールするPodの配置を判断するものだよ。Podが減ったあとまで均等な配置が保たれる保証はない。実際の可用性には、複製数、ゾーンの容量、ほかの配置条件、障害後に起動できる余裕も必要なんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Podトポロジー分散」って出てきたら「新しい卵を置くカゴの偏りを抑えるルール」と思えばだいたいOK!
📖 おまけ:英語の意味
「Pod Topology Spread Constraints」 = Podトポロジー分散制約
💬 Topologyはゾーンやノードなどの配置構造、Spreadは分散、Constraintsは制約という意味だよ。新しいPodをどこへ置くか、既存の対象Podの偏りも見て判断するんだ。

参考資料

← 用語集にもどる