Commit a132be5
K8SPSMDB-1219: PBM multi storage support (#1843)
* K8SPSMDB-1219: PBM multi storage support
Operator always supported multiple storages but didn't have native
support for having multiple backup storages until v2.6.0. In operator we
were reconfiguring PBM every time user selects a storage for their
backups/restores different than the previous storage. This was causing
long wait periods esp. in storages with lots of backups due to resync
operation.
Another limitation was forcing users to have only 1 backup storage if
they want to enable point-in-time-recovery. In case of multiple
storages, PBM would upload oplog chunks to whatever storage is last used
by a backup/restore and this would make consistent recovery impossible.
PBM v2.6.0 added native support for multiple storages and these changes
introduce it to our operator:
* User can have one main storage in PBM configuration. Any other
storages can be added as profiles.
Main storage can be found in:
```
kubectl exec cluster1-rs0-0 -c backup-agent -- pbm config
```
This commit introduces a new field `main` in storage spec:
```
storages:
s3-us-west:
main: true
type: s3
s3:
bucket: operator-testing
credentialsSecret: cluster1-s3-secrets
region: us-west-2
````
If user only has 1 storage configured in `cr.yaml`, operator will
automatically use it as main storage. If more than 1 storage is
configured, one of them must have `main: true`. User can't have more
than 1 storage with `main: true`.
If user changes main storage in cr.yaml, operator will configure PBM
with the new storage and start resync.
Any other storage in `cr.yaml` will be added to PBM as a profile.
User can see profiles using cli:
```
kubectl exec cluster1-rs0-0 -c backup-agent -- pbm profile list
```
When user adds a new profile to `cr.yaml`, operator will add it to PBM
but won't start resync.
**`pbm config --force-resync` only start resync for the main storage.**
To manually resync a profile:
```
kubectl exec cluster1-rs0-0 -c backup-agent -- pbm profile sync <storage-name>
```
If user starts a restore using a backup in a storage configured as
profile, operator will start resync operation for profile and block
restore until resync finishes.
Note: Profiles are also called external storages in PBM documentation.
If user has multiple storages in `cr.yaml` and changes main storage
between them, operator:
1. configures PBM with the new main storage.
2. adds the old main as a profile.
2. deletes profile for the new main storage.
If user configures `backupSource` in backups/restores:
* if `cr.yaml` has no storages configured, operator configures PBM with
storage data in `backupSource` field. This storage will effectively be
the main storage until user adds a storage to `cr.yaml`. After a
storage is configured PBM configuration will be overwritten and
`backupSource` storage will be gone.
* if `cr.yaml` has a storage configured, operator adds `backupSource`
storage as a profile.
* Oplog chunks will be only be uploaded to main storage.
User can use any backup as base backup for point-in-time-recovery.
* Incremental backup chains all need to be stored in the same storage.
TBD after #1836 merged.
---
Other significant changes in operator behavior:
* Operator now configures automatically configures PBM on a fresh
cluster.
Before this changes, PBM was not configured until user starts a
backup/restore after deploying a fresh cluster. Now, PBM will directly
configured with main storage in `cr.yaml` and resync will be started
in the background.
There's a new field in `PerconaServerMongoDB` status:
`backupConfigHash`. Operator will maintain hash of the current PBM
configuration and reconfigures PBM if hash is changed. Fields in
`spec.backup.pitr` are excluded from hash calculation, they're handled
separately.
* If `PerconaServerMongoDB` is annotated with `percona.com/resync-pbm=true`,
operator will start resync operation both for main storage and
profiles. Resync for profiles are started with the equivalent of `pbm
profile sync --all`. These resync operations will be run in the
background and will not block the reconciliation.
* If a backup that has `percona.com/delete-backup` finalizer is deleted,
operator will only delete oplogs chunks if it's in main storage.
* fix users
* fix repeatedly sending backup commands
* fix users
* address review comments
* assert err in main storage unit test
* don't use break labels
---------
Co-authored-by: Viacheslav Sarzhan <slava.sarzhan@percona.com>1 parent 72bf015 commit a132be5
File tree
48 files changed
+1779
-588
lines changed- build
- cmd/manager
- config/crd/bases
- deploy
- e2e-tests
- custom-replset-name/conf
- custom-users-roles-sharded/conf
- custom-users-roles/conf
- data-at-rest-encryption/conf
- demand-backup-physical-sharded/conf
- demand-backup-physical/conf
- demand-backup-sharded/conf
- demand-backup/conf
- expose-sharded/conf
- mongod-major-upgrade
- multi-storage
- compare
- conf
- scheduled-backup/conf
- users/conf
- version-service/conf
- pkg
- apis/psmdb/v1
- controller
- perconaservermongodbbackup
- perconaservermongodbrestore
- perconaservermongodb
- naming
- psmdb/backup
- fake
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
48 files changed
+1779
-588
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
| 10 | + | |
10 | 11 | | |
11 | 12 | | |
12 | 13 | | |
| |||
16 | 17 | | |
17 | 18 | | |
18 | 19 | | |
19 | | - | |
| 20 | + | |
20 | 21 | | |
21 | 22 | | |
22 | 23 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
35 | 35 | | |
36 | 36 | | |
37 | 37 | | |
| 38 | + | |
38 | 39 | | |
39 | 40 | | |
40 | 41 | | |
| |||
69 | 70 | | |
70 | 71 | | |
71 | 72 | | |
72 | | - | |
| 73 | + | |
73 | 74 | | |
74 | 75 | | |
75 | 76 | | |
| |||
Lines changed: 4 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
321 | 321 | | |
322 | 322 | | |
323 | 323 | | |
| 324 | + | |
| 325 | + | |
324 | 326 | | |
325 | 327 | | |
326 | 328 | | |
| |||
18790 | 18792 | | |
18791 | 18793 | | |
18792 | 18794 | | |
| 18795 | + | |
| 18796 | + | |
18793 | 18797 | | |
18794 | 18798 | | |
18795 | 18799 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1017 | 1017 | | |
1018 | 1018 | | |
1019 | 1019 | | |
| 1020 | + | |
| 1021 | + | |
1020 | 1022 | | |
1021 | 1023 | | |
1022 | 1024 | | |
| |||
19486 | 19488 | | |
19487 | 19489 | | |
19488 | 19490 | | |
| 19491 | + | |
| 19492 | + | |
19489 | 19493 | | |
19490 | 19494 | | |
19491 | 19495 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1017 | 1017 | | |
1018 | 1018 | | |
1019 | 1019 | | |
| 1020 | + | |
| 1021 | + | |
1020 | 1022 | | |
1021 | 1023 | | |
1022 | 1024 | | |
| |||
19486 | 19488 | | |
19487 | 19489 | | |
19488 | 19490 | | |
| 19491 | + | |
| 19492 | + | |
19489 | 19493 | | |
19490 | 19494 | | |
19491 | 19495 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1017 | 1017 | | |
1018 | 1018 | | |
1019 | 1019 | | |
| 1020 | + | |
| 1021 | + | |
1020 | 1022 | | |
1021 | 1023 | | |
1022 | 1024 | | |
| |||
19486 | 19488 | | |
19487 | 19489 | | |
19488 | 19490 | | |
| 19491 | + | |
| 19492 | + | |
19489 | 19493 | | |
19490 | 19494 | | |
19491 | 19495 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
| 15 | + | |
15 | 16 | | |
16 | 17 | | |
17 | 18 | | |
| |||
Lines changed: 1 addition & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
63 | 63 | | |
64 | 64 | | |
65 | 65 | | |
| 66 | + | |
66 | 67 | | |
67 | 68 | | |
68 | 69 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
63 | 63 | | |
64 | 64 | | |
65 | 65 | | |
| 66 | + | |
66 | 67 | | |
67 | 68 | | |
68 | 69 | | |
| |||
Lines changed: 2 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
| 15 | + | |
15 | 16 | | |
16 | 17 | | |
17 | 18 | | |
| |||
82 | 83 | | |
83 | 84 | | |
84 | 85 | | |
85 | | - | |
| 86 | + | |
0 commit comments