refactor: Replace CNPG external DB with rancher-backup operator
Rancher 2.x uses embedded etcd, not an external PostgreSQL database. The CATTLE_DB_CATTLE_* env vars are Rancher v1 only and were ignored. - Remove all CNPG (CloudNativePG) cluster, operator, and related configs - Remove external DB env vars from Rancher HelmRelease - Remove rancher-db-password ExternalSecret - Add rancher-backup operator HelmRelease (v106.0.2+up8.1.0) - Add B2 credentials ExternalSecret for backup storage - Add recurring Backup CR (daily at 03:00, 7 day retention) - Add commented-out Restore CR for rebuild recovery - Update Flux dependency graph accordingly
This commit is contained in:
@@ -1,5 +0,0 @@
|
|||||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
||||||
kind: Kustomization
|
|
||||||
resources:
|
|
||||||
- helmrepository-cnpg.yaml
|
|
||||||
- helmrelease-cnpg.yaml
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
apiVersion: v1
|
|
||||||
kind: Service
|
|
||||||
metadata:
|
|
||||||
name: cnpg-cluster-rw
|
|
||||||
namespace: cnpg-cluster
|
|
||||||
labels:
|
|
||||||
app.kubernetes.io/name: rancher-db
|
|
||||||
cnpg.io/cluster: rancher-db
|
|
||||||
spec:
|
|
||||||
type: ClusterIP
|
|
||||||
clusterIP: None
|
|
||||||
ports:
|
|
||||||
- port: 5432
|
|
||||||
targetPort: 5432
|
|
||||||
protocol: TCP
|
|
||||||
selector:
|
|
||||||
app.kubernetes.io/name: postgresql
|
|
||||||
cnpg.io/cluster: rancher-db
|
|
||||||
role: primary
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
||||||
kind: Kustomization
|
|
||||||
resources:
|
|
||||||
- namespace.yaml
|
|
||||||
- b2-credentials-externalsecret.yaml
|
|
||||||
- rancher-db-password-externalsecret.yaml
|
|
||||||
- postgres-cluster.yaml
|
|
||||||
- cnpg-cluster-rw-svc.yaml
|
|
||||||
- role-b2-reader.yaml
|
|
||||||
- rolebinding-b2-reader.yaml
|
|
||||||
- scheduled-backup-rancher.yaml
|
|
||||||
@@ -1,79 +0,0 @@
|
|||||||
apiVersion: postgresql.cnpg.io/v1
|
|
||||||
kind: Cluster
|
|
||||||
metadata:
|
|
||||||
name: rancher-db
|
|
||||||
namespace: cnpg-cluster
|
|
||||||
annotations:
|
|
||||||
cnpg.io/skipEmptyWalArchiveCheck: "enabled"
|
|
||||||
spec:
|
|
||||||
description: "Rancher external database cluster"
|
|
||||||
imageName: ghcr.io/cloudnative-pg/postgresql:17.4
|
|
||||||
imagePullPolicy: IfNotPresent
|
|
||||||
|
|
||||||
instances: 1
|
|
||||||
primaryUpdateStrategy: unsupervised
|
|
||||||
|
|
||||||
storage:
|
|
||||||
storageClass: local-path
|
|
||||||
size: 50Gi
|
|
||||||
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
cpu: 250m
|
|
||||||
memory: 512Mi
|
|
||||||
limits:
|
|
||||||
cpu: 1000m
|
|
||||||
memory: 2Gi
|
|
||||||
|
|
||||||
serviceAccountTemplate:
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
app.kubernetes.io/name: rancher-db
|
|
||||||
|
|
||||||
superuserSecret:
|
|
||||||
name: rancher-db-password
|
|
||||||
|
|
||||||
bootstrap:
|
|
||||||
recovery:
|
|
||||||
source: b2-backup
|
|
||||||
|
|
||||||
externalClusters:
|
|
||||||
- name: b2-backup
|
|
||||||
barmanObjectStore:
|
|
||||||
destinationPath: "s3://HetznerTerra/rancher-backups/"
|
|
||||||
endpointURL: "https://s3.us-east-005.backblazeb2.com"
|
|
||||||
serverName: rancher-db
|
|
||||||
s3Credentials:
|
|
||||||
accessKeyId:
|
|
||||||
name: b2-credentials
|
|
||||||
key: B2_ACCOUNT_ID
|
|
||||||
secretAccessKey:
|
|
||||||
name: b2-credentials
|
|
||||||
key: B2_APPLICATION_KEY
|
|
||||||
|
|
||||||
monitoring:
|
|
||||||
enablePodMonitor: false
|
|
||||||
|
|
||||||
affinity:
|
|
||||||
nodeSelector:
|
|
||||||
kubernetes.io/hostname: k8s-cluster-cp-1
|
|
||||||
tolerations:
|
|
||||||
- key: node-role.kubernetes.io/control-plane
|
|
||||||
operator: Exists
|
|
||||||
effect: NoSchedule
|
|
||||||
|
|
||||||
backup:
|
|
||||||
barmanObjectStore:
|
|
||||||
destinationPath: "s3://HetznerTerra/rancher-backups/"
|
|
||||||
endpointURL: "https://s3.us-east-005.backblazeb2.com"
|
|
||||||
s3Credentials:
|
|
||||||
accessKeyId:
|
|
||||||
name: b2-credentials
|
|
||||||
key: B2_ACCOUNT_ID
|
|
||||||
secretAccessKey:
|
|
||||||
name: b2-credentials
|
|
||||||
key: B2_APPLICATION_KEY
|
|
||||||
wal:
|
|
||||||
compression: gzip
|
|
||||||
data:
|
|
||||||
compression: gzip
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
apiVersion: external-secrets.io/v1
|
|
||||||
kind: ExternalSecret
|
|
||||||
metadata:
|
|
||||||
name: rancher-db-password
|
|
||||||
namespace: cnpg-cluster
|
|
||||||
spec:
|
|
||||||
refreshInterval: 1h
|
|
||||||
secretStoreRef:
|
|
||||||
name: doppler-hetznerterra
|
|
||||||
kind: ClusterSecretStore
|
|
||||||
target:
|
|
||||||
name: rancher-db-password
|
|
||||||
creationPolicy: Owner
|
|
||||||
template:
|
|
||||||
type: Opaque
|
|
||||||
data:
|
|
||||||
password: "{{ .RANCHER_DB_PASSWORD }}"
|
|
||||||
data:
|
|
||||||
- secretKey: RANCHER_DB_PASSWORD
|
|
||||||
remoteRef:
|
|
||||||
key: RANCHER_DB_PASSWORD
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: Role
|
|
||||||
metadata:
|
|
||||||
name: rancher-db-b2-reader
|
|
||||||
namespace: cnpg-cluster
|
|
||||||
rules:
|
|
||||||
- apiGroups: [""]
|
|
||||||
resources: ["secrets"]
|
|
||||||
resourceNames: ["b2-credentials"]
|
|
||||||
verbs: ["get", "list"]
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: RoleBinding
|
|
||||||
metadata:
|
|
||||||
name: rancher-db-b2-reader
|
|
||||||
namespace: cnpg-cluster
|
|
||||||
subjects:
|
|
||||||
- kind: ServiceAccount
|
|
||||||
name: rancher-db
|
|
||||||
namespace: cnpg-cluster
|
|
||||||
roleRef:
|
|
||||||
kind: Role
|
|
||||||
name: rancher-db-b2-reader
|
|
||||||
apiGroup: rbac.authorization.k8s.io
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
apiVersion: postgresql.cnpg.io/v1
|
|
||||||
kind: ScheduledBackup
|
|
||||||
metadata:
|
|
||||||
name: rancher-db-weekly
|
|
||||||
namespace: cnpg-cluster
|
|
||||||
spec:
|
|
||||||
schedule: "0 0 2 * * 0"
|
|
||||||
backupOwnerReference: self
|
|
||||||
cluster:
|
|
||||||
name: rancher-db
|
|
||||||
target: primary
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
|
||||||
kind: Kustomization
|
|
||||||
metadata:
|
|
||||||
name: addon-cnpg-operator
|
|
||||||
namespace: flux-system
|
|
||||||
spec:
|
|
||||||
interval: 10m
|
|
||||||
prune: true
|
|
||||||
sourceRef:
|
|
||||||
kind: GitRepository
|
|
||||||
name: platform
|
|
||||||
path: ./infrastructure/addons/cnpg-operator
|
|
||||||
wait: true
|
|
||||||
timeout: 10m
|
|
||||||
suspend: false
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||||
kind: Kustomization
|
kind: Kustomization
|
||||||
metadata:
|
metadata:
|
||||||
name: addon-cnpg
|
name: addon-rancher-backup
|
||||||
namespace: flux-system
|
namespace: flux-system
|
||||||
spec:
|
spec:
|
||||||
interval: 10m
|
interval: 10m
|
||||||
@@ -9,15 +9,10 @@ spec:
|
|||||||
sourceRef:
|
sourceRef:
|
||||||
kind: GitRepository
|
kind: GitRepository
|
||||||
name: platform
|
name: platform
|
||||||
path: ./infrastructure/addons/cnpg
|
path: ./infrastructure/addons/rancher-backup
|
||||||
wait: true
|
wait: true
|
||||||
timeout: 10m
|
timeout: 10m
|
||||||
suspend: false
|
suspend: false
|
||||||
dependsOn:
|
dependsOn:
|
||||||
- name: addon-cnpg-operator
|
|
||||||
- name: addon-external-secrets
|
- name: addon-external-secrets
|
||||||
healthChecks:
|
- name: addon-rancher
|
||||||
- apiVersion: v1
|
|
||||||
kind: Secret
|
|
||||||
name: b2-credentials
|
|
||||||
namespace: cnpg-cluster
|
|
||||||
@@ -17,4 +17,3 @@ spec:
|
|||||||
- name: addon-tailscale-operator
|
- name: addon-tailscale-operator
|
||||||
- name: addon-tailscale-proxyclass
|
- name: addon-tailscale-proxyclass
|
||||||
- name: addon-external-secrets
|
- name: addon-external-secrets
|
||||||
- name: addon-cnpg
|
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ resources:
|
|||||||
- kustomization-flux-ui.yaml
|
- kustomization-flux-ui.yaml
|
||||||
- kustomization-observability.yaml
|
- kustomization-observability.yaml
|
||||||
- kustomization-observability-content.yaml
|
- kustomization-observability-content.yaml
|
||||||
- kustomization-cnpg-operator.yaml
|
|
||||||
- kustomization-cnpg.yaml
|
|
||||||
- kustomization-rancher.yaml
|
- kustomization-rancher.yaml
|
||||||
- kustomization-rancher-config.yaml
|
- kustomization-rancher-config.yaml
|
||||||
|
- kustomization-rancher-backup.yaml
|
||||||
|
|||||||
@@ -1,21 +1,21 @@
|
|||||||
apiVersion: external-secrets.io/v1
|
apiVersion: external-secrets.io/v1
|
||||||
kind: ExternalSecret
|
kind: ExternalSecret
|
||||||
metadata:
|
metadata:
|
||||||
name: b2-credentials
|
name: rancher-b2-creds
|
||||||
namespace: cnpg-cluster
|
namespace: cattle-resources-system
|
||||||
spec:
|
spec:
|
||||||
refreshInterval: 1h
|
refreshInterval: 1h
|
||||||
secretStoreRef:
|
secretStoreRef:
|
||||||
name: doppler-hetznerterra
|
name: doppler-hetznerterra
|
||||||
kind: ClusterSecretStore
|
kind: ClusterSecretStore
|
||||||
target:
|
target:
|
||||||
name: b2-credentials
|
name: rancher-b2-creds
|
||||||
creationPolicy: Owner
|
creationPolicy: Owner
|
||||||
template:
|
template:
|
||||||
type: Opaque
|
type: Opaque
|
||||||
data:
|
data:
|
||||||
B2_ACCOUNT_ID: "{{ .B2_ACCOUNT_ID }}"
|
aws_access_key_id: "{{ .B2_ACCOUNT_ID }}"
|
||||||
B2_APPLICATION_KEY: "{{ .B2_APPLICATION_KEY }}"
|
aws_secret_access_key: "{{ .B2_APPLICATION_KEY }}"
|
||||||
data:
|
data:
|
||||||
- secretKey: B2_ACCOUNT_ID
|
- secretKey: B2_ACCOUNT_ID
|
||||||
remoteRef:
|
remoteRef:
|
||||||
17
infrastructure/addons/rancher-backup/backup-recurring.yaml
Normal file
17
infrastructure/addons/rancher-backup/backup-recurring.yaml
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
apiVersion: resources.cattle.io/v1
|
||||||
|
kind: Backup
|
||||||
|
metadata:
|
||||||
|
name: rancher-b2-recurring
|
||||||
|
namespace: cattle-resources-system
|
||||||
|
spec:
|
||||||
|
resourceSetName: rancher-resource-set-full
|
||||||
|
storageLocation:
|
||||||
|
s3:
|
||||||
|
credentialSecretName: rancher-b2-creds
|
||||||
|
credentialSecretNamespace: cattle-resources-system
|
||||||
|
bucketName: HetznerTerra
|
||||||
|
folder: rancher-backups
|
||||||
|
endpoint: s3.us-east-005.backblazeb2.com
|
||||||
|
region: us-east-005
|
||||||
|
schedule: "0 3 * * *"
|
||||||
|
retentionCount: 7
|
||||||
@@ -1,18 +1,18 @@
|
|||||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||||
kind: HelmRelease
|
kind: HelmRelease
|
||||||
metadata:
|
metadata:
|
||||||
name: cnpg
|
name: rancher-backup
|
||||||
namespace: flux-system
|
namespace: flux-system
|
||||||
spec:
|
spec:
|
||||||
interval: 10m
|
interval: 10m
|
||||||
targetNamespace: cnpg-system
|
targetNamespace: cattle-resources-system
|
||||||
chart:
|
chart:
|
||||||
spec:
|
spec:
|
||||||
chart: cloudnative-pg
|
chart: rancher-backup
|
||||||
version: 0.27.1
|
version: "106.0.2+up8.1.0"
|
||||||
sourceRef:
|
sourceRef:
|
||||||
kind: HelmRepository
|
kind: HelmRepository
|
||||||
name: cnpg
|
name: rancher-charts
|
||||||
namespace: flux-system
|
namespace: flux-system
|
||||||
install:
|
install:
|
||||||
createNamespace: true
|
createNamespace: true
|
||||||
@@ -23,4 +23,6 @@ spec:
|
|||||||
retries: 3
|
retries: 3
|
||||||
values:
|
values:
|
||||||
image:
|
image:
|
||||||
repository: ghcr.io/cloudnative-pg/cloudnative-pg
|
repository: rancher/backup-restore-operator
|
||||||
|
s3:
|
||||||
|
enabled: true
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
apiVersion: source.toolkit.fluxcd.io/v1
|
apiVersion: source.toolkit.fluxcd.io/v1
|
||||||
kind: HelmRepository
|
kind: HelmRepository
|
||||||
metadata:
|
metadata:
|
||||||
name: cnpg
|
name: rancher-charts
|
||||||
namespace: flux-system
|
namespace: flux-system
|
||||||
spec:
|
spec:
|
||||||
interval: 1h
|
interval: 1h
|
||||||
url: https://cloudnative-pg.github.io/charts
|
url: https://charts.rancher.io
|
||||||
9
infrastructure/addons/rancher-backup/kustomization.yaml
Normal file
9
infrastructure/addons/rancher-backup/kustomization.yaml
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||||
|
kind: Kustomization
|
||||||
|
resources:
|
||||||
|
- namespace.yaml
|
||||||
|
- helmrepository-rancher-backup.yaml
|
||||||
|
- helmrelease-rancher-backup.yaml
|
||||||
|
- b2-credentials-externalsecret.yaml
|
||||||
|
- backup-recurring.yaml
|
||||||
|
- restore-from-b2.yaml
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: Namespace
|
kind: Namespace
|
||||||
metadata:
|
metadata:
|
||||||
name: cnpg-cluster
|
name: cattle-resources-system
|
||||||
19
infrastructure/addons/rancher-backup/restore-from-b2.yaml
Normal file
19
infrastructure/addons/rancher-backup/restore-from-b2.yaml
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
# Uncomment and set backupFilename to restore from a specific backup on rebuild.
|
||||||
|
# Find the latest backup filename in B2: rancher-backups/ folder.
|
||||||
|
# After restore succeeds, Rancher will have all users/settings from the backup.
|
||||||
|
#
|
||||||
|
# apiVersion: resources.cattle.io/v1
|
||||||
|
# kind: Restore
|
||||||
|
# metadata:
|
||||||
|
# name: restore-from-b2
|
||||||
|
# namespace: cattle-resources-system
|
||||||
|
# spec:
|
||||||
|
# backupFilename: <backup-filename-from-b2>
|
||||||
|
# storageLocation:
|
||||||
|
# s3:
|
||||||
|
# credentialSecretName: rancher-b2-creds
|
||||||
|
# credentialSecretNamespace: cattle-resources-system
|
||||||
|
# bucketName: HetznerTerra
|
||||||
|
# folder: rancher-backups
|
||||||
|
# endpoint: s3.us-east-005.backblazeb2.com
|
||||||
|
# region: us-east-005
|
||||||
@@ -26,19 +26,6 @@ spec:
|
|||||||
tls: external
|
tls: external
|
||||||
replicas: 1
|
replicas: 1
|
||||||
extraEnv:
|
extraEnv:
|
||||||
- name: CATTLE_DB_CATTLE_HOST
|
|
||||||
value: cnpg-cluster-rw.cnpg-cluster.svc
|
|
||||||
- name: CATTLE_DB_CATTLE_PORT
|
|
||||||
value: "5432"
|
|
||||||
- name: CATTLE_DB_CATTLE_DATABASE
|
|
||||||
value: postgres
|
|
||||||
- name: CATTLE_DB_CATTLE_USERNAME
|
|
||||||
value: postgres
|
|
||||||
- name: CATTLE_DB_CATTLE_PASSWORD
|
|
||||||
valueFrom:
|
|
||||||
secretKeyRef:
|
|
||||||
name: rancher-db-password
|
|
||||||
key: password
|
|
||||||
- name: CATTLE_PROMETHEUS_METRICS
|
- name: CATTLE_PROMETHEUS_METRICS
|
||||||
value: "true"
|
value: "true"
|
||||||
resources:
|
resources:
|
||||||
|
|||||||
@@ -6,5 +6,4 @@ resources:
|
|||||||
- helmrelease-rancher.yaml
|
- helmrelease-rancher.yaml
|
||||||
- rancher-bootstrap-password-flux-externalsecret.yaml
|
- rancher-bootstrap-password-flux-externalsecret.yaml
|
||||||
- rancher-bootstrap-password-externalsecret.yaml
|
- rancher-bootstrap-password-externalsecret.yaml
|
||||||
- rancher-db-password-externalsecret.yaml
|
|
||||||
- rancher-tailscale-service.yaml
|
- rancher-tailscale-service.yaml
|
||||||
|
|||||||
@@ -1,21 +0,0 @@
|
|||||||
apiVersion: external-secrets.io/v1
|
|
||||||
kind: ExternalSecret
|
|
||||||
metadata:
|
|
||||||
name: rancher-db-password
|
|
||||||
namespace: cattle-system
|
|
||||||
spec:
|
|
||||||
refreshInterval: 1h
|
|
||||||
secretStoreRef:
|
|
||||||
name: doppler-hetznerterra
|
|
||||||
kind: ClusterSecretStore
|
|
||||||
target:
|
|
||||||
name: rancher-db-password
|
|
||||||
creationPolicy: Owner
|
|
||||||
template:
|
|
||||||
type: Opaque
|
|
||||||
data:
|
|
||||||
password: "{{ .RANCHER_DB_PASSWORD }}"
|
|
||||||
data:
|
|
||||||
- secretKey: RANCHER_DB_PASSWORD
|
|
||||||
remoteRef:
|
|
||||||
key: RANCHER_DB_PASSWORD
|
|
||||||
Reference in New Issue
Block a user