Skip to content

Commit 9ba5af5

Browse files
committed
doc: Add documentation for backup feature
The DevWorkspaceOperatorConfig was extended to enable the workspace backup process. This commits describes the feature and how to configure it. Signed-off-by: Ales Raszka <araszka@redhat.com>
1 parent bcbaf1a commit 9ba5af5

File tree

1 file changed

+92
-0
lines changed

1 file changed

+92
-0
lines changed

docs/dwo-configuration.md

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,98 @@ Cleanup CronJob configuration fields:
107107
- **`retainTime`**: The duration time in seconds since a DevWorkspace was last started before it is considered stale and eligible for cleanup. Default: 2592000 seconds (30 days).
108108
- **`dryRun`**: Set to `true` to run the cleanup job in dry-run mode. In this mode, the job logs which DevWorkspaces would be removed but does not actually delete them. Set to `false` to perform the actual deletion. Default: `false`.
109109

110+
## Configuring Backup CronJob
111+
112+
The DevWorkspace backup job allows for periodic backups of DevWorkspace data to a specified backup location.
113+
Once enabled and configured, the backup job will run at defined intervals to create backups of DevWorkspace data.
114+
The backup controller depends on OCI compatible registry that is used as an artifact storage for backup archives.
115+
116+
The backup makes a snapshoft of Workspace PVCs and stores them as tar.gz archives in the specified OCI registry.
117+
**Note:** By default, the DevWorkspace backup job is disabled.
118+
119+
120+
Backup CronJob configuration fields:
121+
122+
- **`enable`**: Set to `true` to enable the backup job, `false` to disable it. Default: `false`.
123+
- **`schedule`**: A Cron expression defining how often the backup job runs. Default: `"0 1 * * *"`.
124+
- **`registry.path`**: A registry location where the backup archives will be pushed. The full path is given by `<registry.path>/<devworkspace-name>:latest`.
125+
- **`registry.authSecret`**: (Optional) The name of the Kubernetes Secret containing credentials to access the OCI registry. If not provided, it is assumed that the registry is public or uses integrated OpenShift registry.
126+
- **`oras.extraArgs`**: (Optional) Additional arguments to pass to the `oras` CLI tool during push and pull operations.
127+
128+
129+
There are several configuration options to customize the logic:
130+
131+
### Integrated OpenShift container registry
132+
This option is available only on OpenShift clusters with integrated container registry enabled and requires no additional configuration.
133+
134+
To enable the backup use following configuration in the global DWOC:
135+
136+
```yaml
137+
apiVersion: controller.devfile.io/v1alpha1
138+
kind: DevWorkspaceOperatorConfig
139+
config:
140+
routing:
141+
defaultRoutingClass: basic
142+
workspace:
143+
backupCronJob:
144+
enable: true
145+
registry:
146+
path: default-route-openshift-image-registry.apps.{cluster ID}.openshiftapps.com
147+
schedule: '0 */4 * * *' # cron expression with backup frequency
148+
imagePullPolicy: Always
149+
```
150+
151+
**Note:** The `path` field must contain the URL to your OpenShift integrated registry given by the cluster.
152+
153+
Once the backup job is finished the backup archives will be available in the DevWorkspace namespace under a repository
154+
with matching Devworkspace name.
155+
156+
### Regular OCI compatible registry
157+
To use a regular OCI compatible registry for backups, you need to provide registry credentials. Depending on your
158+
RBAC policy the token can be provided via a secret in the operator namespace or in each DevWorkspace namespace.
159+
Having the secret in the DevWorkspace namespace allows for using different registry accounts per namespace with more
160+
granular access controll.
161+
162+
163+
```yaml
164+
kind: DevWorkspaceOperatorConfig
165+
apiVersion: controller.devfile.io/v1alpha1
166+
config:
167+
routing:
168+
defaultRoutingClass: basic
169+
workspace:
170+
backupCronJob:
171+
enable: true
172+
registry:
173+
authSecret: my-secret
174+
path: quay.io/my-company-org
175+
schedule: '0 */4 * * *'
176+
imagePullPolicy: Always
177+
```
178+
The `authSecret` must point to real Kubernetes Secret of type `kubernetes.io/dockerconfigjson` containing credentials to access the registry.
179+
180+
To create one you can use following command:
181+
182+
```bash
183+
kubectl create secret docker-registry my-secret --from-file=config.json -n devworkspace-controller
184+
```
185+
The secret must contain a label `controller.devfile.io/watch-secret=true` to be recognized by the DevWorkspace Operator.
186+
```bash
187+
kubectl label secret my-secret controller.devfile.io/watch-secret=true -n devworkspace-controller
188+
```
189+
190+
### Restore from backup
191+
We are aiming to provide automated restore functionality in future releases. But for now you can still
192+
manually restore the data from the backup archives created by the backup job.
193+
194+
Since the backup archive is available in OCI registry you can use any OCI compatible tool to pull
195+
the archive locally. For example using [oras](https://github.com/oras-project/oras) cli tool:
196+
197+
```bash
198+
oras pull <registry-path>/<devworkspace-name>:latest
199+
```
200+
The archive will be downloaded as a `devworkspace-backup.tar.gz` file which you can extract and restore the data.
201+
110202
## Configuring PVC storage access mode
111203

112204
By default, PVCs managed by the DevWorkspace Operator are created with the `ReadWriteOnce` access mode.

0 commit comments

Comments
 (0)