Minikubeの話
仕事でMinikubeを使っている時の話。
ある時突然こんなメッセージが出てきました
$ kubectl log -f hogehoge-controller-xxx
failed to watch file "/var/log/pods/hogehoge/hogehoge-controller/1.log": no space left on device
状況としては複数のコンテナをいくつも立ち上げて、ログ祭りになってる様な環境でMinikubeなのでもちろんローカル環境
これを調べても英語しか出てこないので日本語でまとめておこうと思います。
Chk.1 本当にディスクの空き容量がない
調べませう
$ minikube ssh
からの
$ df
Filesystem 1K-blocks Used Available Use% Mounted on
tmpfs 6344536 464280 5880256 8% /
devtmpfs 3454136 0 3454136 0% /dev
tmpfs 3524740 0 3524740 0% /dev/shm
tmpfs 3524740 34288 3490452 1% /run
tmpfs 3524740 0 3524740 0% /sys/fs/cgroup
tmpfs 3524740 12 3524728 1% /tmp
/dev/sda1 17784772 12684384 4060148 76% /mnt/sda1 <=ここが大事
/Users 488245288 148308708 339936580 31% /Users
$
<=ここが大事
としている「/mnt/sda1」の空き容量がDockerエンジンが使用するスペースの模様。
この例では80%未満なので余裕があります。よって、ディスク容量には問題はなく他の問題の様です。
仮にここが100%とか95%とかだったら本当にディスク容量が足りないので 自己責任 において
$ minikube ssh
$ docker system prune -a
などとしてクリーンアップしてあげてください。ただし、上記はバルス同等の破壊的クリーンアップなので大事なDockerImageがある場合は適時変えてください。
Chk.2 ディスク容量は足りているのにエラーになる
これが本稿の本題。
stackoverflow的な海外サーバーで話題に上がっていました。
https://serverfault.com/questions/963529/minikube-k8s-kubectl-failed-to-watch-file-no-space-left-on-device
何を言っているかというとfs.inotify.max_user_watches
=ファイルシステム的にユーザが監視できるファイル数の上限
それがデフォルトで限りなく少なく設定されてるから問題が起きるんだよ! ということらしいです。
で、ここで回答されているのがどこまで正解なのかは不明なのですが、
成功するまで2倍づつ増やしながら試せ。 とのこと
本当かいな
fs.inotify.max_user_watchesを変更する
minikubeの中で操作します。
まず、今の設定を確認
$ minikube ssh
...中略...
$ sysctl fs.inotify.max_user_watches
fs.inotify.max_user_watches = 8192
8192。。。少ない。。。のかもしれない笑
アプリ単体ではなくOSとしての監視数なのでなんともいえないですがこれを2倍に設定します。
※ アバウトに2倍 しても大丈夫です!(理由は後述)
sudo sysctl fs.inotify.max_user_watches=16000
この状態で一回試して、変わらない様だったらさらに2倍に。。。と言った具合で増やしてみてください。
これでもダメならもっと他の原因だと思われますが、私は遭遇していません
後述:アバウトに2倍とは
なぜアバウトに2倍にしてもいいのか。
それは、これが揮発性の設定だからです。
minikube stopとかしてしまうとリセットされてしまいます。
なのでローカル環境なのも相待って、おかしくなっちゃったらリセットしてきちんと設定すればいいのです。
厳密には2の乗数で設定した方が良いのでしょうが、そこに労力をかける意味は特にないと思います
終わり
私は最近あるプロダクトの開発を通してKubernetesやIstio、Docker、YAML等々のホットトピックに触れる機会が多くなっています。難しい、でも奥深くて面白い世界をみれていると思います。
数多くのOSSに支えられた次世代のシステム開発をQiitaの様なメディアを通してボチボチ流布してきますので、ぜひフォローしてみてください!