The examples show configuration files for setting up your PostgreSQL cluster.
Important
These examples are for demonstration and experimentation purposes. You can execute them on a personal Kubernetes cluster with Minikube or Kind, as described in Quick start.
Reference
For a list of available options, see API reference.
Basics
Basic cluster
cluster-example.yamlA basic example of a cluster.EDB Postgres Advanced Server (EPAS) cluster
cluster-example-epas.yamlA basic example of an EPAS cluster.EDB Postgres Extended (PGE) cluster
cluster-example-pge.yamlA basic example of a PGE cluster.Custom cluster
cluster-example-custom.yamlA basic cluster that uses the default storage class and custom parameters for thepostgresql.confandpg_hba.conffiles.Cluster with dynamic pg_hba address resolution
cluster-example-pod-selector-refs.yamlA cluster that usespodSelectorRefsto dynamically resolve pod IPs inpg_hbarules via the${podselector:NAME}syntax.Cluster with customized storage class
cluster-storage-class.yaml: A basic cluster that uses a specified storage class ofstandard.Cluster with persistent volume claim (PVC) template configured
cluster-pvc-template.yaml: A basic cluster with an explicit persistent volume claim template.Extended configuration example
cluster-example-full.yaml: A cluster that sets most of the available options.Bootstrap cluster with SQL files
cluster-example-initdb-sql-refs.yaml: A cluster example that executes a set of queries defined in a secret and aConfigMapright after the database is created.Sample cluster with customized
pg_hbaconfigurationcluster-example-pg-hba.yaml: A basic cluster that enables the user app to authenticate using certificates.Sample cluster with Secret and ConfigMap mounted using projected volume template
cluster-example-projected-volume.yamlA basic cluster with the existingSecretandConfigMapmounted into Postgres pod using projected volume mount.Cluster with TDE enabled
cluster-example-tde.yamlan EPAS 15 cluster with TDE. Note that you will need access credentials to download the image used.
Security
Sample cluster with custom security contexts
cluster-example-security-context.yaml
A cluster demonstrating how to customize both Pod and Container security contexts.
This is useful when working with Pod Security Standards or meeting specific security requirements.
Backups
Customized storage class and backups
Prerequisites: Bucket storage must be available. The sample config is for AWS. Change it to suit your setup.
cluster-storage-class-with-backup.yamlA cluster with backups configured.Backup
Prerequisites:
cluster-storage-class-with-backup.yamlapplied and healthy.backup-example.yaml: An example of a backup that runs against the previous sample.Simple cluster with backup configured for minio
Prerequisites: The configuration assumes minio is running and working. Update
backup.barmanObjectStorewith your minio parameters or your cloud solution.cluster-example-with-backup.yamlA basic cluster with backups configured.Simple cluster with backup configured for Scaleway Object Storage
Prerequisites: The configuration assumes a Scaleway Object Storage bucket exists. Update
backup.barmanObjectStorewith your Scaleway parameters.cluster-example-with-backup-scaleway.yamlA basic cluster with backups configured to work with Scaleway Object Storage..
Replica clusters
Replica cluster by way of backup from an object store
Prerequisites:
cluster-storage-class-with-backup.yamlapplied and healthy, and a backupcluster-example-trigger-backup.yamlapplied and completed.cluster-example-replica-from-backup-simple.yaml: A replica cluster following a cluster with backup configured.Replica cluster by way of volume snapshot
Prerequisites:
cluster-example-with-volume-snapshot.yamlapplied and healthy, and a volume snapshotbackup-with-volume-snapshot.yamlapplied and completed.cluster-example-replica-from-volume-snapshot.yaml: A replica cluster following a cluster with volume snapshot configured.Replica cluster by way of streaming (pg_basebackup)
Prerequisites:
cluster-example.yamlapplied and healthy.cluster-example-replica-streaming.yaml: A replica cluster followingcluster-examplewith streaming replication.
PostGIS
PostGIS example with image volume extensions
postgis-example.yaml:
An example of a PostGIS cluster using image volume extensions. See PostGIS for details.
Managed roles
Cluster with declarative role management
cluster-example-with-roles.yaml: Declares a role with themanagedstanza. Includes password management with Kubernetes secrets.Declarative role management with the
DatabaseRoleresourcerole-examples.yaml: StandaloneDatabaseRoleresources targeting an existing cluster, including password management with a Kubernetes secret.
Managed services
Cluster with managed services
cluster-example-managed-services.yaml:
Declares a service with the managed stanza. Includes default service disabled and new
rw service template of LoadBalancer type defined.
Declarative tablespaces
Cluster with declarative tablespaces
Cluster with declarative tablespaces and backup
Prerequisites: The configuration assumes minio is running and working. Update
backup.barmanObjectStorewith your minio parameters or your cloud solution.Restored cluster with tablespaces from object store
Prerequisites: The previous cluster applied and a base backup completed. Remember to update
bootstrap.recovery.backup.namewith the backup name.
For a list of available options, see API reference.
Pooler configuration
Pooler with custom service config
Logical replication via declarative Publication and Subscription objects
Two test manifests contain everything needed to set up logical replication:
Source cluster with a publication
cluster-example-logical-source.yaml
Sets up a cluster, cluster-example with some tables created in the app
database, and, importantly, adds replication to the app user.
A publication is created for the cluster on the app database: note that the
publication will be reconciled only after the cluster's primary is up and
running.
Destination cluster with a subscription
Prerequisites: The source cluster with publication, defined as above.
cluster-example-logical-destination.yaml
Sets up a cluster cluster-example-dest with:
- the source cluster defined in the
externalClustersstanza. Note that it uses theapprole to connect, which assumes the source cluster grants itreplicationprivilege. - a bootstrap import of microservice type, with
schemaOnlyenabled
A subscription is created on the destination cluster: note that the subscription will be reconciled only after the destination cluster's primary is up and running.
After both clusters have been reconciled, together with the publication and subscription objects, you can verify that that tables in the source cluster, and the data in them, have been replicated in the destination cluster
In addition, there are some standalone example manifests:
A plain Publication targeting All Tables
Prerequisites: an existing cluster
cluster-example.A Publication with a constrained publication target
Prerequisites: an existing cluster
cluster-example.A plain Subscription
Prerequisites: an existing cluster
cluster-exampleset up as source, with a publicationpub-all. A clustercluster-example-destset up as a destination cluster, including theexternalClustersstanza with connection parameters to the source cluster, including a role with replication privilege.
All the above manifests create publications or subscriptions on the app
database. The Database CRD offers a convenient way to create databases
declaratively. With it, logical replication could be set up for arbitrary
databases.
Which brings us to the next section.
Declarative management of Postgres databases
A plain Database
Prerequisites: an existing cluster
cluster-example.A Database with ICU local specifications
Prerequisites: an existing cluster
cluster-examplerunning Postgres 16 or more advanced.