External PostgreSQL server operator for Kubernetes
1M+
In order for this operator to work correctly with AWS RDS, you need to set POSTGRES_CLOUD_PROVIDER to AWS either in
the ext-postgres-operator kubernetes secret or directly in the deployment manifest (operator.yaml).
In order for this operator to work correctly with Azure managed PostgreSQL database, two env variables needs to be provided for the operator:
POSTGRES_CLOUD_PROVIDER set to AzurePOSTGRES_DEFAULT_DATABASE set to your default database, i.e. postgresThis operator requires a Kubernetes Secret to be created in the same namespace as operator itself. Secret should contain these keys: POSTGRES_HOST, POSTGRES_USER, POSTGRES_PASS, POSTGRES_URI_ARGS, POSTGRES_CLOUD_PROVIDER, POSTGRES_DEFAULT_DATABASE. Example:
apiVersion: v1
kind: Secret
metadata:
name: ext-postgres-operator
namespace: operators
type: Opaque
data:
POSTGRES_HOST: cG9zdGdyZXM=
POSTGRES_USER: cG9zdGdyZXM=
POSTGRES_PASS: YWRtaW4=
POSTGRES_URI_ARGS: IA==
POSTGRES_CLOUD_PROVIDER: QVdT
POSTGRES_DEFAULT_DATABASE: cG9zdGdyZXM=
To install the operator, follow the steps below.
deploy/secret.yamlkubectl apply -f deploy/crds/db.movetokube.com_postgres_crd.yamlkubectl apply -f deploy/crds/db.movetokube.com_postgresusers_crd.yamlkubectl apply -f deploy/namespace.yamlkubectl apply -f deploy/secret.yamlkubectl apply -f deploy/role.yamlkubectl apply -f deploy/role_binding.yamlkubectl apply -f deploy/service_account.yamlkubectl apply -f deploy/operator.yamlapiVersion: db.movetokube.com/v1alpha1
kind: Postgres
metadata:
name: my-db
namespace: app
spec:
database: test-db # Name of database created in PostgreSQL
dropOnDelete: false # Set to true if you want the operator to drop the database and role when this CR is deleted (optional)
masterRole: test-db-group (optional)
schemas: # List of schemas the operator should create in database (optional)
- stores
- customers
extensions: # List of extensions that should be created in the database (optional)
- fuzzystrmatch
- pgcrypto
This creates a database called test-db and a role test-db-group that is set as the owner of the database.
Reader and writer roles are also created. These roles have read and write permissions to all tables in the schemas created by the operator, if any.
apiVersion: db.movetokube.com/v1alpha1
kind: PostgresUser
metadata:
name: my-db-user
namespace: app
spec:
role: username
database: my-db # This references the Postgres CR
secretName: my-secret
privileges: OWNER # Can be OWNER/READ/WRITE
This creates a user role username-<hash> and grants role test-db-group, test-db-writer or test-db-reader depending on privileges property. Its credentials are put in secret my-secret-my-db-user.
PostgresUser needs to reference a Postgres in the same namespace.
Two Postgres referencing the same database can exist in more than one namespace. The last CR referencing a database will drop the group role and transfer database ownership to the role used by the operator.
Content type
Image
Digest
sha256:def57d85a…
Size
31.7 MB
Last updated
10 months ago
docker pull movetokube/postgres-operator