この記事は、オールアバウト 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/