LoginSignup
0
0

More than 5 years have passed since last update.

kubernetesのpodがRunning状態のままReadyがFalseになって、一切の新規外部接続を受け付けなくなった

Posted at

現象

Ruby on RailsとpostgresそれぞれをDockerコンテナ上で動かしているシステムについて、それまで問題なかったのに、ある日突然リモートからpostgresにSSH接続できなくなった。
それどころか、アプリを動かしているコンテナからの接続も

psql: server closed the connection unexpectedly 
This probably means the server terminated abnormally
before or while processing the request.

このありさま。
ただ、アプリは生きていて、postgresのローカルホストからは特に問題が見受けられない。

さらに
・postgresの接続情報は適切か?
・ファイアウォールルールは適切か?
これらは問題ないことを確認した。

現象は、どうも新規の接続を受けなくなっている状態らしい。
しかもpostgresよりももっと低レイヤの部分で。
つまり、OS(GCPのDebian7.0系)より低レイヤな部分に問題があるようだ。

ここで、正常に動作しているステージング環境とのpodの状態比較を行ってみることにした。

ステージング環境
$ kubectl describe pod "ステージング環境"
Name:       ステージング環境のpostgresのpod
~中略~
Status:     Running
~中略~
Conditions:
  Type      Status
  Ready     True 
問題環境
$ kubectl describe pod "問題環境"
Name:       問題環境のpostgresのpod
~中略~
Status:     Running
~中略~
Conditions:
  Type      Status
  Ready     False 

StatusはRunning(正常に起動している状態)で、ConditionsがFalseになっている問題環境。
とりあえず、何が原因かは不明だが(本当はクライアントログとサーバーログ辿るべきなんだけど)、緊急なのでこの壊れているpodを物理環境のバックアップから復旧することにした。

やったこと

物理環境自体は何の問題もないので、この状態でスナップショットを取得して、そこから再度ディスクを作成して、rcを作り直した。
元通り正常動作するようになった。

まとめ

kubernetesでDBのpodがRunning状態のままReadyがFalseになった。
するとDBへの新規リモート接続はできなくなったのに、アプリはDB接続できて正常動作したままという状態に陥った。
気持ち悪いのでその状態の物理環境だけバックアップとって復旧したら元通りに戻った。

復旧は大した手間じゃないけど、ずっとまともに動いていたものがある日突然自分の管理下にない環境(IaaS)下で壊れるのって気持ち悪い。
この問題の原因知ってる人いたら教えて頂けると嬉しいです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0