Closed2

Kubernetes: Node DiskPressure Condition でどの Pods が evict されるのか

Kazuki Suda (@superbrothers)Kazuki Suda (@superbrothers)

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)
	}
}

https://github.com/kubernetes/kubernetes/blob/v1.21.4/pkg/kubelet/eviction/helpers.go#L639-L644

そのため、ephemeral-storage が要求されていれば(デフォルトは 0) Evict されにくいといえる。ただし、全く別の要因でローカルディスクが圧迫されている場合は、Pods をいくら evict しても状態が解消されない自体というのも考えられるので、あくまでされにくいと理解する必要がある。

Kubernetes ドキュメントとしては次の部分が詳しい。

Kazuki Suda (@superbrothers)Kazuki Suda (@superbrothers)

ノードのメモリ使用量がしきい値を超えると kubelet が Pods を evict するが、そのランク決めがノードのローカルディスク(Ephemeral storage)の場合でも同様かどうかを確認するために調べた。結論としては同じ。

このスクラップは2022/03/23にクローズされました