Percona Operator for PostgreSQLを動かしてみる

はじめに

調査結果

環境

  • WSL2 Ubuntu 20.04 on Windows 11
  • KinD
    $ kind version
    kind v0.17.0 go1.19.2 linux/amd64
  • Helm
    $ helm version
    version.BuildInfo{Version:"v3.10.3", GitCommit:"835b7334cfe2e5e27870ab3ed4135f136eecc704", GitTreeState:"clean", GoVersion:"go1.18.9"}

手順

  1. (テスト用のKinD clusterを作成)
    $ kind create cluster --name percona
  2. namespaceを作成
    $ kubectl create namespace postgres-operator
  3. Helmチャートをリポジトリに登録
    $ helm repo add percona https://percona.github.io/percona-helm-charts/
    $ helm repo update
  4. Operatorを1.で作成したClusterにインストール
    $ helm install my-operator percona/pg-operator --version 1.3.0
    • my-operatorの部分はRelease名
  5. PostgreSQLを1.で作成したClusterにインストール
    $ helm install my-db percona/pg-db --version 1.3.0
    • my-dbの部分はRelease名
    • defalutのnamespaceにDBが作成される

(参考)v2.0.0のインストールについて

  • 下記2パターンで試したが、いずれも失敗した
    • v2.0の公式ドキュメント通りにhelmコマンドを実行したが、下記のエラーでインストールできなかった
      $ helm repo add percona https://percona.github.io/percona-helm-charts/
      $ helm repo update

      $ helm install my-db percona/pg-db --version 2.0.0 --namespace my-namespace
      Error: INSTALLATION FAILED: chart "pg-db" matching 2.0.0 not found in percona index. (try 'helm repo update'): no chart version found for pg-operator-2.0.0
      • Artifact Hubにはv1.3.0が最新っぽい記載があったので、まだv2.0.0には対応していない?

    • このページを参考に、Githubのソースからv2.0.0のインストールを試みたが、失敗した
      $ git clone -b v2.0.0 https://github.com/percona/percona-postgresql-operator
      $ cd percona-postgresql-operator
      `$ kubectl apply -f deploy/bundle.yaml
      customresourcedefinition.apiextensions.k8s.io/perconapgbackups.pg.percona.com created
      customresourcedefinition.apiextensions.k8s.io/perconapgrestores.pg.percona.com created
      serviceaccount/percona-postgresql-operator created
      role.rbac.authorization.k8s.io/percona-postgresql-operator created
      rolebinding.rbac.authorization.k8s.io/service-account-percona-postgresql-operator created
      deployment.apps/percona-postgresql-operator created
      Error from server (Invalid): error when creating “deploy/bundle.yaml": CustomResourceDefinition.apiextensions.k8s.io “perconapgclusters.pg.percona.com" is invalid: metadata.annotations: Too long: must have at most 262144 bytes
      Error from server (Invalid): error when creating “deploy/bundle.yaml": CustomResourceDefinition.apiextensions.k8s.io “postgresclusters.postgres-operator.crunchydata.com" is invalid: metadata.annotations: Too long: must have at most 262144 bytes

デプロイ結果

  • DBのRelease名の後に、-pg-db-pg-db-backrest-shared-repo-pg-db-pgbouncerというsuffixがついたServiceとが生成され
  • 前節の手順で生成されるServiceは下記の通り
    • $ kubectl get services --all-namespaces NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
      default kubernetes ClusterIP 10.96.0.1 443/TCP 29m
      default my-db-pg-db ClusterIP 10.96.242.93 2022/TCP,5432/TCP 23m
      default my-db-pg-db-backrest-shared-repo ClusterIP 10.96.104.52 2022/TCP 23m
      default my-db-pg-db-pgbouncer ClusterIP 10.96.79.86 5432/TCP 23m
      default postgres-operator ClusterIP 10.96.211.227 8443/TCP,4171/TCP,4150/TCP 26m
      kube-system kube-dns ClusterIP 10.96.0.10 53/UDP,53/TCP,9153/TCP 29m
      • 前節の手順4でpostgres-operatorが、手順5でmy-db-pg-dbmy-db-pg-db-backrest-shared-repomy-db-pg-db-pgbouncerが生成される
    • 他のPodからDBにアクセスするときに使うServiceは、my-db-pg-db-pgbouncerのポート5432
      Percona Operator for PostgreSQL Architecture
      https://docs.percona.com/percona-operator-for-postgresql/architecture.html
  • 前節の手順で生成されるPodは下記の通り
    • $ kubectl get pod
      NAME READY STATUS RESTARTS AGE
      backrest-backup-my-db-pg-db-b9mml 0/1 Completed 0 41m
      my-db-pg-db-8c9c8c8cb-gfjs8 1/1 Running 0 42m
      my-db-pg-db-backrest-shared-repo-98d576578-hkg7z 1/1 Running 0 43m
      my-db-pg-db-pgbouncer-779696fff7-49jlk 1/1 Running 0 41m
      my-db-pg-db-pgbouncer-779696fff7-clrg2 1/1 Running 0 41m
      my-db-pg-db-pgbouncer-779696fff7-srl9f 1/1 Running 0 41m
      postgres-operator-5b698c8555-6mhv4 4/4 Running 0 46m