OADP е оператор за backup/restore на приложение в OpenShift. В основата си е пак Velero, но е интегриран в OpenShift.
За целта ще го използвам пак с Minio което имам в лабораторната среда. За демострация ще използвам проект nn-proba01. Както в предишната статия за Velero ще използвам файл с име credentials-velero със съдържание на потребител и парола за достъп до Minio.
Първа стъпка е да се инсталира оператора OADP. От списъкът си избирам този, който е сертифициран от Red Hat. Оставям всичко по-подразбиране. Той ще създаде нов namespace с гръмкото име openshift-adp
Стъпка две, създавам нов secret с име cloud-credentials във въпросният namespace, а съдържанието е гореспоменатият файл за достъп до Minio.
oc create secret generic cloud-credentials -n openshift-adp --from-file cloud=credentials-velero
Стъпка три, създаване на custom resource, който да е за DataProtectionApplications. В него се споменава URL до Minio, региона, bucket-a, и какви плъги да може да използва. Подробности в тяхната документация тук.
apiVersion: oadp.openshift.io/v1alpha1
kind: DataProtectionApplication
metadata:
name: velero-sample
namespace: openshift-adp
spec:
backupLocations:
- velero:
config:
insecureSkipTLSVerify: 'true'
profile: default
region: minio-teo
s3ForcePathStyle: 'true'
s3Url: 'http://minio.lab.local:9000'
credential:
key: cloud
name: cloud-credentials
default: true
objectStorage:
bucket: nn-proba01
prefix: velero
provider: aws
configuration:
restic:
enable: true
velero:
defaultPlugins:
- openshift
- aws
- kubevirt
- csi
snapshotLocations:
- velero:
config:
profile: default
region: minio-teo
provider: aws
oc create -f dataprotection.yaml
След няколко минутки ще се вдигне контейнер с velero, както и контейнер с restic. На кратко restic е инструмент за backup на PV, който е предоставен от storage, който не поддържа volume snapshots(например NFS или emptydir).
Туй то от към конфигурация, сега малко тестове. Както казах ще създам един проект nn-proba01, в него ще създам един контейнер с postgresql, който има PV 10Gi.
За да се сзъдаде backup или през web console или през oc се създава един CR за backup с такова кратко съдържание:
kind: Backup
apiVersion: velero.io/v1
metadata:
name: backup
namespace: openshift-adp
spec:
defaultVolumesToRestic: true
includedNamespaces:
- nn-proba01
Изтривам проекта, изчаквам да ми каже че е изтрит и няма никакъв ресурс и през oc му правя възсвановяване. Разбира за теста беше хубаво да се създаде например една таблица в контейнера за да се покаже, че данните са там. Та тук ще напиша как му вкарах малко данни
$ psql
psql (10.15)
Type "help" for help.
postgres=# CREATE DATABASE dbproba01;
CREATE DATABASE
postgres=# \connect dbproba01;
You are now connected to database "restore_me" as user "postgres".
postgres=# CREATE TABLE data (
id INT PRIMARY KEY,
text VARCHAR
);
postgres=# \dt
List of relations
Schema | Name | Type | Owner
--------+------------+-------+----------
public | data | table | postgres
(1 row)
postgres=# INSERT INTO data VALUES (1,'hello there');
INSERT 0 1
postgres=# SELECT * from data;
id | text
----+-------------
1 | hello there
(1 row)
За възстановяване използвам през velero следните параметъра.
velero restore create --from-backup=backup -n openshift-adp \
--include-namespaces nn-proba01 --exclude-resources replicationcontroller,deploymentconfig,templateinstances.template.openshift.io --restore-volumes=true
Като преди това съм се вписал, разбира се. Добавил съм параметрите за exclude на ресурси, защото контейнера е от шаблона на openshift. Другият вариант е с custome resource за restore, който има следният вид.
apiVersion: velero.io/v1
kind: Restore
metadata:
name: restore
namespace: openshift-adp
spec:
backupName: backup
excludedResources:
- nodes
- events
- events.events.k8s.io
- backups.velero.io
- restores.velero.io
- resticrepositories.velero.io
- replicationcontroller
- deploymentconfig
- templateinstances.template.openshift.io
includedNamespaces:
- nn-proba01
restorePVs: true
Бърза проверка в новопоявилият се контйнер дали базата е там и данните са там. Всичко е наред.