Minikube 1.16.0 (Kubernetes 1.20.0) にアップグレードしたらReadinessProbeがfailした

背景と問題

  • Minikube 1.12.3をデフォルト設定 (Kubernetes v1.18.3)で利用していた
  • Readiness Probeとしてexecフィールドに内製スクリプトを指定していた(スクリプトの実行にかかる時間は約2秒)
  • 先日、Minikube 1.16.0にアップグレードした途端にReadiness Probeが失敗しだした

原因

kubernetes.io

学び

(dockershimのとき) timeoutSeconds フィールドが無視されていた

https://github.com/kubernetes/kubernetes/pull/94115 このPRによって timeoutSeconds が有効化されたのだけど、それと同時にexec型のreadiness/liveness probeにデフォルトで1秒タイムアウトが生まれた

readiness probe および liveness probeのログは journalctl -u kubelet 経由でアクセス可能

readiness/liveness probeのログは kubectl describe pod {YOUR_POD} の最下部にeventとして入ってくるが、情報量が少なくエラー追跡しづらい。せいぜいprobeの成功・失敗程度の情報しか得られず調査が進められなかった。

途中でprobeがkubeletによって実行される(ヘルスチェック対象のpodが実行する訳ではない)ことを思い出し、journalctlで見てみたところ DeadlineExceeded の文字列を発見。その後、https://kubernetes.io/blog/2020/12/08/kubernetes-1-20-release-announcement/#exec-probe-timeout-handling に行き当たり解決することができた。

xxx@xxxxx:~$ sudo journalctl -u kubelet -f
-- Logs begin at Thu 2020-11-05 03:45:00 UTC. --
Jan 12 06:11:47 rams kubelet[2763501]: E0112 06:11:47.967431 2763501 remote_runtime.go:392] ExecSync bc2ef37c1e3bcea3afe12a27c9b52340bb427e111b2e7d6245b12b0b22bb17a5 'yarn mqtt-healthchecker' from runtime service failed: rpc error: code = DeadlineExceeded desc = context deadline exceeded
Jan 12 06:12:02 rams kubelet[2763501]: E0112 06:12:02.972673 2763501 remote_runtime.go:392] ExecSync bc2ef37c1e3bcea3afe12a27c9b52340bb427e111b2e7d6245b12b0b22bb17a5 'yarn mqtt-healthchecker' from runtime service failed: rpc error: code = DeadlineExceeded desc = context deadline exceeded
Jan 12 06:12:17 rams kubelet[2763501]: E0112 06:12:17.967784 2763501 remote_runtime.go:392] ExecSync bc2ef37c1e3bcea3afe12a27c9b52340bb427e111b2e7d6245b12b0b22bb17a5 'yarn mqtt-healthchecker' from runtime service failed: rpc error: code = DeadlineExceeded desc = context deadline exceeded
Jan 12 06:12:32 rams kubelet[2763501]: E0112 06:12:32.966427 2763501 remote_runtime.go:392] ExecSync bc2ef37c1e3bcea3afe12a27c9b52340bb427e111b2e7d6245b12b0b22bb17a5 'yarn mqtt-healthchecker' from runtime service failed: rpc error: code = DeadlineExceeded desc = context deadline exceeded
Jan 12 06:12:47 rams kubelet[2763501]: E0112 06:12:47.966576 2763501 remote_runtime.go:392] ExecSync bc2ef37c1e3bcea3afe12a27c9b52340bb427e111b2e7d6245b12b0b22bb17a5 'yarn mqtt-healthchecker' from runtime service failed: rpc error: code = DeadlineExceeded desc = context deadline exceeded
Jan 12 06:13:02 rams kubelet[2763501]: E0112 06:13:02.968304 2763501 remote_runtime.go:392] ExecSync bc2ef37c1e3bcea3afe12a27c9b52340bb427e111b2e7d6245b12b0b22bb17a5 'yarn mqtt-healthchecker' from runtime service failed: rpc error: code = DeadlineExceeded desc = context deadline exceeded
Jan 12 06:13:17 rams kubelet[2763501]: E0112 06:13:17.965255 2763501 remote_runtime.go:392] ExecSync bc2ef37c1e3bcea3afe12a27c9b52340bb427e111b2e7d6245b12b0b22bb17a5 'yarn mqtt-healthchecker' from runtime service failed: rpc error: code = DeadlineExceeded desc = context deadline exceeded
Jan 12 06:13:32 rams kubelet[2763501]: E0112 06:13:32.967139 2763501 remote_runtime.go:392] ExecSync bc2ef37c1e3bcea3afe12a27c9b52340bb427e111b2e7d6245b12b0b22bb17a5 'yarn mqtt-healthchecker' from runtime service failed: rpc error: code = DeadlineExceeded desc = context deadline exceeded
Jan 12 06:13:47 rams kubelet[2763501]: E0112 06:13:47.964895 2763501 remote_runtime.go:392] ExecSync bc2ef37c1e3bcea3afe12a27c9b52340bb427e111b2e7d6245b12b0b22bb17a5 'yarn mqtt-healthchecker' from runtime service failed: rpc error: code = DeadlineExceeded desc = context deadline exceeded
Jan 12 06:14:02 rams kubelet[2763501]: E0112 06:14:02.969880 2763501 remote_runtime.go:392] ExecSync bc2ef37c1e3bcea3afe12a27c9b52340bb427e111b2e7d6245b12b0b22bb17a5 'yarn mqtt-healthchecker' from runtime service failed: rpc error: code = DeadlineExceeded desc = context deadline exceeded

具体的には以下のいずれかで解決可能

蛇足

readiness probeのexecコマンドで使っていたのは拙作npmモジュール www.npmjs.com