K3sのconfig

軽量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 k3skubectl describe nodesのイベントログで確認できます。

クライアントPC上にクラスタをセットアップするようなケースでは、ディスク枯渇の主要因がkubernetesでないことは多いので、ハード構成の実態に合わせてgcの動作を抑制することが有効です。

中馬崇尋
Chuma Takahiro