Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
name: cnpg-controller-manager
spec:
selector:
matchLabels:
app.kubernetes.io/name: cloudnative-pg
podMetricsEndpoints:
- port: metrics
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
apiVersion: kustomize.config.k8s.io/v1alpha1
kind: Component


resources:
- PodMonitor-cnpg-controller-manager.yaml
15 changes: 15 additions & 0 deletions manifests/postgres/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# PostgreSQL Cluster including HA Multi-cluster replication

Following Components are available:

- `enable-super_user_access` Enable super user account and access to cluster

- `ha` Deploy replicated multi-cluster in master-slave configuration

- `metrics` Enable prometheus metrics endpoint

Following Overlays are available:

- `Production` - Base deployment manifests

- `HA` - HA Multi-Cluster deployment with replication between clusters
95 changes: 95 additions & 0 deletions manifests/postgres/base/Cluster.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
---
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
labels:
app.kubernetes.io/component: base
app.kubernetes.io/instance: production
app.kubernetes.io/name: postgres
app.kubernetes.io/part-of: postgres
name: main
spec:

affinity:
additionalPodAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app.kubernetes.io/name
operator: In
values:
- postgres
topologyKey: kubernetes.io/hostname

enablePodAntiAffinity: true
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
preference:
matchExpressions:
- key: node-role.kubernetes.io/control-plane
operator: Exists
- weight: 50
preference:
matchExpressions:
- key: node-role.kubernetes.io/master
operator: Exists
- weight: 100
preference:
matchExpressions:
- key: node-role.kubernetes.io/prime
operator: Exists
topologyKey: kubernetes.io/hostname

# bootstrap: {}

description: "Cluster PostgreSQL Instance"

enableSuperuserAccess: false

# externalClusters: []

imageName: ghcr.io/cloudnative-pg/postgresql:-updated_by_patch-

inheritedMetadata:
labels:
app.kubernetes.io/component: base
app.kubernetes.io/instance: production
app.kubernetes.io/name: postgres
app.kubernetes.io/part-of: postgres

instances: 3

# monitoring: {}

nodeMaintenanceWindow:
inProgress: false
reusePVC: false

primaryUpdateStrategy: unsupervised

postgresql:
parameters:
max_parallel_workers: '34'
max_replication_slots: '32'
max_worker_processes: '34'

# replica: {}

resources:
requests:
cpu: "100m"
memory: "100Mi"
limits:
cpu: "2"
memory: "1Gi"

startDelay: 300

stopDelay: 300

storage:
resizeInUseVolumes: false
size: 10Gi
8 changes: 8 additions & 0 deletions manifests/postgres/base/kustomization.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

namespace: postgres

resources:
- Cluster.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
apiVersion: grafana.integreatly.org/v1beta1
kind: GrafanaDashboard
metadata:
labels:
app.kubernetes.io/component: database
name: cloudnativepg
spec:
allowCrossNamespaceImport: true
folder: "General"
resyncPeriod: 24h
instanceSelector:
matchLabels:
dashboards: grafana
grafanaCom:
id: 20417
revision: 4 # as @ 2025-08-02
7 changes: 7 additions & 0 deletions manifests/postgres/components/dashboard/kustomization.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
apiVersion: kustomize.config.k8s.io/v1alpha1
kind: Component


resources:
- GrafanaDashboard-cloudnativepg.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
---

apiVersion: kustomize.config.k8s.io/v1alpha1
kind: Component


patches:
# yamllint disable rule:indentation
- patch: |-

- op: replace
path: /spec/enableSuperuserAccess
value: true

- op: add
path: /spec/superuserSecret
value:
name: cluster-superuser

# yamllint enable rule:indentation
target:
group: postgresql.cnpg.io
version: v1
kind: Cluster
99 changes: 99 additions & 0 deletions manifests/postgres/components/ha/Cluster-main-02.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
---
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
labels:
app.kubernetes.io/component: ha
app.kubernetes.io/instance: production
app.kubernetes.io/name: postgres
app.kubernetes.io/part-of: production-ha
name: main-02
spec:

affinity:
additionalPodAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app.kubernetes.io/name
operator: In
values:
- postgres
topologyKey: kubernetes.io/hostname

enablePodAntiAffinity: true
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
preference:
matchExpressions:
- key: node-role.kubernetes.io/control-plane
operator: Exists
- weight: 50
preference:
matchExpressions:
- key: node-role.kubernetes.io/master
operator: Exists
- weight: 100
preference:
matchExpressions:
- key: node-role.kubernetes.io/prime
operator: Exists
topologyKey: kubernetes.io/hostname

bootstrap:
pg_basebackup:
source: main-01

description: "Cluster PostgreSQL Instance"

enableSuperuserAccess: false

externalClusters: []

imageName: ghcr.io/cloudnative-pg/postgresql:-updated_by_patch-

inheritedMetadata:
labels:
app.kubernetes.io/component: ha
app.kubernetes.io/instance: production
app.kubernetes.io/name: postgres
app.kubernetes.io/part-of: production-ha

instances: 3

monitoring: {}

nodeMaintenanceWindow:
inProgress: false
reusePVC: false

primaryUpdateStrategy: unsupervised

postgresql:
parameters:
max_parallel_workers: '34'
max_replication_slots: '32'
max_worker_processes: '34'

replica:
primary: main-01
source: main-01

resources:
requests:
cpu: "100m"
memory: "100Mi"
limits:
cpu: "2"
memory: "1Gi"

startDelay: 300

stopDelay: 300

storage:
resizeInUseVolumes: false
size: 10Gi
21 changes: 21 additions & 0 deletions manifests/postgres/components/ha/Service-main-r.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
---
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/component: ha
app.kubernetes.io/instance: production
app.kubernetes.io/name: postgres
app.kubernetes.io/part-of: production-ha
name: main-r
spec:
ports:
- name: postgres
port: 5432
protocol: TCP
targetPort: 5432
selector:
cnpg.io/cluster: -updated_by_replacement-
cnpg.io/podRole: instance
sessionAffinity: None
type: ClusterIP
21 changes: 21 additions & 0 deletions manifests/postgres/components/ha/Service-main-ro.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
---
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/component: ha
app.kubernetes.io/instance: production
app.kubernetes.io/name: postgres
app.kubernetes.io/part-of: production-ha
name: main-ro
spec:
ports:
- name: postgres
port: 5432
protocol: TCP
targetPort: 5432
selector:
cnpg.io/cluster: -updated_by_replacement-
cnpg.io/instanceRole: replica
sessionAffinity: None
type: ClusterIP
21 changes: 21 additions & 0 deletions manifests/postgres/components/ha/Service-main-rw.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
---
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/component: ha
app.kubernetes.io/instance: production
app.kubernetes.io/name: postgres
app.kubernetes.io/part-of: production-ha
name: main-rw
spec:
ports:
- name: postgres
port: 5432
protocol: TCP
targetPort: 5432
selector:
cnpg.io/cluster: -updated_by_replacement-
cnpg.io/instanceRole: primary
sessionAffinity: None
type: ClusterIP
Loading
Loading