Резервное копирование вручную

Используйте Velero, чтобы вручную создавать резервные копии данных кластера и восстанавливать их.

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

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

    Разместите в зоне доступности ME1 одну или несколько групп 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

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

      NAME                    ...   STATUS   CLAIM                    ......                     ...   ...      ...                      ...<ID_ПОСТОЯННОГО_ТОМА>   ...   Bound    example-app/coffee-pvc   ...
    2. Получите ID диска для созданного постоянного тома:

      kubectl describe pv <ID_ПОСТОЯННОГО_ТОМА> -n example-app

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

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

      openstack volume show <ID_ДИСКА> --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
  4. (Опционально) Настройте расписание для автоматического создания резервных копий.

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.

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

Работающий кластер тарифицируется и потребляет вычислительные ресурсы. Если инструмент Velero и ресурсы Kubernetes, созданные для проверки резервного копирования с его помощью, вам больше не нужны, удалите их:

  1. Удалите созданное пространство имен example-app и связанные с ним ресурсы, а также созданную резервную копию:

    kubectl delete ns example-appvelero backup delete coffee-backup
  2. Удалите Velero:

    velero uninstall
  3. Удалите резервные копии из бакета, который использовался Velero.

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

  4. Остановите созданный кластер, чтобы воспользоваться им позже, или удалите его навсегда.