軽量kubernetesクラスタの k3sはPC1台から小規模構成を手軽に構築できます。
Linuxにセットアップした場合の一般的なconfigパスは/etc/rancher/k3s/config.yaml
です。
最初はファイルが存在せず、カスタマイズの必要が発生した場合に作成します。
systemd環境では、systemctl restart k3s
により再起動し、configを反映できます。
kubeletのconfig
k3sのconfigには k3s serverの起動オプションなどを指定できます。
k3sはkubeletを内包しているため、kubernetes標準の起動オプションもconfig.yaml
に指定します。
kubelet-arg:
- "image-gc-high-threshold=99"
- "image-gc-low-threshold=98"
この例は、ガベージコレクションの挙動を指定するものです。
ガベージコレクションによる動作不良例
上の設定は、ディスク逼迫に伴うコンテナevictionに対処する例です。
これはk3sに限らず、kubernetesの一般的なセットアップで多く報告されているトラブルです。
kubeletのガベージコレクションは、ディスク空き容量が少なくなった際にも動作します。
デフォルトでは92%消費した際(image-gc-high-threshold)に80%まで空きを回復(image-gc-low-threshold)させる、といった意図の設定になっています。
ハードがk3s専用ではないケースでは、この既定値が適切に機能しないことがあります。 たとえば、1TBのパーティションにインストールした場合、残り80GBを切った際にガベージコレクションが動作し、12GBを解放しようとします。
しかし、ディスクが他の用途で埋まっている場合、不要なコンテナイメージキャッシュを削除しても12GBまで解放できません。
この場合、kubernetesはディスク利用をあきらめ、ノードがダウンします。
このエラーは、journalctl -e -u k3s
やkubectl describe nodes
のイベントログで確認できます。
クライアントPC上にクラスタをセットアップするようなケースでは、ディスク枯渇の主要因がkubernetesでないことは多いので、ハード構成の実態に合わせてgcの動作を抑制することが有効です。
Chuma Takahiro