category

k8s上のPostgreSQLバージョンアップ

kubernetes上でデータベースを運用するケースでは、バージョンアップの際に新しいpod(コンテナ)を1系統追加して新旧コンテナを並走させることで、ダウンタイムを減らし、トラブル時の切り戻しを手軽に実行できます。

移行プロセスの大まかな流れは下図のとおりです。

トラフィック切り替えの方法

podのポートには名前をつけられる(spec.template.spec.ports.name)ため、新バージョンのコンテナに現行バージョンと異なる名前をつけます。

一方、アプリケーションはサービスを介してDB接続しているため、サービスの転送先の名前を切り替えることで(spec.selector.name)、トラフィックを新バージョンのDBコンテナに向けることが可能です。

移行プロセスが完了するまで旧バージョンのコンテナを起動しておけば、万一トラブルに遭遇した際にもサービスの転送先名称を元に戻すことで切り戻せます。

注意:動作確認の際に再起動テストも実施すべき

コンテナならではの注意点として、コンテナは揮発性で再起動時にデータが消える点があります。

DBのデータ格納には永続ディスクを利用する必要がありますが、永続ディスクの設定に不備があると再起動時にデータ消失します。
バージョンアップの際には、データの配置レイアウトが変わることもあり、すべてのデータを保持していることは確認すべき重要ポイントです。

稼働後の再起動でデータ消失すると致命的な事態になるため、移行時の動作確認の際にコンテナ再起動を実施しておくべきでしょう。