例 == 例は、PostgreSQLクラスターをセットアップするための構成ファイルを示しています。 .. Important:: これらの例は、デモンストレーションと実験を目的としています。 :ref:`クイックスタート <クイックスタート>` で説明しているように、MinikubeまたはKindを使用して個人のKubernetesクラスターで実行できます。 .. Seealso:: 使用可能なオプションのリストについては、 :ref:`APIリファレンス ` を参照してください。 基本 ---- **基本的なクラスター** :: apiVersion: postgresql.cnpg.io/v1 kind: Cluster metadata: name: cluster-example spec: instances: 3 storage: size: 1Gi クラスターの基本的な例。 **カスタムクラスター** :: apiVersion: postgresql.cnpg.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.cnpg.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.cnpg.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.cnpg.io/v1 kind: Cluster metadata: name: cluster-example-full spec: description: "Example of cluster" imageName: ghcr.io/cloudnative-pg/postgresql:17.5 # 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.cnpg.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.cnpg.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.cnpg.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`` を含む基本的なクラスター。 バックアップ ------------ **カスタマイズされたストレージクラスとバックアップ** : *前提条件* バケットストレージが利用できること。サンプル構成はAWS用です。セットアップに合わせて変更します。 : :: apiVersion: postgresql.cnpg.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.cnpg.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.cnpg.io/v1 kind: Backup metadata: name: pg-backup-example spec: cluster: name: pg-backup 前のサンプルに対して実行されるバックアップの例。 **minio用に構成されたバックアップを含む単純なクラスター** : *前提条件* 構成は、minioが実行され動作していることを前提としています。 minioパラメーターまたはクラウドソリューションで\ ``backup.barmanObjectStore`` を更新します。 : :: apiVersion: postgresql.cnpg.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用に構成されたバックアップを含む単純なクラスター** : *前提条件* この構成では、 Scaleway Object Storageバケットが存在することを前提としています。 ``backup.barmanObjectStore`` をScalewayパラメーターで更新します。 : :: apiVersion: postgresql.cnpg.io/v1 kind: Cluster metadata: name: pg-backup-scaleway spec: instances: 3 storage: storageClass: standard size: 1Gi backup: barmanObjectStore: destinationPath: "s3:///backups/" # change with your buckets name. endpointURL: "https://s3..scw.cloud" # change 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で動作するように構成されたバックアップを含む基本的なクラスター。 レプリカクラスター ------------------ **オブジェクトストアからのバックアップによるレプリカクラスター** : *前提条件* :: apiVersion: postgresql.cnpg.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.cnpg.io/v1 kind: Backup metadata: name: cluster-example-trigger-backup spec: cluster: name: cluster-example-with-backup 適用されて完了しました。 : :: apiVersion: postgresql.cnpg.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 バックアップが構成されたクラスターの次のレプリカクラスター。 **ボリュームスナップショットを介したレプリカクラスター** : *前提条件* :: apiVersion: postgresql.cnpg.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.cnpg.io/v1 kind: Backup metadata: name: backup-with-volume-snapshot spec: method: volumeSnapshot cluster: name: cluster-example-with-volume-snapshot 適用されて完了しました。 : :: apiVersion: postgresql.cnpg.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** を介したレプリカクラスター \**前提条件\* :: apiVersion: postgresql.cnpg.io/v1 kind: Cluster metadata: name: cluster-example spec: instances: 3 storage: size: 1Gi 応用されて健康的。 : :: apiVersion: postgresql.cnpg.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.cnpg.io/v1 kind: Cluster metadata: name: postgis-example spec: instances: 1 imageName: ghcr.io/cloudnative-pg/postgis:17 storage: size: 1Gi postgresql: parameters: log_statement: ddl - -- apiVersion: postgresql.cnpg.io/v1 kind: Database metadata: name: postgis-example-app spec: name: app owner: app cluster: name: postgis-example extensions: - name: postgis - name: postgis_topology - name: fuzzystrmatch - name: postgis_tiger_geocoder PostGISクラスターの例。詳細は、 :ref:`PostGISコンテナイメージ ` を参照してください。 管理対象ロール -------------- **宣言的ロール管理を使用したクラスター** :: apiVersion: postgresql.cnpg.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.cnpg.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.cnpg.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 **宣言的テーブルスペースとバックアップを使用したクラスター** : *前提条件* 構成は、minioが実行され動作していることを前提としています。 minioパラメーターまたはクラウドソリューションで\ ``backup.barmanObjectStore`` を更新します。 : :: apiVersion: postgresql.cnpg.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 **オブジェクトストアからのテーブルスペースを含む復元されたクラスター** : *前提条件* 以前のクラスターが適用され、ベースバックアップが完了しました。 ``bootstrap.recovery.backup.name`` をバックアップ名で更新することを忘れないでください。 : :: apiVersion: postgresql.cnpg.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リファレンス ` を参照してください。 プーラー構成 ------------ **カスタムサービス構成を使用したプーラー** :: apiVersion: postgresql.cnpg.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.cnpg.io/v1 kind: Cluster metadata: name: cluster-example spec: instances: 3 imageName: ghcr.io/cloudnative-pg/postgresql:17 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 replicationSlots: highAvailability: synchronizeLogicalDecoding: true managed: roles: - name: app login: true replication: true postgresql: parameters: hot_standby_feedback: on sync_replication_slots: on - -- apiVersion: postgresql.cnpg.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`` データベースにクラスターのパブリケーションが作成されます。パブリケーションは、クラスターのプライマリが起動して実行された後にのみリコンサイルされることに注意してください。 **サブスクリプションのある宛先クラスター** : *前提条件* 上記のように定義されたパブリケーションのあるソースクラスター。 : :: apiVersion: postgresql.cnpg.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.cnpg.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 parameters: failover: true 次を使用してクラスター\ ``cluster-example-dest`` を設定します。 - ``externalClusters`` スタンザで定義されたソースクラスター。 ``app`` ロールを使用して接続することに注意してください。これは、ソースクラスターが\ ``replication`` 特権を付与していることを前提としています。 - ``schemaOnly`` が有効になったマイクロサービスタイプのブートストラップインポート サブスクリプションは宛先クラスターで作成されます。サブスクリプションは、宛先クラスターのプライマリが起動して実行された後にのみ調整されることに注意してください。 両方のクラスターがリコンサイルされた後、パブリケーションオブジェクトとサブスクリプションオブジェクトとともに、ソースクラスターのテーブルとそのデータが宛先クラスターでレプリケートされたことを確認できます。 さらに、いくつかのスタンドアロンのマニフェストの例があります。 **すべてのテーブルをターゲットとするプレーンパブリケーション** : *前提条件* 既存のクラスター\ ``cluster-example`` 。 : :: apiVersion: postgresql.cnpg.io/v1 kind: Publication metadata: name: publication-example spec: cluster: name: cluster-example name: pub-all dbname: app target: allTables: true **制約されたパブリケーションターゲットを使用したパブリケーション** : *前提条件* 既存のクラスター\ ``cluster-example`` 。 : :: apiVersion: postgresql.cnpg.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.cnpg.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データベースの宣言的管理 -------------------------------- **プレーンなデータベース** : *前提条件* 既存のクラスター\ ``cluster-example`` 。 : :: apiVersion: postgresql.cnpg.io/v1 kind: Database metadata: name: db-one spec: name: one owner: app cluster: name: cluster-example **ICUローカル仕様のデータベース** : *前提条件* 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.cnpg.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