私はk8sとminikubeにかなり慣れていないので、kubectl logs -f <POD NAME>
の実行時に頻繁に発生するが、どこにでもあるエラーを理解するのに役立ちます。
これは、自分の名前空間のポッドやkube-system
にあるとき、予期せずに発生します。入力コントローラログをテールしようとするとき。ポッド自体に明らかなエラーはなく、kubectl logs
コマンドの出力には、通常のログ行が含まれています。 failed to watch file "/var/log/pods/kube-system_nginx-ingress-controller-586cdc477c-95pgh_4b8310a4-5f9b-11e9-9666-0800270e7244/nginx-ingress-controller/1.log": no space left on device$
これの最終的な原因は何ですか?どのように解決しますか?
ノードがinotifyウォッチを使い果たしたようです。
各Kubernetes node でsysctl fs.inotify.max_user_watches
を使用して、使用可能な監視の数を確認または設定できます。
おそらく、それが途方もなく低い数に設定されていることに気付くでしょう。デフォルトでは、システムのメモリ量に基づいて自動調整されます。
[root@small ~]# sysctl fs.inotify.max_user_watches
fs.inotify.max_user_watches = 8192
[root@large ~]# sysctl fs.inotify.max_user_watches
fs.inotify.max_user_watches = 1048576
現在の量がいくらであっても、問題が発生しなくなるまで2倍にします。
(Minikubeノードにアクセスするには、minikube ssh
を使用します。)