はじめに
説明
Cloud Native PostgreSQLとはEDB社の提供しているPostgreSQLのKubernates Operatorになります。
Kubernates Operatorを初耳の方も多いと思いますが、一言で申しますとクラスタ管理・構築ツールになります。
今回は設定について解説してきます。また、スーパーユーザの接続は前回の記事に変更しております。
構築所要時間
15分程度を想定しております。
詳細情報の確認
PostgreSQLの構築情報は下記コマンドで確認できます。
- データベース(設定ファイル)の格納場所
- パスワードの格納場所
- 初期DB
- 初期ユーザ
$ kubectl describe pods cluster-example-1 Name: cluster-example-1 Namespace: default Priority: 0 Node: minikube/192.168.64.6 Start Time: Fri, 28 May 2021 13:34:31 +0900 Labels: postgresql=cluster-example role=primary Annotations: k8s.enterprisedb.io/nodeSerial: 1 k8s.enterprisedb.io/operatorVersion: 1.4.0 Status: Running IP: 172.17.0.7 IPs: IP: 172.17.0.7 Controlled By: Cluster/cluster-example Init Containers: bootstrap-controller: Container ID: docker://322ed7252fb091a9d56cd48f163a7ce10d8ca587f58953954c749852f59b6cd5 Image: quay.io/enterprisedb/cloud-native-postgresql:1.4.0 Image ID: docker-pullable://quay.io/enterprisedb/cloud-native-postgresql@sha256:5ca024b334f8a63f5a1e97503764681f158378d4b1cf338747c3bd8ed45274cb Port: <none> Host Port: <none> Command: /manager bootstrap /controller/manager State: Terminated Reason: Completed Exit Code: 0 Started: Sun, 30 May 2021 14:26:44 +0900 Finished: Sun, 30 May 2021 14:26:46 +0900 Ready: True Restart Count: 1 Environment: <none> Mounts: /controller from scratch-data (rw) /etc/app-secret from app-secret (rw) /etc/superuser-secret from superuser-secret (rw) /run from scratch-data (rw) /var/lib/postgresql/data from pgdata (rw) /var/run/secrets/kubernetes.io/serviceaccount from cluster-example-token-4rpd7 (ro) Containers: postgres: Container ID: docker://a4389055ac9115b13c3fe4bbd40edae5e46a6b1e5d836e0918d33e5b74b0029d Image: quay.io/enterprisedb/postgresql:13.2 Image ID: docker-pullable://quay.io/enterprisedb/postgresql@sha256:5aa9a5dd0a69f9511963ed4985e1a54db16192d8061fcf713ec10b440b2d73c5 Ports: 5432/TCP, 9187/TCP Host Ports: 0/TCP, 0/TCP Command: /controller/manager instance run --pw-file /etc/superuser-secret/password State: Running Started: Sun, 30 May 2021 14:26:48 +0900 Last State: Terminated Reason: Error Exit Code: 255 Started: Fri, 28 May 2021 13:34:33 +0900 Finished: Sun, 30 May 2021 14:26:18 +0900 Ready: True Restart Count: 1 Liveness: http-get http://:8000/healthz delay=30s timeout=5s period=10s #success=1 #failure=3 Readiness: http-get http://:8000/readyz delay=0s timeout=5s period=10s #success=1 #failure=3 Environment: PGDATA: /var/lib/postgresql/data/pgdata POD_NAME: cluster-example-1 NAMESPACE: default CLUSTER_NAME: cluster-example PGPORT: 5432 PGHOST: /controller/run Mounts: /controller from scratch-data (rw) /etc/app-secret from app-secret (rw) /etc/superuser-secret from superuser-secret (rw) /run from scratch-data (rw) /var/lib/postgresql/data from pgdata (rw) /var/run/secrets/kubernetes.io/serviceaccount from cluster-example-token-4rpd7 (ro) Conditions: Type Status Initialized True Ready True ContainersReady True PodScheduled True Volumes: pgdata: Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace) ClaimName: cluster-example-1 ReadOnly: false superuser-secret: Type: Secret (a volume populated by a Secret) SecretName: cluster-example-superuser Optional: false scratch-data: Type: EmptyDir (a temporary directory that shares a pod's lifetime) Medium: SizeLimit: <unset> app-secret: Type: Secret (a volume populated by a Secret) SecretName: cluster-example-app Optional: false cluster-example-token-4rpd7: Type: Secret (a volume populated by a Secret) SecretName: cluster-example-token-4rpd7 Optional: false QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal SandboxChanged 25m kubelet Pod sandbox changed, it will be killed and re-created. Normal Pulled 25m kubelet Container image "quay.io/enterprisedb/cloud-native-postgresql:1.4.0" already present on machine Normal Created 25m kubelet Created container bootstrap-controller Normal Started 25m kubelet Started container bootstrap-controller Normal Pulled 25m kubelet Container image "quay.io/enterprisedb/postgresql:13.2" already present on machine Normal Created 25m kubelet Created container postgres Normal Started 25m kubelet Started container postgres
ドキュメントでは記載箇所がわかりにくいですがsecretの設定は下記ルールがございます。
- [cluster name]-superuser
- [cluster name]-app
詳細設定の確認
デフォルトの設定ファイルがどうなっているかは下記サイトに記載がございます。
postgresql.confやhba.confの編集は下記を参考に設定下さい。
設定反映は前回の続きであれば下記コマンドで行います。コンテナやDBの変更の場合、先に`minikube delete pod cluster`が必要になるでしょう。
$ kubectl apply -f cluster-example.yaml
実際にPodにログインして確認してみましょう。
$ kubectl exec -it cluster-example-1 -- /bin/bash
postgresql.confは下記で確認できます。また、custom.confという追加設定が格納されているファイルがあります。さらに、postgresq.auto.confというOperatorが管理するファイルも別途存在します。
$ grep -v -e '^\s*#' -e '^\s*$' /var/lib/postgresql/data/pgdata/postgresql.conf $ grep -v -e '^\s*#' -e '^\s*$' /var/lib/postgresql/data/pgdata/custom.conf $ grep -v -e '^\s*#' -e '^\s*$' /var/lib/postgresql/data/pgdata/postgresql.auto.conf
pg_hba.confは下記となっております。
$ grep -v -e '^\s*#' -e '^\s*$' /var/lib/postgresql/data/pgdata/pg_hba.conf
あとがき
今回は接続に知りたい情報を中心に記載致しました。次回の内容はライセンス認証を予定してます。
ここまでお読みいただき、ありがとうございました!