Edited at

GKE 上の PostgreSQL のデータの backup と restore

PostgreSQL の公式イメージを使って GKE 上に立てた DB のデータバックアップとリストアの tips


Backup

$ kubectl run pod-for-backup -it --rm --image=google/cloud-sdk:latest -n ${NAMESPACE} --restart=Never -- bash

% # バックアップのファイル名
% backup_yyyymmddhh=$(date -d '9 hours' +'%Y%m%d%H')

% # pg_dump を使いたいのでインストール
% apt-get install -y postgresql-client

% # Google Cloud Storage にバックアップするのでユーザーの認証
% gcloud auth login

% # バックアップ (custom フォーマットはデフォルトで圧縮してるらしいので、それに加えて gzip で圧縮して、さらに小さくしてアップロード)
% pg_dump -h postgres -d postgres -U postgres --format=custom --no-acl --no-owner | gzip > ${backup_yyyymmddhh}.dump.gz
% gsutil cp ${backup_yyyymmddhh}.dump.gz gs://${BACKET}/backup/


Restore

$ kubectl run pod-for-restore -it --rm --image=google/cloud-sdk:latest -n ${NAMESPACE} --restart=Never -- bash

% # バックアップした対象ファイル名
% backup_yyyymmddhh="yyyymmddhh"

% # pg_restore を使いたいのでインストール
% apt-get install -y postgresql-client

% # Google Cloud Storage のデータを取得するのでユーザーの認証
% gcloud auth login

% # ダウンロードして展開してリストア
% gsutil cp gs://${BACKET}/backup/${backup_yyyymmddhh}.dump.gz ${backup_yyyymmddhh}.dump.gz
% gzip -d ${backup_yyyymmddhh}.dump.gz
% pg_restore -h postgres -d postgres -U postgres --format=custom --clean ${backup_yyyymmddhh}.dump