Closed2
Kubernetes: Node DiskPressure Condition でどの Pods が evict されるのか
Kubernetes v1.21 時点での情報。
ノードのローカルディスクが圧迫されるとノードは DiskPressure
という状態になり、スペースを確保しようとする。即座に Pods を evict するのではなく、kubelet が終了済みの Pods やコンテナを GC したり、使われてないコンテナイメージを削除する。
それでも状態が改善されない場合は、Pods が Evict される。ランク決めには次の関数が使用されており、「Usage が Request を超えている、Pod Priority、Usage」でランクが高くなる(Evict されやすい)。
// rankDiskPressureFunc returns a rankFunc that measures the specified fs stats.
func rankDiskPressureFunc(fsStatsToMeasure []fsStatsType, diskResource v1.ResourceName) rankFunc {
return func(pods []*v1.Pod, stats statsFunc) {
orderedBy(exceedDiskRequests(stats, fsStatsToMeasure, diskResource), priority, disk(stats, fsStatsToMeasure, diskResource)).Sort(pods)
}
}
そのため、ephemeral-storage が要求されていれば(デフォルトは 0) Evict されにくいといえる。ただし、全く別の要因でローカルディスクが圧迫されている場合は、Pods をいくら evict しても状態が解消されない自体というのも考えられるので、あくまでされにくいと理解する必要がある。
Kubernetes ドキュメントとしては次の部分が詳しい。
ノードのメモリ使用量がしきい値を超えると kubelet が Pods を evict するが、そのランク決めがノードのローカルディスク(Ephemeral storage)の場合でも同様かどうかを確認するために調べた。結論としては同じ。
このスクラップは2022/03/23にクローズされました