From 8c40e0d0f46a641bdce723642f31ac1cfb6c26b4 Mon Sep 17 00:00:00 2001 From: Joe Banks Date: Sat, 27 Apr 2024 00:39:55 +0100 Subject: Upgrade to PostgreSQL 16 and move to databases namespace --- .../namespaces/databases/postgresql/README.md | 16 +++++++ .../namespaces/databases/postgresql/configmap.yaml | 29 +++++++++++++ .../databases/postgresql/deployment.yaml | 47 +++++++++++++++++++++ .../namespaces/databases/postgresql/secrets.yaml | Bin 0 -> 279 bytes .../namespaces/databases/postgresql/service.yaml | 26 ++++++++++++ .../namespaces/databases/postgresql/volume.yaml | 14 ++++++ kubernetes/namespaces/default/postgresql/README.md | 16 ------- .../namespaces/default/postgresql/configmap.yaml | 28 ------------ .../namespaces/default/postgresql/deployment.yaml | 46 -------------------- .../namespaces/default/postgresql/secrets.yaml | Bin 277 -> 0 bytes .../namespaces/default/postgresql/service.yaml | 11 ----- .../namespaces/default/postgresql/volume.yaml | 13 ------ 12 files changed, 132 insertions(+), 114 deletions(-) create mode 100644 kubernetes/namespaces/databases/postgresql/README.md create mode 100644 kubernetes/namespaces/databases/postgresql/configmap.yaml create mode 100644 kubernetes/namespaces/databases/postgresql/deployment.yaml create mode 100644 kubernetes/namespaces/databases/postgresql/secrets.yaml create mode 100644 kubernetes/namespaces/databases/postgresql/service.yaml create mode 100644 kubernetes/namespaces/databases/postgresql/volume.yaml delete mode 100644 kubernetes/namespaces/default/postgresql/README.md delete mode 100644 kubernetes/namespaces/default/postgresql/configmap.yaml delete mode 100644 kubernetes/namespaces/default/postgresql/deployment.yaml delete mode 100644 kubernetes/namespaces/default/postgresql/secrets.yaml delete mode 100644 kubernetes/namespaces/default/postgresql/service.yaml delete mode 100644 kubernetes/namespaces/default/postgresql/volume.yaml (limited to 'kubernetes') diff --git a/kubernetes/namespaces/databases/postgresql/README.md b/kubernetes/namespaces/databases/postgresql/README.md new file mode 100644 index 0000000..07eed4f --- /dev/null +++ b/kubernetes/namespaces/databases/postgresql/README.md @@ -0,0 +1,16 @@ +# Postgres +This folder contains the manifests for Postgres, our primary database. + +You can alter the configuration file inside the `configmap.yaml` file which will be injected into the database container upon boot. Certain parameters (marked in the file) will require a server restart whereas others can be reloaded by using `SELECT pg_reload_conf();` inside Postgres. + +Note that there may be up to a minute before your changes to the ConfigMap are reflected inside the container, if things do not change after that you will have to restart the server for the configuration to apply. + +## Secrets + +postgres requires a `postgres-env` secret with the following entries: + +| Environment | Description | +|-------------------|-----------------------------------| +| PGDATA | The path to the pg_data directory | +| POSTGRES_PASSWORD | The default password to use | +| POSTGRES_USER | The default user to use | diff --git a/kubernetes/namespaces/databases/postgresql/configmap.yaml b/kubernetes/namespaces/databases/postgresql/configmap.yaml new file mode 100644 index 0000000..12ad19b --- /dev/null +++ b/kubernetes/namespaces/databases/postgresql/configmap.yaml @@ -0,0 +1,29 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: postgres-config + namespace: databases +data: + postgresql.conf: | + # From pgtune + max_connections = 110 + shared_buffers = 1536MB + effective_cache_size = 4608MB + maintenance_work_mem = 384MB + checkpoint_completion_target = 0.9 + wal_buffers = 16MB + default_statistics_target = 100 + random_page_cost = 1.1 + effective_io_concurrency = 200 + work_mem = 3574kB + min_wal_size = 1GB + max_wal_size = 4GB + max_worker_processes = 4 + max_parallel_workers_per_gather = 2 + max_parallel_workers = 4 + max_parallel_maintenance_workers = 2 + + # Custom conf + listen_addresses = '*' + password_encryption = md5 + shared_preload_libraries = 'pg_stat_statements' # (change requires restart) diff --git a/kubernetes/namespaces/databases/postgresql/deployment.yaml b/kubernetes/namespaces/databases/postgresql/deployment.yaml new file mode 100644 index 0000000..bf1f246 --- /dev/null +++ b/kubernetes/namespaces/databases/postgresql/deployment.yaml @@ -0,0 +1,47 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: postgres + namespace: databases +spec: + replicas: 1 + strategy: + type: Recreate + selector: + matchLabels: + app: postgres + template: + metadata: + labels: + app: postgres + spec: + containers: + - name: postgres + image: ghcr.io/owl-corp/psql_extended:16 + imagePullPolicy: "Always" + ports: + - name: postgres + containerPort: 5432 + envFrom: + - secretRef: + name: postgres-env + args: ["-c", "config_file=/etc/postgresql/postgresql.conf"] + volumeMounts: + - name: postgres-data + mountPath: /var/lib/postgresql/data + subPath: pgdata + - name: postgres-config + mountPath: /etc/postgresql + - name: dshm + mountPath: /dev/shm + volumes: + - name: postgres-data + persistentVolumeClaim: + claimName: postgres-storage + - name: postgres-config + configMap: + name: postgres-config + - name: dshm + emptyDir: + medium: Memory + sizeLimit: 2Gi diff --git a/kubernetes/namespaces/databases/postgresql/secrets.yaml b/kubernetes/namespaces/databases/postgresql/secrets.yaml new file mode 100644 index 0000000..68c225e Binary files /dev/null and b/kubernetes/namespaces/databases/postgresql/secrets.yaml differ diff --git a/kubernetes/namespaces/databases/postgresql/service.yaml b/kubernetes/namespaces/databases/postgresql/service.yaml new file mode 100644 index 0000000..6a2b520 --- /dev/null +++ b/kubernetes/namespaces/databases/postgresql/service.yaml @@ -0,0 +1,26 @@ +apiVersion: v1 +kind: Service +metadata: + labels: + app: postgres + name: postgres + namespace: databases +spec: + ports: + - port: 5432 + selector: + app: postgres +--- +# Fallback service for items relying on svc/postgres in the default namespace +apiVersion: v1 +kind: Service +metadata: + name: postgres + namespace: default +spec: + type: ExternalName + externalName: postgres.databases.svc.cluster.local + ports: + - port: 5432 + selector: + app: postgres diff --git a/kubernetes/namespaces/databases/postgresql/volume.yaml b/kubernetes/namespaces/databases/postgresql/volume.yaml new file mode 100644 index 0000000..ed1d2d6 --- /dev/null +++ b/kubernetes/namespaces/databases/postgresql/volume.yaml @@ -0,0 +1,14 @@ +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: postgres-storage + labels: + app: postgres + namespace: databases +spec: + storageClassName: linode-block-storage-retain + accessModes: + - ReadWriteOncePod + resources: + requests: + storage: 25Gi diff --git a/kubernetes/namespaces/default/postgresql/README.md b/kubernetes/namespaces/default/postgresql/README.md deleted file mode 100644 index 07eed4f..0000000 --- a/kubernetes/namespaces/default/postgresql/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# Postgres -This folder contains the manifests for Postgres, our primary database. - -You can alter the configuration file inside the `configmap.yaml` file which will be injected into the database container upon boot. Certain parameters (marked in the file) will require a server restart whereas others can be reloaded by using `SELECT pg_reload_conf();` inside Postgres. - -Note that there may be up to a minute before your changes to the ConfigMap are reflected inside the container, if things do not change after that you will have to restart the server for the configuration to apply. - -## Secrets - -postgres requires a `postgres-env` secret with the following entries: - -| Environment | Description | -|-------------------|-----------------------------------| -| PGDATA | The path to the pg_data directory | -| POSTGRES_PASSWORD | The default password to use | -| POSTGRES_USER | The default user to use | diff --git a/kubernetes/namespaces/default/postgresql/configmap.yaml b/kubernetes/namespaces/default/postgresql/configmap.yaml deleted file mode 100644 index a2c9a4e..0000000 --- a/kubernetes/namespaces/default/postgresql/configmap.yaml +++ /dev/null @@ -1,28 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: postgres-config -data: - postgresql.conf: | - # From pgtune - max_connections = 110 - shared_buffers = 1536MB - effective_cache_size = 4608MB - maintenance_work_mem = 384MB - checkpoint_completion_target = 0.9 - wal_buffers = 16MB - default_statistics_target = 100 - random_page_cost = 1.1 - effective_io_concurrency = 200 - work_mem = 3574kB - min_wal_size = 1GB - max_wal_size = 4GB - max_worker_processes = 4 - max_parallel_workers_per_gather = 2 - max_parallel_workers = 4 - max_parallel_maintenance_workers = 2 - - # Custom conf - listen_addresses = '*' - password_encryption = md5 - shared_preload_libraries = 'pg_stat_statements' # (change requires restart) diff --git a/kubernetes/namespaces/default/postgresql/deployment.yaml b/kubernetes/namespaces/default/postgresql/deployment.yaml deleted file mode 100644 index cfe6101..0000000 --- a/kubernetes/namespaces/default/postgresql/deployment.yaml +++ /dev/null @@ -1,46 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: postgres -spec: - replicas: 1 - strategy: - type: Recreate - selector: - matchLabels: - app: postgres - template: - metadata: - labels: - app: postgres - spec: - containers: - - name: postgres - image: ghcr.io/chrislovering/psql_extended:15 - imagePullPolicy: "Always" - ports: - - name: postgres - containerPort: 5432 - envFrom: - - secretRef: - name: postgres-env - args: ["-c", "config_file=/etc/postgresql/postgresql.conf"] - volumeMounts: - - name: postgres-data - mountPath: /var/lib/postgresql/data - subPath: pgdata - - name: postgres-config - mountPath: /etc/postgresql - - name: dshm - mountPath: /dev/shm - volumes: - - name: postgres-data - persistentVolumeClaim: - claimName: postgres-storage - - name: postgres-config - configMap: - name: postgres-config - - name: dshm - emptyDir: - medium: Memory - sizeLimit: 2Gi diff --git a/kubernetes/namespaces/default/postgresql/secrets.yaml b/kubernetes/namespaces/default/postgresql/secrets.yaml deleted file mode 100644 index 902f7d5..0000000 Binary files a/kubernetes/namespaces/default/postgresql/secrets.yaml and /dev/null differ diff --git a/kubernetes/namespaces/default/postgresql/service.yaml b/kubernetes/namespaces/default/postgresql/service.yaml deleted file mode 100644 index f69deae..0000000 --- a/kubernetes/namespaces/default/postgresql/service.yaml +++ /dev/null @@ -1,11 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - labels: - app: postgres - name: postgres -spec: - ports: - - port: 5432 - selector: - app: postgres diff --git a/kubernetes/namespaces/default/postgresql/volume.yaml b/kubernetes/namespaces/default/postgresql/volume.yaml deleted file mode 100644 index 53108ce..0000000 --- a/kubernetes/namespaces/default/postgresql/volume.yaml +++ /dev/null @@ -1,13 +0,0 @@ -kind: PersistentVolumeClaim -apiVersion: v1 -metadata: - name: postgres-storage - labels: - app: postgres -spec: - storageClassName: linode-block-storage-retain - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 25Gi -- cgit v1.2.3