While I was preparing to deploy PostgreSQL for Firefly III, I was thinking it would be a neat idea to write an operator that uses custom resources to manage PostgreSQL roles and databases. Then I though, surely something like that must exist already. As it turns out, the [Postgres Operator][0] does exactly that, and a whole lot more. The *Postgres Operator* handles deploying PostgreSQL server instances, including primary/standby replication with load balancers. It uses custom resources to manage the databases and users (roles) in an instance, and stores role passwords in Secret resources. It supports backing up instances using `pg_basebackup` and WAL archives (i.e. physical backups) via [WAL-E][1]/[WAL-G][2]. While various backup storage targets are supported, *Postgres Operator* really only works well with the cloud storage services like S3, Azure, and Google Cloud Platform. Fortunately, S3-compatible on-premises solutions like MinIO are just fine. I think for my use cases, a single PostgreSQL cluster with multiple databases will be sufficient. I know *Firefly III* will need a PostgreSQL database, and I will likely want to migrate *Paperless-ngx* to PostgreSQL eventually too. Having a single instance will save on memory resources, at the cost of per-application point-in-time recovery. For now, just one server in the cluster is probably sufficient, but luckily adding standby servers appears to be really easy should the need arise. [0]: https://postgres-operator.readthedocs.io/en/latest/ [1]: https://github.com/wal-e/wal-e [2]: https://github.com/wal-g/wal-g
69 lines
2.0 KiB
YAML
69 lines
2.0 KiB
YAML
apiVersion: apiextensions.k8s.io/v1
|
|
kind: CustomResourceDefinition
|
|
metadata:
|
|
name: postgresteams.acid.zalan.do
|
|
spec:
|
|
group: acid.zalan.do
|
|
names:
|
|
kind: PostgresTeam
|
|
listKind: PostgresTeamList
|
|
plural: postgresteams
|
|
singular: postgresteam
|
|
shortNames:
|
|
- pgteam
|
|
categories:
|
|
- all
|
|
scope: Namespaced
|
|
versions:
|
|
- name: v1
|
|
served: true
|
|
storage: true
|
|
subresources:
|
|
status: {}
|
|
schema:
|
|
openAPIV3Schema:
|
|
type: object
|
|
required:
|
|
- kind
|
|
- apiVersion
|
|
- spec
|
|
properties:
|
|
kind:
|
|
type: string
|
|
enum:
|
|
- PostgresTeam
|
|
apiVersion:
|
|
type: string
|
|
enum:
|
|
- acid.zalan.do/v1
|
|
spec:
|
|
type: object
|
|
properties:
|
|
additionalSuperuserTeams:
|
|
type: object
|
|
description: "Map for teamId and associated additional superuser teams"
|
|
additionalProperties:
|
|
type: array
|
|
nullable: true
|
|
description: "List of teams to become Postgres superusers"
|
|
items:
|
|
type: string
|
|
additionalTeams:
|
|
type: object
|
|
description: "Map for teamId and associated additional teams"
|
|
additionalProperties:
|
|
type: array
|
|
nullable: true
|
|
description: "List of teams whose members will also be added to the Postgres cluster"
|
|
items:
|
|
type: string
|
|
additionalMembers:
|
|
type: object
|
|
description: "Map for teamId and associated additional users"
|
|
additionalProperties:
|
|
type: array
|
|
nullable: true
|
|
description: "List of users who will also be added to the Postgres cluster"
|
|
items:
|
|
type: string
|