Posted at

KubernetesのEviction Manager

More than 1 year has passed since last update.

この記事は、オールアバウト Advent Calendar 2016の22日目の記事です。

風邪をひいてしまい、ここ1週間くらい体調が優れません。

この前業務中に知ったKubernetesのEviction Managerについて書きます。

特に大きな負荷をかけていないのに、Kubernetesのノードの負荷が急に上がったので何かと思って調べてみたらEviction Managerでした。


Eviction Managerとは

ノードのリソース使用状況を監視して、ノードをいい感じに安定して稼働させてくれるもの。

例えば、ノードのディスクがいっぱいになると使っていないコンテナやイメージを自動でクリーンアップしてくれる。クリーンアップ時はそれなりにCPUとディスクの負荷が上昇する。

元々はkubelet Garbage Collectionだったが、こちらは廃止されるらしい。


発動条件

Eviction Managerが発動する条件はkubeletのオプションで指定する。現状、条件を変更するには各ノードにログインして/etc/default/kubeletを変更する必要がある。

デフォルトでは以下に設定されている。つまり、空きメモリが100M未満かノードの空き容量が10%未満か空きinodeが5%未満のときに発動する。

--eviction-hard=memory.available<100Mi,nodefs.available<10%,nodefs.inodesFree<5%

実際にノードにファイルを大量に書き込みしてinode使用率を96%にしてみたところ、使っていないコンテナとイメージが削除され、inode使用率が減少した。

eviction-minimum-reclaimオプションを設定するとEviction時にどれだけリソースを確保するか設定できるので、Evictionの負荷を多少を軽減させられるかもしれない。

その他にも、ポッドのEvictionやOOMもあるらしいが詳しい挙動は把握できていない。詳しくは、公式ドキュメント参照ください。

http://kubernetes.io/docs/admin/out-of-resource/