VK Cloud logo
Обновлена 15 апреля 2024 г. в 08:50

Резервное копирование с помощью Velero

С помощью Velero можно создавать резервные копии данных кластера и восстанавливать их.

Подготовительные шаги

  1. Создайте кластер Kubernetes самой актуальной версии.

    Разместите в зоне доступности GZ1 одну или несколько групп worker-узлов.

    Остальные параметры кластера выберите на свое усмотрение.

  2. Убедитесь, что вы можете подключиться к кластеру с помощью kubectl.

  3. Убедитесь, что Velero установлен и настроен.

  4. Установите OpenStack CLI, если он еще не установлен. Убедитесь, что вы можете авторизоваться в облаке с его помощью.

1. Создайте приложение

Чтобы познакомиться с созданием резервной копии и восстановлением из нее, создайте демо-приложение coffee. К этому приложению будет подключен постоянный том (persistent volume).

  1. Создайте файл манифеста:

  2. Создайте нужные ресурсы Kubernetes на основе манифеста:

    kubectl apply -f coffee.yaml

    Все необходимые для работы приложения ресурсы Kubernetes будут помещены в отдельное пространство имен (namespace) example-app.

  3. Убедитесь, что создан диск для постоянного тома:

    1. Найдите созданный для приложения постоянный том:

      kubectl get pv -n example-app

      В выведенной таблице найдите идентификатор постоянного тома, для которого в столбце CLAIM указано example-app/coffee-pvc:

      NAME                                       ...   STATUS   CLAIM                    ......                                        ...   ...      ...                      ...<идентификатор постоянного тома>           ...   Bound    example-app/coffee-pvc   ...
    2. Получите идентификатор диска для созданного постоянного тома:

      kubectl describe pv <идентификатор постоянного тома> -n example-app

      В выводе команды будет содержаться идентификатор диска в параметре VolumeHandle:

      ...Source:    Type:              CSI (a Container Storage Interface (CSI) volume source)    Driver:            cinder.csi.openstack.org    FSType:            ...    VolumeHandle:      <идентификатор диска>    ...
    3. Получите подробную информацию о диске с таким идентификатором, используя OpenStack CLI:

      openstack volume show <идентификатор диска> --fit-width
  4. Дождитесь назначения балансировщику нагрузки публичного IP-адреса.

    Периодически проверяйте статус балансировщика:

    kubectl get svc -n example-app

    В столбце EXTERNAL-IP должен появиться публичный IP-адрес, назначенный балансировщику.

  5. Убедитесь, что NGINX отвечает на запросы:

    curl <публичный IP-адрес, назначенный балансировщику>

    Должно быть выведено следующее:

    The coffee pod says Hello World to everyone! This file is located on the dynamically claimed Cinder ReadWriteOnce persistent volume.

2. Создайте резервную копию приложения

  1. Создайте ручную резервную копию всего пространства имен example-app, в котором находятся нужные для работы приложения ресурсы:

    velero backup create coffee-backup --include-namespaces example-app
  2. Загрузите детальную информацию о резервной копии:

    velero backup describe coffee-backup
  3. Посмотрите логи операции резервного копирования (при необходимости):

    velero backup logs coffee-backup

Также возможно выполнять создание резервный копий автоматически по расписанию. Подробнее о резервном копировании по расписанию в справке Velero:

velero help

3. Восстановите приложение из резервной копии

  1. Имитируйте отказ приложения. Для этого удалите пространство имен example-app, в котором находятся ресурсы, необходимые для работы приложения:

    kubectl delete ns example-app
  2. Выполните восстановление из резервной копии, которая была создана ранее:

    velero restore create --from-backup coffee-backup

    Команда восстановит данные в тот же кластер, в котором было выполнено резервное копирование. Если нужно восстановить данные в новый кластер:

    1. Создайте кластер.
    2. Установите Velero в кластер.
    3. Выполните приведенную выше команду.
  3. Дождитесь назначения балансировщику нагрузки публичного IP-адреса.

    Периодически проверяйте статус балансировщика:

    kubectl get svc -n example-app

    В столбце EXTERNAL-IP должен появиться публичный IP-адрес, назначенный балансировщику.

  4. Убедитесь, что NGINX отвечает на запросы:

    curl <публичный IP-адрес, назначенный балансировщику>

    Должно быть выведено следующее:

    The coffee pod says Hello World to everyone! This file is located on the dynamically claimed Cinder ReadWriteOnce persistent volume.

Удалите неиспользуемые ресурсы

  1. Если созданные ресурсы Kubernetes вам больше не нужны, удалите их:

    kubectl delete ns example-appvelero backup delete coffee-backup
  2. Если Velero вам больше не нужен, удалите его:

    velero uninstall
  3. Если резервные копии вам больше не нужны, удалите их из бакета, который использовался Velero.

    При необходимости также удалите сам бакет.

  4. Работающий кластер потребляет вычислительные ресурсы. Если он вам больше не нужен: