Skip to content

Bootstrap from the backup and set backup in same time #683

@adns44

Description

@adns44

Hi!

I started using the CNPG Barman Cloud Plugin and I faced an issue related to bootstrap a cluster from backup and immediately set the backup to same place.

I have a working CNPG database that is extended with back up to S3.

---
apiVersion: barmancloud.cnpg.io/v1
kind: ObjectStore
metadata:
  name: garage-store
  namespace: harbor
spec:
  configuration:
    destinationPath: s3://cluster-services-cnpg/harbor/pg-harbor
    endpointURL: http://172.31.255.255:3900
    s3Credentials:
      accessKeyId:
        name: cnpg-s3-credentials
        key: key_id
      secretAccessKey:
        name: cnpg-s3-credentials
        key: secret_key
      region:
        name: cnpg-s3-credentials
        key: region
    data:
      compression: "bzip2"
      jobs: 5
    wal:
      compression: bzip2
  retentionPolicy: "2d"
---
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
  name: pg-harbor
  namespace: harbor
spec:
  instances: 3
  bootstrap:
    initdb:
      database: harbor
      owner: harbor
      secret:
        name: pg-harbor-creds
  storage:
    storageClass: database
    size: 5Gi
  plugins:
  - name: barman-cloud.cloudnative-pg.io
    isWALArchiver: true
    parameters:
      barmanObjectName: garage-store

Works well. After bootstrap DB starts and making the backups when shceduled

---
apiVersion: postgresql.cnpg.io/v1
kind: ScheduledBackup
metadata:
  name: backup-pg
  namespace: harbor
spec:
  schedule: "0 0 */3 * * *"
  backupOwnerReference: self
  cluster:
    name: pg-harbor
  method: plugin
  pluginConfiguration:
    name: barman-cloud.cloudnative-pg.io

My problem occurs when I bootstrap the cluster from the backup. As I have previous backup, I'd like to bootstram the cluster from this and continue operation, continue backups to the same location. My previous manifest modified a little.

---
apiVersion: barmancloud.cnpg.io/v1
kind: ObjectStore
metadata:
  name: garage-store
  namespace: harbor
spec:
  configuration:
    destinationPath: s3://cluster-services-cnpg/harbor/pg-harbor
    endpointURL: http://172.31.255.255:3900
    s3Credentials:
      accessKeyId:
        name: cnpg-s3-credentials
        key: key_id
      secretAccessKey:
        name: cnpg-s3-credentials
        key: secret_key
      region:
        name: cnpg-s3-credentials
        key: region
    data:
      compression: "bzip2"
      jobs: 5
    wal:
      compression: bzip2
  retentionPolicy: "2d"
---
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
  name: pg-harbor
  namespace: harbor
spec:
  instances: 3
  bootstrap:
    recovery:
      source: source
  externalClusters:
  - name: source
    plugin:
      name: barman-cloud.cloudnative-pg.io
      parameters:
        barmanObjectName: garage-store
        serverName: pg-harbor
  storage:
    storageClass: database
    size: 5Gi
  plugins:
  - name: barman-cloud.cloudnative-pg.io
    isWALArchiver: true
    parameters:
      barmanObjectName: garage-store

When I check the pod status I got this:

☸ admin@services (harbor) k get pod --watch pg-harbor-1-full-recovery-jkhd7
NAME                              READY   STATUS     RESTARTS   AGE
pg-harbor-1-full-recovery-jkhd7   0/2     Init:0/2   0          4s
pg-harbor-1-full-recovery-jkhd7   0/2     Init:1/2   0          14s
pg-harbor-1-full-recovery-jkhd7   0/2     Init:1/2   0          15s
pg-harbor-1-full-recovery-jkhd7   0/2     PodInitializing   0          24s
pg-harbor-1-full-recovery-jkhd7   1/2     PodInitializing   0          24s
pg-harbor-1-full-recovery-jkhd7   2/2     Running           0          25s
pg-harbor-1-full-recovery-jkhd7   1/2     Error             0          26s
pg-harbor-1-full-recovery-jkhd7   0/2     Error             0          27s
pg-harbor-1-full-recovery-jkhd7   0/2     Error             0          29s
pg-harbor-1-full-recovery-jkhd7   0/2     Error             0          30s
^C
➜ took 29s ☸ admin@services (harbor)

And when I inspect the logs

☸ admin@services (harbor) k logs pg-harbor-1-full-recovery-jkhd7
Defaulted container "full-recovery" out of: full-recovery, bootstrap-controller (init), plugin-barman-cloud (init)
{"level":"info","ts":"2025-12-21T13:58:47.851283563Z","msg":"Starting webserver","logging_pod":"pg-harbor-1-full-recovery","address":"localhost:8010","hasTLS":false}
{"level":"info","ts":"2025-12-21T13:58:47.952621901Z","msg":"Restore through plugin detected, proceeding...","logging_pod":"pg-harbor-1-full-recovery"}
{"level":"error","ts":"2025-12-21T13:58:49.333358679Z","msg":"Error while restoring a backup","logging_pod":"pg-harbor-1-full-recovery","error":"rpc error: code = Unknown desc = unexpected failure invoking barman-cloud-wal-archive: exit status 1","stacktrace":"github.com/cloudnative-pg/machinery/pkg/log.(*logger).Error\n\tpkg/mod/github.com/cloudnative-pg/[email protected]/pkg/log/log.go:125\ngithub.com/cloudnative-pg/cloudnative-pg/internal/cmd/manager/instance/restore.restoreSubCommand\n\tinternal/cmd/manager/instance/restore/restore.go:79\ngithub.com/cloudnative-pg/cloudnative-pg/internal/cmd/manager/instance/restore.(*restoreRunnable).Start\n\tinternal/cmd/manager/instance/restore/restore.go:62\nsigs.k8s.io/controller-runtime/pkg/manager.(*runnableGroup).reconcile.func1\n\tpkg/mod/sigs.k8s.io/[email protected]/pkg/manager/runnable_group.go:260"}
{"level":"info","ts":"2025-12-21T13:58:49.333465791Z","msg":"Stopping and waiting for non leader election runnables"}
{"level":"info","ts":"2025-12-21T13:58:49.333486512Z","msg":"Stopping and waiting for leader election runnables"}
{"level":"info","ts":"2025-12-21T13:58:49.333500334Z","msg":"Stopping and waiting for warmup runnables"}
{"level":"info","ts":"2025-12-21T13:58:49.333550259Z","msg":"Webserver exited","logging_pod":"pg-harbor-1-full-recovery","address":"localhost:8010"}
{"level":"info","ts":"2025-12-21T13:58:49.333564299Z","msg":"Stopping and waiting for caches"}
{"level":"info","ts":"2025-12-21T13:58:49.333623698Z","msg":"Stopping and waiting for webhooks"}
{"level":"info","ts":"2025-12-21T13:58:49.333658061Z","msg":"Stopping and waiting for HTTP servers"}
{"level":"info","ts":"2025-12-21T13:58:49.333687895Z","msg":"Wait completed, proceeding to shutdown the manager"}
{"level":"error","ts":"2025-12-21T13:58:49.333710044Z","msg":"restore error","logging_pod":"pg-harbor-1-full-recovery","error":"while restoring cluster: rpc error: code = Unknown desc = unexpected failure invoking barman-cloud-wal-archive: exit status 1","stacktrace":"github.com/cloudnative-pg/machinery/pkg/log.(*logger).Error\n\tpkg/mod/github.com/cloudnative-pg/[email protected]/pkg/log/log.go:125\ngithub.com/cloudnative-pg/cloudnative-pg/internal/cmd/manager/instance/restore.NewCmd.func1\n\tinternal/cmd/manager/instance/restore/cmd.go:101\ngithub.com/spf13/cobra.(*Command).execute\n\tpkg/mod/github.com/spf13/[email protected]/command.go:1015\ngithub.com/spf13/cobra.(*Command).ExecuteC\n\tpkg/mod/github.com/spf13/[email protected]/command.go:1148\ngithub.com/spf13/cobra.(*Command).Execute\n\tpkg/mod/github.com/spf13/[email protected]/command.go:1071\nmain.main\n\tcmd/manager/main.go:71\nruntime.main\n\t/opt/hostedtoolcache/go/1.25.3/x64/src/runtime/proc.go:285"}

 ☸ admin@services (harbor)

If I remove the plugin from the spec field and bootstrap only from the backup and edit it later it works well.

I'd like to ask is this possible to bootstrap from the backup and immediately continue the work? I need this to use with FluxCD GitOps so if it work manual work will not be needed in case of a reinstall or any issue.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingquestionFurther information is requested

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions