DigitalOceanのManaged k8s clusterにCrunchy PostgreSQL Operatorをインストールしてみる。
ちょっと古い記事だがこちらのサイトなどを参考。
Crunchy PostgreSQL Operatorのデプロイ
pgo-deploy Jobを使ってdeployする。
マニフェストを取得
curl -LO https://raw.githubusercontent.com/CrunchyData/postgres-operator/v4.7.4/installers/kubectl/postgres-operator.yml > pgo-4.7.4.yml
namespace:pgo を作成し、マニフェストを適用する
kubectl create namespace pgo
kubectl apply –f pgo-4.7.4.yml
PostgreSQL Operatorがインストールされていることを確認
kubectl get all -n pgo
NAME READY STATUS RESTARTS AGE
pod/pgo-deploy-48hrx 0/1 Completed 0 2m9s
pod/postgres-operator-d66b9bcdd-cm6vl 4/4 Running 1 65s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/postgres-operator ClusterIP 10.245.211.191 <none> 8443/TCP,4171/TCP,4150/TCP 68s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/postgres-operator 1/1 1 1 67s
NAME DESIRED CURRENT READY AGE
replicaset.apps/postgres-operator-d66b9bcdd 1 1 1 67s
NAME COMPLETIONS DURATION AGE
job.batch/pgo-deploy 1/1 2m7s 2m12s
pgo-deployジョブ削除
kubectl delete -f pgo-4.7.4.yml
pgo cliのインストール
client-setup.shスクリプトをダウンロード・実行
curl https://raw.githubusercontent.com/CrunchyData/postgres-operator/v4.7.4/installers/kubectl/client-setup.sh > client-setup.sh
chmod 755 client-setup.sh
./client-setup.sh
下記環境変数を設定
cat <<EOF >> ~/.zshenv
export PATH=/Users/takahken/.pgo/pgo:$PATH
export PGOUSER=/Users/takahken/.pgo/pgo/pgouser
export PGO_CA_CERT=/Users/takahken/.pgo/pgo/client.crt
export PGO_CLIENT_CERT=/Users/takahken/.pgo/pgo/client.crt
export PGO_CLIENT_KEY=/Users/takahken/.pgo/pgo/client.key
export PGO_APISERVER_URL='https://127.0.0.1:8443'
export PGO_NAMESPACE=pgo
EOF
source ~/.zshenv
pgoクライアント動作確認
kubectl -n pgo port-forward svc/postgres-operator 8443:8443
pgo version
client/APIサーバーのバージョンが表示されればOK
pgo client version 4.7.4
pgo-apiserver version 4.7.4
PostgreSQLクラスタの作成
pgoコマンドでクラスタ作成。
バックアップ先:DigitalOcean Spaces(s3互換)、オプションとして下記設定を指定する。
- –pgbackrest-s3-uri-style=“path”
- –pgbackrest-s3-verify-tls=“false”
pgo create cluster hippo1 --replica-count=1 --sync-replication \
--pgbackrest-storage-type="s3" \
--pgbackrest-s3-bucket="dok8s-bucket" \
--pgbackrest-s3-region="sgp1" \
--pgbackrest-s3-endpoint="sgp1.digitaloceanspaces.com" \
--pgbackrest-s3-key="XXXXX" --pgbackrest-s3-key-secret="XXXXXXXX" \
--pgbackrest-s3-uri-style="path" --pgbackrest-s3-verify-tls="false"
pgbouncerインストール
pgo create pgbouncer hippo1
クラスタ状態確認
pgo test hippo1
cluster : hippo1
Services
primary (10.245.54.229:5432): UP
pgbouncer (10.245.141.175:5432): UP
replica (10.245.117.213:5432): UP
Instances
primary (hippo1-577797b7db-hdxc7): UP
replica (hippo1-pzzv-78987747df-mrzdn): UP
psqlによる接続確認
postgresユーザーのパスワード取得
kubectl get secret -n pgo hippo1-postgres-secret -o 'jsonpath={.data.password}' | base64 -d
psqlで接続
kubectl -n pgo port-forward svc/hippo1 5432:5432
psql -h localhost -U postgres
Password for user postgres:
psql (14.1, server 13.5)
Type "help" for help.