Каков рекомендуемый способ создания периодических c резервных копий томов в кубернетах?
Я бы порекомендовал VolumeSnapshots , но вам следует помнить, что это не обычное резервное копирование, и вы не сможете вернуть данные в предыдущее состояние.
Многие системы хранения (такие как Google Cloud Persistent Disks, Amazon Elasti c Block Storage и многие локальные системы хранения) предоставляют возможность создания «моментального снимка» постоянного тома. Снимок представляет собой копию тома на определенный момент времени. Снимок можно использовать либо для предоставления нового тома (предварительно заполненного данными моментального снимка), либо для восстановления существующего тома в предыдущее состояние (представленное снимком).
Это просто в использовании по состоянию на декабрь 2019 года он был переведен в бета-версию Kubernetes 1.17. Функция: моментальный снимок тома Kubernetes перемещается в бета-версию .
После указания VolumeSnapshotClass
. следующий VolumeSnapshotClass, например, сообщает кластеру Kubernetes, что драйвер CSI, testdriver.csi.k8s.io
, может обрабатывать моментальные снимки томов и что при создании этих моментальных снимков их политика удаления должна состоять в удалении.
apiVersion: snapshot.storage.k8s.io/v1beta1
kind: VolumeSnapshotClass
metadata:
name: test-snapclass
driver: testdriver.csi.k8s.io
deletionPolicy: Delete
parameters:
csi.storage.k8s.io/snapshotter-secret-name: mysecret
csi.storage.k8s.io/snapshotter-secret-namespace: mysecretnamespace
. контроллер общего снимка резервирует ключи параметров csi.storage.k8s.io/snapshotter-secret-name
и csi.storage.k8s.io/snapshotter-secret-namespace
. Если этот параметр указан, он извлекает указанный секрет Kubernetes и устанавливает его в качестве аннотации для объекта содержимого моментального снимка тома. Дополнительный модуль CSI external-snapshotter извлекает его из аннотации содержимого и передает его драйверу CSI во время создания моментального снимка.
Создание моментального снимка тома инициируется созданием объекта API VolumeSnapshot.
Объект VolumeSnapshot должен указывать следующий тип источника: persistentVolumeClaimName
- Имя PV C для моментального снимка. Обратите внимание, что исходные PV C, PV и VolumeSnapshotClass для объекта VolumeSnapshot должны указывать на один и тот же драйвер CSI.
Вы можете создать VolumeSnapshot
, который в этом примере сделает снимок s PV C с именем test-pvc
:
apiVersion: snapshot.storage.k8s.io/v1beta1
kind: VolumeSnapshot
metadata:
name: test-snapshot
spec:
volumeSnapshotClassName: test-snapclass
source:
persistentVolumeClaimName: test-pvc
Когда вызывается создание моментального снимка тома, общий контроллер моментальных снимков сначала создает объект VolumeSnapshotContent с volumeSnapshotRef
, source volumeHandle
, volumeSnapshotClassName
если указано, driver
и deletionPolicy
.
Вы можете восстановить PersistentVolumeClaim из моментального снимка тома:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: restore-pvc
spec:
storageClassName: csi-hostpath-sc
dataSource:
name: test-snapshot
kind: VolumeSnapshot
apiGroup: snapshot.storage.k8s.io
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
Чтобы включить поддержку восстановления тома из источника данных моментального снимка тома включите функциональный шлюз VolumeSnapshotDataSource
на apiserver и controller-manager.
Каковы ограничения?
- Не поддержка возврата существующего тома в более раннее состояние, представленное моментальным снимком (бета-версия поддерживает предоставление нового тома только из моментального снимка).
- Никаких гарантий согласованности снимка за исключением каких-либо гарантии, предоставляемые системой хранения (например, последовательность sh). Это ответственность высокоуровневых API / контроллеров
РЕДАКТИРОВАТЬ:
Для автоматизации этого процесса вам необходимо установить CronJob
или написать код Python используя Python клиентскую библиотеку для kubernetes и измените, например, python / examples / custom_object.py для своих нужд.
Вы также можете использовать уже разработанные приложения, такие как STA sh .run .