Back to Hub

cargo.ayedo.cloud/ayedo/k8s/cloudnative-pg

Registry block

polycrate block pull cargo.ayedo.cloud/ayedo/k8s/cloudnative-pg:1.8.1

CloudNativePG

Installiert das CloudNativePG helm-chart.

Changelog

Move to CHANGELOG.poly

actions

install

Installiert nur den Operator

project-name: &project-name my-cluster

blocks:
  - name: cloudnative-pg
    from: cargo.ayedo.cloud/ayedo/k8s/cloudnative-pg
    kubeconfig:
      from: k8s
    config:
      namespace: cloudnative-pg
      operator:
        enabled: true
        replicas: 1
      barman:
        enabled: true

Installiert ein Cluster

  - name: cloudnative-pg
    from: cargo.ayedo.cloud/ayedo/k8s/cloudnative-pg
    kubeconfig:
      from: k8s
    config:
      namespace: cloudnative-pg
      cluster:
        enabled: true
        resources: {}
          # requests:
          #   memory: "32Gi"
          #   cpu: "4"
          # limits:
          #   memory: "64Gi"
        monitoring:
          vmpodscrape:
            enabled: true
        instances: 3
        affinity:
          enablePodAntiAffinity: true #default value
          topologyKey: kubernetes.io/hostname #default value
          podAntiAffinityType: preferred #default value
        postgresql:
          parameters: {}
            # shared_buffers: 16GB
            # max_connections: "16000"
        initdb:
          database: application
          owner: app
        storage:
          size: 10Gi
          class: ""
        walstorage:
          size: 5Gi
          class: ""
        pooler:
          enabled: true
          instances: 3
        backup:
          enabled: true
          schedule:
            enabled: true
            cron: "0 0 */3 * * *" # Alle 3 Stunden
            # WICHTIG: Kein normaler UNIX-CRON-Syntax! (https://cloudnative-pg.io/documentation/1.22/backup/)
          s3:
            endpoint: https://s3.example.com
            bucket: "pgbackup"
            key: ""
            secret: ""

Backup nach Azure Blob Storage

Alternativ zu S3 können Backups in einen Azure Blob Storage Container geschrieben werden. Dazu backup.mode: azure setzen und den azure-Block befüllen. Der endpointURL (S3) wird in diesem Mode nicht gerendert.

connection_string.key muss die vollständige, fertige Azure Storage Connection String enthalten — sie wird unverändert in das Secret übernommen. Beide Varianten werden unterstützt:

  • AccountKey: DefaultEndpointsProtocol=https;AccountName=<acct>;AccountKey=<key>;EndpointSuffix=core.windows.net (Azure Portal → Storage Account → Security + networking → Access keys)
  • SAS: BlobEndpoint=https://<acct>.blob.core.windows.net;SharedAccessSignature=<sas-token>
        backup:
          enabled: true
          mode: azure
          schedule:
            enabled: true
            cron: "0 0 */3 * * *" # Alle 3 Stunden
          azure:
            # Vollständiges Ziel inkl. Container.
            destination_path: "https://<storage-account-name>.blob.core.windows.net/<container-name>"
            connection_string:
              name: ""  # nur Label, wird NICHT für die Authentifizierung verwendet
              # Vollständige Connection String (AccountKey- oder SAS-basiert)
              key: "DefaultEndpointsProtocol=https;AccountName=<acct>;AccountKey=<key>;EndpointSuffix=core.windows.net"

Startet ein neues Cluster im Recovery mode (lokale Backup CR)

Restore aus einer Backup-CR, die im selben Cluster existiert. Der LSN-Wert steht in den Backup-CRDs.

  • Der Name des Blocks darf nicht identisch sein mit dem Source-Cluster.
  • Der Namespace darf nicht geändert werden.
  - name: cloudnative-pg
    from: cargo.ayedo.cloud/ayedo/k8s/cloudnative-pg
    kubeconfig:
      from: k8s
    config:
      namespace: cloudnative-pg
      cluster:
        enabled: true
        resources: {}
          # requests:
          #   memory: "32Gi"
          #   cpu: "4"
          # limits:
          #   memory: "64Gi"
        monitoring:
          vmpodscrape:
            enabled: true
        instances: 3
        affinity:
          enablePodAntiAffinity: true #default value
          topologyKey: kubernetes.io/hostname #default value
          podAntiAffinityType: preferred #default value
        postgresql:
          parameters: {}
            # shared_buffers: 16GB
            # max_connections: "16000"
        # initdb stehen lassen, damit db name und owner für den Restore verwendet werden kann.
        initdb:
          database: application
          owner: app
        recovery:
          enabled: true
          mode: backup
          from:
            backup:
              crdname: "cloudnative-pg-20250313151500" # Name der Backup CRD
              secretname: "cloudnative-pg-app" # Secret von vorherigem Cluster verwenden.
          pitr:
            enabled: true
            #time: "2025-03-13 15:25:48.00000+02" # Alternativ kann ein Timestamp verwendet werden. Zeitzone beachten!
            lsn: "8A/3AE06F20" # LSN aus Backup CRD `status.endLSN`
        storage:
          size: 10Gi
          class: ""
        walstorage:
          size: 5Gi
          class: ""
        pooler:
          enabled: true
          instances: 3
        backup:
          enabled: true
          schedule:
            enabled: true
            cron: "0 0 */3 * * *" # Alle 3 Stunden
            # WICHTIG: Kein normaler UNIX-CRON-Syntax! (https://cloudnative-pg.io/documentation/1.22/backup/)
          s3:
            endpoint: https://s3.example.com
            bucket: "pgbackup"
            key: ""
            secret: ""

Startet ein neues Cluster im Recovery mode (Cross-Cluster / Object Store)

Restore direkt aus dem Barman Object Store, ohne dass eine lokale Backup-CR im Ziel-Cluster existieren muss. Wird verwendet, wenn das Backup aus einem anderen Cluster stammt.

Die Backup-Konfiguration (backup.s3 / backup.azure) liefert automatisch Endpoint, Bucket und Credentials für den Restore — keine separate Recovery-Config nötig. CNPG wählt das neueste verfügbare Backup. Über pitr.time kann ein konkreter Zeitpunkt gezielt werden.

  - name: cloudnative-pg
    from: cargo.ayedo.cloud/ayedo/k8s/cloudnative-pg
    kubeconfig:
      from: k8s
    config:
      namespace: cloudnative-pg
      cluster:
        enabled: true
        instances: 3
        postgresql:
          parameters: {}
        storage:
          size: 10Gi
          class: ""
        walstorage:
          size: 5Gi
          class: ""
        recovery:
          enabled: true
          mode: object_store
          from:
            object_store:
              servername: old-block-name # which should be the ClusterCR name already
          pitr:
            enabled: false
            # time: "2026-06-30 10:00:00+02"  # optional: restore bis zu diesem Zeitpunkt
        backup:
          enabled: true
          mode: s3
          schedule:
            enabled: true
            cron: "0 0 */3 * * *"
          s3:
            endpoint: https://s3.example.com
            bucket: "pgbackup"  # muss denselben Bucket wie der Source-Cluster verwenden
            key: ""
            secret: ""

uninstall

Deinstalliert cloudnative-pg vom Cluster.

polycrate run cloudnative-pg uninstall