Examples
========

例は、PostgreSQLクラスターをセットアップするための構成ファイルを示しています。

..  Important::
   これらの例は、デモンストレーションと実験を目的としています。 :ref:`クイックスタート <クイックスタート>` で説明しているように、MinikubeまたはKindを使用して個人のKubernetesクラスターで実行できます。

..  Seealso::
   使用可能なオプションのリストについては、 :ref:`API Reference - v1.25.1 <API Reference - v1.25.1>` を参照してください。

基本
----

**基本的なクラスター**

::

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Cluster
   metadata:
     name: cluster-example
   spec:
     instances: 3

     storage:
       size: 1Gi

クラスターの基本的な例。

**EDB Postgres Advanced Serverクラスター**

::

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Cluster
   metadata:
     name: postgresql-advanced-cluster
   spec:
     instances: 3
     imageName: docker.enterprisedb.com/k8s_enterprise/edb-postgres-advanced:16

     storage:
       size: 1Gi

EPASクラスターの基本的な例。

**EDB Postgres ExtendedPGEクラスター**

::

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Cluster
   metadata:
     name: postgresql-extended-cluster
   spec:
     instances: 3
     imageName: docker.enterprisedb.com/k8s_enterprise/edb-postgres-extended:16

     storage:
       size: 1Gi

PGEクラスターの基本的な例。

**カスタムクラスター**

::

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Cluster
   metadata:
     name: cluster-example-custom
   spec:
     instances: 3

     # Parameters and pg_hba configuration will be append
     # to the default ones to make the cluster work
     postgresql:
       parameters:
         max_worker_processes: "60"
       pg_hba:
         # To access through TCP/IP you will need to get username
         # and password from the secret cluster-example-custom-app
         - host all all all md5

     # Example of rolling update strategy:
     # - unsupervised: automated update of the primary once all
     #                 replicas have been upgraded (default)
     # - supervised: requires manual supervision to perform
     #               the switchover of the primary
     primaryUpdateStrategy: unsupervised

     # Require 1Gi of space per instance using default storage class
     storage:
       size: 1Gi

デフォルトのストレージクラスとカスタムパラメーターを使用する基本的なクラスター
``postgresql.conf`` および\ ``pg_hba.conf`` ファイル。

**カスタマイズされたストレージクラスを使用したクラスター**

::

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Cluster
   metadata:
     name: postgresql-storage-class
   spec:
     instances: 3

     # Example of rolling update strategy:
     # - unsupervised: automated update of the primary once all
     #                 replicas have been upgraded (default)
     # - supervised: requires manual supervision to perform
     #               the switchover of the primary
     primaryUpdateStrategy: unsupervised

     # Persistent storage configuration
     storage:
       storageClass: standard
       size: 1Gi

``standard`` の指定されたストレージクラスを使用する基本クラスター。

**永続的なボリューム要求PVCテンプレートが構成されたクラスター**

::

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Cluster
   metadata:
     name: postgresql-pvc-template
   spec:
     instances: 3

     # Example of rolling update strategy:
     # - unsupervised: automated update of the primary once all
     #                 replicas have been upgraded (default)
     # - supervised: requires manual supervision to perform
     #               the switchover of the primary
     primaryUpdateStrategy: unsupervised

     # Persistent storage configuration
     storage:
       size: 1Gi
       pvcTemplate:
         accessModes:
           - ReadWriteOnce
         resources:
           requests:
             storage: 1Gi
         storageClassName: standard
         volumeMode: Filesystem

明示的な永続ボリューム要求テンプレートを使用した基本クラスター。

**拡張構成例**

::

      # Example of definition of a test cluster using all the elements available
      # in the CRD. Please change values appropriately for your environment.
      # Remember that you can take advantage of convention over configuration
      # and normally you dont need to use all these definitions.

   apiVersion: v1
   data:
     password: VHhWZVE0bk44MlNTaVlIb3N3cU9VUlp2UURhTDRLcE5FbHNDRUVlOWJ3RHhNZDczS2NrSWVYelM1Y1U2TGlDMg==
     username: YXBw
   kind: Secret
   metadata:
     name: cluster-example-app-user
   type: kubernetes.io/basic-auth
   - --
   apiVersion: v1
   data:
     password: dU4zaTFIaDBiWWJDYzRUeVZBYWNCaG1TemdxdHpxeG1PVmpBbjBRSUNoc0pyU211OVBZMmZ3MnE4RUtLTHBaOQ==
     username: cG9zdGdyZXM=
   kind: Secret
   metadata:
     name: cluster-example-superuser
   type: kubernetes.io/basic-auth
   - --
   apiVersion: v1
   kind: Secret
   metadata:
     name: backup-creds
   data:
     ACCESS_KEY_ID: a2V5X2lk
     ACCESS_SECRET_KEY: c2VjcmV0X2tleQ==
   - --
   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Cluster
   metadata:
     name: cluster-example-full
   spec:
     description: "Example of cluster"
     imageName: quay.io/enterprisedb/postgresql:17.4
     # imagePullSecret is only required if the images are located in a private registry
     # imagePullSecrets:
     #   - name: private_registry_access
     instances: 3
     startDelay: 300
     stopDelay: 300
     primaryUpdateStrategy: unsupervised

     postgresql:
       parameters:
         shared_buffers: 256MB
         pg_stat_statements.max: 10000
         pg_stat_statements.track: all
         auto_explain.log_min_duration: 10s
       pg_hba:
         - host all all 10.244.0.0/16 md5

     bootstrap:
       initdb:
         database: app
         owner: app
         secret:
           name: cluster-example-app-user
       # Alternative bootstrap method: start from a backup
       #recovery:
       #  backup:
       #    name: backup-example

     enableSuperuserAccess: true
     superuserSecret:
       name: cluster-example-superuser

     storage:
       storageClass: standard
       size: 1Gi

     backup:
       barmanObjectStore:
         destinationPath: s3://cluster-example-full-backup/
         endpointURL: http://custom-endpoint:1234
         s3Credentials:
           accessKeyId:
             name: backup-creds
             key: ACCESS_KEY_ID
           secretAccessKey:
             name: backup-creds
             key: ACCESS_SECRET_KEY
         wal:
           compression: gzip
           encryption: AES256
         data:
           compression: gzip
           encryption: AES256
           immediateCheckpoint: false
           jobs: 2
       retentionPolicy: "30d"

     resources:
       requests:
         memory: "512Mi"
         cpu: "1"
       limits:
         memory: "1Gi"
         cpu: "2"

     affinity:
       enablePodAntiAffinity: true
       topologyKey: failure-domain.beta.kubernetes.io/zone

     nodeMaintenanceWindow:
       inProgress: false
       reusePVC: false

使用可能なオプションのほとんどを設定するクラスター。

**SQLファイルを使用したブートストラップクラスター**

::

   apiVersion: v1
   kind: ConfigMap
   metadata:
     name: post-init-sql-configmap
   data:
     configmap.sql: |
       create table configmaps (i integer);
       insert into configmaps (select generate_series(1,10000));
   - --
   apiVersion: v1
   kind: Secret
   metadata:
     name: post-init-sql-secret
   stringData:
     secret.sql: |
       create table secrets (i integer);
       insert into secrets (select generate_series(1,10000));
   - --
   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Cluster
   metadata:
     name: cluster-example-initdb
   spec:
     instances: 3

     bootstrap:
       initdb:
         database: appdb
         owner: appuser
         postInitSQL:
           - create table numbers (i integer)
           - insert into numbers (select generate_series(1,10000))
         postInitTemplateSQL:
           - create extension intarray
         postInitApplicationSQL:
           - create table application_numbers (i integer)
           - insert into application_numbers (select generate_series(1,10000))
         postInitApplicationSQLRefs:
           configMapRefs:
           - name: post-init-sql-configmap
             key: configmap.sql
           secretRefs:
           - name: post-init-sql-secret
             key: secret.sql

     storage:
       size: 1Gi

データベースが作成された直後に、シークレットと\ ``ConfigMap``
で定義されたクエリセットを実行するクラスターの例。

**カスタマイズされた\ ``pg_hba`` 構成を使用したサンプルクラスター**

::

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Cluster
   metadata:
     name: cluster-example
   spec:
     instances: 3
     postgresql:
       pg_hba:
         - hostssl app all all cert

     storage:
       size: 1Gi

ユーザアプリが証明書を使用して認証できるようにする基本的なクラスター。

**投影されたボリュームテンプレートを使用してマウントされたSecretとConfigMapを含むサンプルクラスター**

::

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Cluster
   metadata:
     name: cluster-example-projected-volume
   spec:
     instances: 3
     projectedVolumeTemplate:
       sources:
         - secret:
             name: sample-secret
             items:
               - key: tls.crt
                 path: certificate/tls.crt
               - key: tls.key
                 path: certificate/tls.key
         - configMap:
             name: sample-configmap
             items:
               - key: key1
                 path: config/key1
               - key: key2
                 path: config/key2
     storage:
       size: 1Gi

   - --
   apiVersion: v1
   data:
     tls.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNQekNDQWVXZ0F3SUJBZ0lRSHVDY2lKcDVkZis0dHZBcDBrTk9rekFLQmdncWhrak9QUVFEQWpCTk1TTXcKSVFZRFZRUUxFeHB3YjNOMFozSmxjM0ZzTFc5d1pYSmhkRzl5TFhONWMzUmxiVEVtTUNRR0ExVUVBeE1kY0c5egpkR2R5WlhOeGJDMXZjR1Z5WVhSdmNpMWpZUzF6WldOeVpYUXdIaGNOTWpJd09USTVNRGMxTVRBNVdoY05Nakl4Ck1qSTRNRGMxTVRBNVdqQk5NVXN3U1FZRFZRUURFMEp3YjNOMFozSmxjM0ZzTFc5d1pYSmhkRzl5TFhkbFltaHYKYjJzdGMyVnlkbWxqWlM1d2IzTjBaM0psYzNGc0xXOXdaWEpoZEc5eUxYTjVjM1JsYlM1emRtTXdXVEFUQmdjcQpoa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVJRd2lhUm0wSmN4TzlBVlE0MVlqVlRqNUhDSVVFblFQOXNZRXFKCmYvNE1mVm53NkdDOThjNDNmQTVuS2UwSnQ5ZEV3QXREYktkdkRoeDlUTmIzdVY0K280R21NSUdqTUE0R0ExVWQKRHdFQi93UUVBd0lEcURBVEJnTlZIU1VFRERBS0JnZ3JCZ0VGQlFjREFUQU1CZ05WSFJNQkFmOEVBakFBTUI4RwpBMVVkSXdRWU1CYUFGQjN6cUVKbWFORENoRDdkWGptSWRlNEhUY0pFTUUwR0ExVWRFUVJHTUVTQ1FuQnZjM1JuCmNtVnpjV3d0YjNCbGNtRjBiM0l0ZDJWaWFHOXZheTF6WlhKMmFXTmxMbkJ2YzNSbmNtVnpjV3d0YjNCbGNtRjAKYjNJdGMzbHpkR1Z0TG5OMll6QUtCZ2dxaGtqT1BRUURBZ05JQURCRkFpQkMwS2M5WWxYelBpL0lhTkRnWHkwawpYTDJpNlZzSHRORTFxN3MzWXh6Mm53SWhBS2IxUW5EVTlqRnNVK0l5a292TitVU1ZpVm5vU2MvZ2RXWkxmMnhoCjZ2WUsKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
     tls.key: LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUtucWxVQjFqU2sxWW5VZzAyb0tGbXlRdDJLUEZwaFc0K1lmQUFmUFdRenVvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFVU1JbWtadENYTVR2UUZVT05XSTFVNCtSd2lGQkowRC9iR0JLaVgvK0RIMVo4T2hndmZITwpOM3dPWnludENiZlhSTUFMUTJ5bmJ3NGNmVXpXOTdsZVBnPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo=
   kind: Secret
   metadata:
     name: sample-secret
   type: kubernetes.io/tls
   - --
   apiVersion: v1
   data:
     key1: value1
     key2: value2
     key3: value3
   kind: ConfigMap
   metadata:
     name: sample-configmap

投影されたボリュームマウントを使用してPostgresポッドにマウントされた既存の\ ``Secret``
および\ ``ConfigMap`` を含む基本的なクラスター。

**TDEが有効になったクラスター**

::

   - --
   apiVersion: v1
   kind: Secret
   metadata:
     name: tde-key
   data:
     key: bG9zcG9sbGl0b3NkaWNlbnBpb3Bpb3Bpb2N1YW5kb3RpZW5lbmhhbWJyZWN1YW5kb3RpZW5lbmZyaW8=

   - --
   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Cluster
   metadata:
     name: cluster-example
   spec:
     instances: 3
     imageName: docker.enterprisedb.com/k8s_enterprise/edb-postgres-advanced:16
     postgresql:
       epas:
         tde:
           enabled: true
           secretKeyRef:
             name: tde-key
             key: key

     storage:
       size: 1Gi

TDEを使用したEPAS
15クラスター。使用するイメージをダウンロードするには、アクセス資格情報が必要であることに注意してください。

バックアップ
------------

**カスタマイズされたストレージクラスとバックアップ** *前提条件*
バケットストレージが利用できる必要があります。サンプル構成はAWS用です。セットアップに合わせて変更します。
:

::

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Cluster
   metadata:
     name: pg-backup
   spec:
     instances: 3

     # Example of rolling update strategy:
     # - unsupervised: automated update of the primary once all
     #                 replicas have been upgraded (default)
     # - supervised: requires manual supervision to perform
     #               the switchover of the primary
     primaryUpdateStrategy: unsupervised

     # Persistent storage configuration
     storage:
       storageClass: standard
       size: 1Gi

     # Backup properties
     backup:
       barmanObjectStore:
         destinationPath: s3://BUCKET_NAME/path/to/folder
         s3Credentials:
           accessKeyId:
             name: aws-creds
             key: ACCESS_KEY_ID
           secretAccessKey:
             name: aws-creds
             key: ACCESS_SECRET_KEY
         wal:
           compression: gzip

バックアップが構成されたクラスター。

**バックアップ** *Prerequisites*

::

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Cluster
   metadata:
     name: pg-backup
   spec:
     instances: 3

     # Example of rolling update strategy:
     # - unsupervised: automated update of the primary once all
     #                 replicas have been upgraded (default)
     # - supervised: requires manual supervision to perform
     #               the switchover of the primary
     primaryUpdateStrategy: unsupervised

     # Persistent storage configuration
     storage:
       storageClass: standard
       size: 1Gi

     # Backup properties
     backup:
       barmanObjectStore:
         destinationPath: s3://BUCKET_NAME/path/to/folder
         s3Credentials:
           accessKeyId:
             name: aws-creds
             key: ACCESS_KEY_ID
           secretAccessKey:
             name: aws-creds
             key: ACCESS_SECRET_KEY
         wal:
           compression: gzip

適用され正常に稼働的。

:

::

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Backup
   metadata:
     name: pg-backup-example
   spec:
     cluster:
       name: pg-backup

前のサンプルに対して実行されるバックアップの例。

**minio用に構成されたバックアップを使用した単純なクラスター**
*Prerequisites*:この構成は、minioが実行され動作していることを前提としています。
minioパラメーターまたはクラウドソリューションで\ ``backup.barmanObjectStore``
を更新します。 :

::

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Cluster
   metadata:
     name: cluster-example-with-backup
   spec:
     instances: 3
     primaryUpdateStrategy: unsupervised

     # Persistent storage configuration
     storage:
       storageClass: csi-hostpath-sc
       size: 1Gi

     # Backup properties
     # This assumes a local minio setup
     backup:
       barmanObjectStore:
         destinationPath: s3://backups/
         endpointURL: http://minio:9000
         s3Credentials:
           accessKeyId:
             name: minio
             key: ACCESS_KEY_ID
           secretAccessKey:
             name: minio
             key: ACCESS_SECRET_KEY
         wal:
           compression: gzip
         data:
           additionalCommandArgs:
             - "--min-chunk-size=5MB"
             - "--read-timeout=60"
             - "-vv"

バックアップが構成された基本的なクラスター。

**Scaleway Object
Storage用に構成されたバックアップを備えた単純なクラスター**
*Prerequisites* この構成では、Scaleway Object
Storageバケットが存在することを前提としています。
``backup.barmanObjectStore`` をScalewayパラメーターで更新します。 :

::

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Cluster
   metadata:
     name: pg-backup-scaleway
   spec:
     instances: 3
     storage:
       storageClass: standard
       size: 1Gi
     backup:
       barmanObjectStore:
         destinationPath: "s3://<bucket>/backups/"     # change <bucket> with your buckets name.
         endpointURL: "https://s3.<region>.scw.cloud"  # change <region> with your buckets location/region.
         s3Credentials:
           accessKeyId:
             name: scaleway
             key: ACCESS_KEY_ID
           secretAccessKey:
             name: scaleway
             key: ACCESS_SECRET_KEY
           region:
             name: scaleway
             key: ACCESS_REGION

Scaleway Object
Storageで動作するように構成されたバックアップを含む基本的なクラスター。

レプリカクラスター
------------------

**オブジェクトストアからのバックアップによるレプリカクラスター**
*Prerequisites*

::

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Cluster
   metadata:
     name: pg-backup
   spec:
     instances: 3

     # Example of rolling update strategy:
     # - unsupervised: automated update of the primary once all
     #                 replicas have been upgraded (default)
     # - supervised: requires manual supervision to perform
     #               the switchover of the primary
     primaryUpdateStrategy: unsupervised

     # Persistent storage configuration
     storage:
       storageClass: standard
       size: 1Gi

     # Backup properties
     backup:
       barmanObjectStore:
         destinationPath: s3://BUCKET_NAME/path/to/folder
         s3Credentials:
           accessKeyId:
             name: aws-creds
             key: ACCESS_KEY_ID
           secretAccessKey:
             name: aws-creds
             key: ACCESS_SECRET_KEY
         wal:
           compression: gzip

適用され、正常、およびバックアップ

::

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Backup
   metadata:
     name: cluster-example-trigger-backup
   spec:
     cluster:
       name: cluster-example-with-backup

適用されて完了しました。

:

::

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Cluster
   metadata:
     name: cluster-example-replica-from-backup-simple
   spec:
     instances: 1

     bootstrap:
       recovery:
         source: cluster-example-backup

     replica:
       enabled: true
       source: cluster-example-backup

     storage:
       size: 1Gi

     externalClusters:
     - name: cluster-example-backup
       barmanObjectStore:
         destinationPath: s3://backups/
         endpointURL: http://minio:9000
         s3Credentials:
           accessKeyId:
             name: minio
             key: ACCESS_KEY_ID
           secretAccessKey:
             name: minio
             key: ACCESS_SECRET_KEY

バックアップが構成されたクラスターの次のレプリカクラスター。

**ボリュームスナップショットを介したレプリカクラスター** *Prerequisites*

::

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Cluster
   metadata:
     name: cluster-example-with-volume-snapshot
   spec:
     instances: 3
     primaryUpdateStrategy: unsupervised

     # Persistent storage configuration
     storage:
       storageClass: csi-hostpath-sc
       size: 1Gi
     walStorage:
       storageClass: csi-hostpath-sc
       size: 1Gi

     # Backup properties
     backup:
       volumeSnapshot:
          className: csi-hostpath-snapclass
       barmanObjectStore:
         destinationPath: s3://backups/
         endpointURL: http://minio:9000
         s3Credentials:
           accessKeyId:
             name: minio
             key: ACCESS_KEY_ID
           secretAccessKey:
             name: minio
             key: ACCESS_SECRET_KEY
         wal:
           compression: gzip

適用され、正常な、およびボリュームのスナップショット

::

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Backup
   metadata:
     name: backup-with-volume-snapshot
   spec:
     method: volumeSnapshot
     cluster:
       name: cluster-example-with-volume-snapshot

適用されて完了しました。

:

::

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Cluster
   metadata:
     name: cluster-example-replica-from-snapshot
   spec:
     instances: 1

     storage:
       storageClass: csi-hostpath-sc
       size: 1Gi
     walStorage:
       storageClass: csi-hostpath-sc
       size: 1Gi

     bootstrap:
       recovery:
         source: cluster-example-with-volume-snapshot
         volumeSnapshots:
           storage:
             name: cluster-example-with-volume-snapshot-2-1692618163
             kind: VolumeSnapshot
             apiGroup: snapshot.storage.k8s.io
           walStorage:
             name: cluster-example-with-volume-snapshot-2-wal-1692618163
             kind: VolumeSnapshot
             apiGroup: snapshot.storage.k8s.io

     replica:
       enabled: true
       source: cluster-example-with-volume-snapshot

     externalClusters:
       - name: cluster-example-with-volume-snapshot

         connectionParameters:
           host: cluster-example-with-volume-snapshot-rw.default.svc
           user: postgres
           dbname: postgres
         password:
           name: cluster-example-with-volume-snapshot-superuser
           key: password

         barmanObjectStore:
           destinationPath: s3://backups/
           endpointURL: http://minio:9000
           s3Credentials:
             accessKeyId:
               name: minio
               key: ACCESS_KEY_ID
             secretAccessKey:
               name: minio
               key: ACCESS_SECRET_KEY
           wal:
             maxParallel: 8

ボリュームスナップショットが構成されたクラスターの次のレプリカクラスター。

**ストリーミングpg_basebackupを介したレプリカクラスター**
*Prerequisites*

::

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Cluster
   metadata:
     name: cluster-example
   spec:
     instances: 3

     storage:
       size: 1Gi

適用され正常に稼働的。

:

::

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Cluster
   metadata:
     name: cluster-replica-example
   spec:
     instances: 1

     bootstrap:
       pg_basebackup:
         source: cluster-example

     replica:
       enabled: true
       source: cluster-example

     storage:
       size: 1Gi
     # note the namespace default in the host name `cluster-example-rw.default.svc`
     # remember to change accordingly with the namespace of the main cluster
     externalClusters:
     - name: cluster-example
       connectionParameters:
         host: cluster-example-rw.default.svc
         user: streaming_replica
         sslmode: verify-full
         dbname: postgres
       # NOTE: if this cluster is created in a different namespace than the main cluster
       # remember to create the `-replication` and `-ca` secrets in the follower namespace
       # before creating the follower cluster
       sslKey:
         name: cluster-example-replication
         key: tls.key
       sslCert:
         name: cluster-example-replication
         key: tls.crt
       sslRootCert:
         name: cluster-example-ca
         key: ca.crt

ストリーミングレプリケーションを使用した\ ``cluster-example``
に続くレプリカクラスター。

PostGIS
-------

**PostGISの例**

::

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Cluster
   metadata:
     name: postgis-example
   spec:
     instances: 3
     imageName: ghcr.io/cloudnative-pg/postgis:14
     bootstrap:
       initdb:
         postInitTemplateSQL:
           - CREATE EXTENSION postgis;
           - CREATE EXTENSION postgis_topology;
           - CREATE EXTENSION fuzzystrmatch;
           - CREATE EXTENSION postgis_tiger_geocoder;

     storage:
       size: 1Gi

PostGISクラスターの例。詳細は、 :ref:`PostGISコンテナイメージ <PostGISコンテナイメージ>` を参照してください。

管理対象ロール
--------------

**宣言的ロール管理を使用したクラスター**

::

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Cluster
   metadata:
     name: cluster-example-with-roles
   spec:
     instances: 3
     storage:
       size: 1Gi

     managed:
       roles:
       - name: app
         createdb: true
         login: true
       - name: dante
         ensure: present
         comment: my database-side comment
         login: true
         superuser: false
         createdb: true
         createrole: false
         inherit: false
         replication: false
         bypassrls: false
         connectionLimit: 4
         validUntil: "2053-04-12T15:04:05Z"
         inRoles:
           - pg_monitor
           - pg_signal_backend
         passwordSecret:
           name: cluster-example-dante
   - --
   apiVersion: v1
   data:
     username: ZGFudGU=
     password: ZGFudGU=
   kind: Secret
   metadata:
     name: cluster-example-dante
   type: kubernetes.io/basic-auth

``managed`` スタンザでロールを宣言します。
Kubernetesシークレットを使用したパスワード管理が含まれます。

管理対象サービス
----------------

**管理対象サービスを使用したクラスター**

::

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Cluster
   metadata:
     name: cluster-example-managed-services
   spec:
     instances: 1
     storage:
       size: 1Gi

     managed:
       services:
         ## disable the default services
         disabledDefaultServices: ["ro", "r"]
         additional:
           - selectorType: rw
             serviceTemplate:
               metadata:
                 name: "test-rw"
                 labels:
                   test-label: "true"
                 annotations:
                   test-annotation: "true"
               spec:
                 type: LoadBalancer

``managed``
スタンザを使用してサービスを宣言します。デフォルトサービスが無効になり、定義された\ ``LoadBalancer``
タイプの新しい\ ``rw`` サービステンプレートが含まれます。

宣言的テーブルスペース
----------------------

**宣言的テーブルスペースを使用したクラスター**

::

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Cluster
   metadata:
     name: cluster-example-with-tablespaces
   spec:
     instances: 3

     storage:
       size: 1Gi

     tablespaces:
       - name: atablespace
         storage:
           size: 1Gi
           storageClass: standard
         temporary: true
       - name: another_tablespace
         storage:
           size: 2Gi
           storageClass: standard
         temporary: true
       - name: tablespacea1
         storage:
           size: 2Gi
           storageClass: standard

**宣言的テーブルスペースとバックアップを使用したクラスター**
*Prerequisites*:この構成は、minioが実行され動作していることを前提としています。
minioパラメーターまたはクラウドソリューションで\ ``backup.barmanObjectStore``
を更新します。 :

::

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Cluster
   metadata:
     name: cluster-example-with-tablespaces
   spec:
     instances: 3

     storage:
       size: 1Gi

     backup:
       barmanObjectStore:
         destinationPath: s3://backups/
         endpointURL: http://minio:9000
         s3Credentials:
           accessKeyId:
             name: minio
             key: ACCESS_KEY_ID
           secretAccessKey:
             name: minio
             key: ACCESS_SECRET_KEY
         wal:
           compression: gzip

     tablespaces:
       - name: atablespace
         storage:
           size: 1Gi
           storageClass: standard
       - name: another_tablespace
         storage:
           size: 2Gi
           storageClass: standard
       - name: tablespacea1
         storage:
           size: 2Gi
           storageClass: standard

**オブジェクトストアからのテーブルスペースを含む復元されたクラスター**
*Prerequisites*
以前のクラスターが適用され、ベースバックアップが完了しました。
``bootstrap.recovery.backup.name``
をバックアップ名で更新することを忘れないでください。 :

::

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Cluster
   metadata:
     name: cluster-restore-with-tablespaces
   spec:
     instances: 3

     storage:
       size: 1Gi

     bootstrap:
       recovery:
         backup:
           name: cluster-example-with-tablespaces-20231128093940

     tablespaces:
       atablespace:
         storage:
           size: 1Gi
           storageClass: standard
       another_tablespace:
         storage:
           size: 2Gi
           storageClass: standard
       tablespacea1:
         storage:
           size: 2Gi
           storageClass: standard

使用可能なオプションのリストについては、
:ref:`API Reference - v1.25.1 <API Reference - v1.25.1>` を参照してください。

プーラー構成
------------

**カスタムサービス構成を使用したプーラー**

::

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Pooler
   metadata:
     name: pooler-example-rw
   spec:
     cluster:
       name: cluster-example
     instances: 3
     type: rw
     serviceTemplate:
       metadata:
         labels:
           app: pooler
       spec:
         type: LoadBalancer
     pgbouncer:
       poolMode: session
       parameters:
         max_client_conn: "1000"
         default_pool_size: "10"

宣言的なパブリケーションおよびサブスクリプションオブジェクトを介した論理レプリケーション
----------------------------------------------------------------------------------------

2つのテストマニフェストには、論理レプリケーションのセットアップに必要なすべてが含まれています。

**パブリケーションのあるソースクラスター**

::

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Cluster
   metadata:
     name: cluster-example
   spec:
     instances: 1

     imageName: quay.io/enterprisedb/postgresql:16

     storage:
       size: 1Gi

     bootstrap:
       initdb:
         postInitApplicationSQL:
           - CREATE TABLE numbers (i SERIAL PRIMARY KEY, m INTEGER)
           - INSERT INTO numbers (m) (SELECT generate_series(1,10000))
           - ALTER TABLE numbers OWNER TO app
           - CREATE TABLE numbers_two (i SERIAL PRIMARY KEY, m INTEGER)
           - INSERT INTO numbers_two (m) (SELECT generate_series(1,10000))
           - ALTER TABLE numbers_two OWNER TO app
           - CREATE SCHEMA another_schema
           - ALTER SCHEMA another_schema OWNER TO app
           - CREATE TABLE another_schema.numbers_three (i SERIAL PRIMARY KEY, m INTEGER)
           - INSERT INTO another_schema.numbers_three (m) (SELECT generate_series(1,10000))
           - ALTER TABLE another_schema.numbers_three OWNER TO app

     managed:
       roles:
         - name: app
           login: true
           replication: true
   - --
   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Publication
   metadata:
     name: cluster-example-pub
   spec:
     name: pub
     dbname: app
     cluster:
       name: cluster-example
     target:
       allTables: true

``app``
データベースで作成されたいくつかのテーブルを使用してクラスター\ ``cluster-example``
をセットアップし、重要なことに_app user_にレプリケーションを追加します。
``app``
データベースにクラスターのパブリケーションが作成されます。パブリケーションは、クラスターのプライマリが起動して実行された後にのみリコンサイルされることに注意してください。

**サブスクリプションのある宛先クラスター** *Prerequisites*
上記のように定義されたパブリケーションのあるソースクラスター。 :

::

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Cluster
   metadata:
     name: cluster-example-dest
   spec:
     instances: 1

     storage:
       size: 1Gi

     bootstrap:
       initdb:
         import:
           type: microservice
           schemaOnly: true
           databases:
             - app
           source:
             externalCluster: cluster-example

     externalClusters:
     - name: cluster-example
       connectionParameters:
         host: cluster-example-rw.default.svc
         user: app
         dbname: app
       password:
         name: cluster-example-app
         key: password
   - --
   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Subscription
   metadata:
     name: cluster-example-dest-sub
   spec:
     cluster:
       name: cluster-example-dest
     name: sub
     dbname: app
     publicationName: pub
     externalClusterName: cluster-example

次を使用してクラスター\ ``cluster-example-dest`` を設定します。

- ``externalClusters`` スタンザで定義されたソースクラスター。 ``app``
  ロールを使用して接続することに注意してください。これは、ソースクラスターが\ ``replication``
  特権を付与していることを前提としています。

- ``schemaOnly``
  が有効になったマイクロサービスタイプのブートストラップインポート

サブスクリプションは宛先クラスターで作成されます。サブスクリプションは、宛先クラスターのプライマリが起動して実行された後にのみ調整されることに注意してください。

両方のクラスターがリコンサイルされた後、パブリケーションオブジェクトとサブスクリプションオブジェクトとともに、ソースクラスターのテーブルとそのデータが宛先クラスターでレプリケートされたことを確認できます。

さらに、いくつかのスタンドアロンのマニフェストの例があります。

**すべてのテーブルをターゲットとするプレーンパブリケーション**
\_Prerequisites_既存のクラスター\ ``cluster-example`` 。 :

::

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Publication
   metadata:
     name: publication-example
   spec:
     cluster:
       name: cluster-example
     name: pub-all
     dbname: app
     target:
       allTables: true

**制約されたパブリケーションターゲットを使用したパブリケーション**
*Prerequisites* 既存のクラスター\ ``cluster-example`` 。 :

::

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Publication
   metadata:
     name: publication-example-objects
   spec:
     cluster:
       name: cluster-example
     name: pub-objects
     dbname: app
     target:
       objects:
         - tablesInSchema: public
         - table:
             schema: another_schema
             name: numbers_three
             only: true

**プレーンなサブスクリプション** 前提条件
既存のクラスター\ ``cluster-example``
がソースとして設定され、パブリケーション\ ``pub-all``
を使用します。宛先クラスターとして設定されたクラスター\ ``cluster-example-dest``
。レプリケーション特権を持つロールを含む、ソースクラスターへの接続パラメーターを含む\ ``externalClusters``
スタンザを含みます。 :

::

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Subscription
   metadata:
     name: subscription-sample
   spec:
     name: sub
     dbname: app
     publicationName: pub-all
     cluster:
       name: cluster-example-dest
     externalClusterName: cluster-example

上記のマニフェストはすべて、\ ``app``
データベースにパブリケーションまたはサブスクリプションを作成します。
Database
CRDは、データベースを宣言的に作成する便利な方法を提供します。これを使用すると、任意のデータベースに論理レプリケーションを設定できます。次のセクションに進みます。

Postgresデータベースの宣言的管理
--------------------------------

**プレーンなデータベース**
\_Prerequisites_既存のクラスター\ ``cluster-example`` 。 :

::

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Database
   metadata:
     name: db-one
   spec:
     name: one
     owner: app
     cluster:
       name: cluster-example

**ICUローカル仕様のデータベース** *Prerequisites* Postgres
16以降を実行している既存のクラスター\ ``cluster-example`` 。 :

::


   #  NOTE: this manifest will only work properly if the Postgres version supports

   #  ICU locales and rules (version 16 and newer)

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Database
   metadata:
     name: db-icu
   spec:
     name: declarative-icu
     owner: app
     encoding: UTF8
     localeProvider: icu
     icuLocale: en
     icuRules: fr
     template: template0
     cluster:
       name: cluster-example
