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

Используйте 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

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

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

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

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

      ...Source:    Type:          CSI (a Container Storage Interface (CSI) volume source)    Driver:        cinder.csi.openstack.org    FSType:        ...    VolumeHandle:  <ID_ДИСКА>    ...
    3. Получите подробную информацию о диске с таким идентификатором, используя 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. Остановите созданный кластер, чтобы воспользоваться им позже, или удалите его навсегда.