Периодический c резервное копирование базы данных в kubernetes? - PullRequest
0 голосов
/ 29 марта 2020

Как настроить периодичность c резервного копирования базы данных в кубернетах? Я развернул базу данных postgres как StatefulSet в kubernetes и подключил PersistantVolume для хранения данных. Теперь, чтобы получить резервную копию periodi c для подключенного тома, я нашел три варианта:

  1. Установить CronJob в kubernetes, выполнить pg_dump и загрузить в хранилище.
  2. Я уже использовал сельдерей в своем проекте. Теперь добавьте новую задачу для резервного копирования postgres данных и загрузки в хранилище.
  3. VolumeSnapshots. Это выглядит более странно. Но я не мог найти способ автоматизировать это периодически.

Какой рекомендуемый способ делать периодическое резервное копирование тома c в kubernetes?

[ПРАВИТЬ] Я предпочитаю решения без использования операторов.

Ответы [ 2 ]

1 голос
/ 30 марта 2020

Каков рекомендуемый способ создания периодических 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 .

0 голосов
/ 29 марта 2020

Velero предлагает периодические c объемные снимки. Я бы, наверное, начал там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...