infra-backup-operator

Infra Backup Operator

Channel Revision Published Runs on
latest/edge 9 29 Aug 2025
Ubuntu 24.04
juju deploy infra-backup-operator --channel edge
Show information

Platform:

Ubuntu
24.04

Tutorial

This guide provides a step-by-step tutorial on how to deploy the charm and create a backup/restore.

Requirements

The following tutorial requires a Kubernetes Juju controller, such as Canonical K8s. A quick way of doing this is by using the concierge snap.

sudo snap install concierge --classic
sudo concierge prepare -v -p k8s

Deploy

juju add-model velero

# You can use the stable channel when available
juju deploy velero-operator --trust --config use-node-agent=true --channel=edge
juju deploy infra-backup-operator --channel=edge
juju deploy s3-integrator

Integrate

This tutorial uses the s3-integrator charm as the storage provider. Follow its documentation to set up the integrator with the AWS credentials.

If you want to test locally without creating a AWS s3 bucket, you can achieve this by using microceph and enabling rgw. Note that this is for testing proposes and should not be used for production sites:

# optional if you don't have a AWS s3 bucket
sudo snap install microceph
sudo microceph cluster bootstrap
sudo microceph disk add loop,1G,3
sudo microceph enable rgw --port 7480

sudo microceph.radosgw-admin user create --uid test --display-name test
# Save the access_key and secret_key

# Install the s3cmd
sudo apt install s3cmd

# Create a bucket
s3cmd --access_key=<ACCESS_KEY> \
--secret_key=<SECRET_KEY> \ 
--host=127.0.0.1:7480 \
--host-bucket="127.0.0.1:7480/%(bucket)" \
--no-ssl \
mb s3://my-bucket

# Set the S3-config
juju run s3-integrator/leader sync-s3-credentials access-key=<access_key> secret-key=<secret_key>

# <MICROCEPH_IP> from sudo microceph status
juju config s3-integrator bucket=my-bucket
juju config s3-integrator endpoint=http://<MICROCEPH_IP>:7480
juju config s3-integrator s3-uri-style=path
juju config s3-integrator region="my-region"

Once done, integrate it with Velero Operator:

juju integrate velero-operator s3-integrator
juju integrate infra-backup-operator:cluster-infra-backup velero-operator
juju integrate infra-backup-operator:namespaced-infra-backup velero-operator

After completing these steps you should be able to have a model like this:

Model                Controller     Cloud/Region  Version  SLA          Timestamp
velero              concierge-k8s  k8s           3.6.8    unsupported  16:36:14-03:00

App                    Version  Status  Scale  Charm                  Channel      Rev  Address         Exposed  Message
infra-backup-operator           active      1  infra-backup-operator                 0  10.152.183.162  no       Ready
s3-integrator                   active      1  s3-integrator          1/stable     145  10.152.183.28   no       
velero-operator                 active      1  velero-operator        latest/edge  297  10.152.183.75   no       Unit is Ready

Unit                      Workload  Agent  Address     Ports  Message
infra-backup-operator/0*  active    idle   10.1.0.20          Ready
s3-integrator/0*          active    idle   10.1.0.153         
velero-operator/0*        active    idle   10.1.0.247         Unit is Ready

Configure your K8s cluster

Create some resources that are under the infra-backup-operator influence. E.g:

kubectl create role pod-reader --verb=get,list --resource=pods
kubectl create clusterrole pod-reader --verb=get,list --resource=pods

Create the Backup

juju run velero-operator/0 create-backup target=infra-backup-operator:cluster-infra-backup

juju run velero-operator/0 create-backup target=infra-backup-operator:namespaced-infra-backup

Simulate a failure/outage

kubectl delete role pod-reader
kubectl delete clusterrole pod-reader

Restore

# list the backups


juju run velero-operator/0 list-backups

backups:
  83503892-a24a-409b-b0df-553dcc2465ec:
    app: infra-backup-operator
    completion-timestamp: "2025-08-08T20:00:28Z"
    endpoint: cluster-infra-backup
    model: test-charm-9f0e8dda
    name: infra-backup-operator-cluster-infra-backup-pblz2
    phase: Completed
    start-timestamp: "2025-08-08T20:00:26Z"
  85662948-8e5e-4922-8e1c-c5568eafa6e7:
    app: infra-backup-operator
    completion-timestamp: "2025-08-07T18:42:13Z"
    endpoint: cluster-infra-backup
    model: test-charm-9f0e8dda
    name: infra-backup-operator-cluster-infra-backup-4bm7p
    phase: Completed
    start-timestamp: "2025-08-07T18:42:10Z"

# restore the backups

juju run velero-operator/0 restore backup-uid=85662948-8e5e-4922-8e1c-c5568eafa6e7

juju run velero-operator/0 restore backup-uid=83503892-a24a-409b-b0df-553dcc2465ec

# check that the resources were backup
kubectl get role pod-reader
kubectl get clusterrole pod-reader