本日、microk8s上で動かしているサービスにアクセスできないアラートが発生し、調査したのでメモ。
アクセス不可時、”kubectl get pod”コマンドで確認すると、すべてのポットが再起動していました。
次に、”/var/log/syslog”を見ると、以下のログが出力されていました。
Sep 26 16:32:09 dck01 systemd[1]: Started Run anacron jobs.
Sep 26 16:32:09 dck01 anacron[1635152]: Anacron 2.3 started on 2020-09-26
Sep 26 16:32:09 dck01 anacron[1635152]: Normal exit (0 jobs run)
Sep 26 16:32:09 dck01 systemd[1]: anacron.service: Succeeded.
Sep 26 16:32:09 dck01 systemd[1]: Mounting Mount unit for microk8s, revision 1702...
Sep 26 16:32:09 dck01 systemd[1]: Mounted Mount unit for microk8s, revision 1702.
Sep 26 16:32:09 dck01 systemd[1]: Stopping Service for snap application microk8s.daemon-apiserver-kicker...
Sep 26 16:32:09 dck01 systemd[1]: snap.microk8s.daemon-apiserver-kicker.service: Succeeded.
Sep 26 16:32:09 dck01 systemd[1]: Stopped Service for snap application microk8s.daemon-apiserver-kicker.
どうやら、cronスケジュール処理が走り、snapサービスごと停止しているではありませんか。
microk8sはsnapサービスを使ってインストールしているため、かなり怪しいです。snapサービスがアップデートするスケジュールを確認します。
user@dck01:~/splunk$ snap refresh --time
timer: 00:00~24:00/4
last: today at 16:31 JST
next: today at 18:41 JST
“last”の時刻が再起動した時間と合致しました。上記の設定では、00:00~24:00の間にランダムに4回、それぞれのsnapの自動バージョンアップを行います。この時、microk8sはすべて再起動してしまうことになります。
検討しましたが、セキュリティ上はアップデートした方が良いということ、クラスタ構成なら1台停止したところで影響はないということで今回はそのままにします。
もし、本番環境でクラスタ構成をとる場合、以下のように再起動する時間を指定して、絶対に同時にバージョンアップしないようにすると良いでしょう。
sudo snap set system refresh.timer=4:00-7:00
または、検証環境等で動作確認してからバージョンアップさせるんだ、という場合はsnapdを停止しましょう。
sudo systemctl start snapd
コメント