VK Cloud logo

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

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

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

  1. Создайте кластер Kubernetes актуальной версии, если это еще не сделано.
  2. Убедитесь, что вы можете подключиться к кластеру с помощью kubectl.
  3. Установите OpenStack CLI, если это еще не сделано. Убедитесь, что вы можете авторизоваться в облаке с его помощью.
  4. Установите аддон Velero, если это еще не сделано.

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

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

  1. Создайте файл манифеста с указанием класса хранения в зоне доступности, где расположена ваша группа worker-узлов:

  2. Примените манифест в кластере:

    kubectl apply -f coffee.yaml

    Манифест создаст все необходимые для работы приложения ресурсы Kubernetes в пространстве имен 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. Дождитесь, когда балансировщику будет назначен Floating IP-адрес.

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

    kubectl get svc -n example-app

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

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

    curl <FLOATING_IP_АДРЕС_БАЛАНСИРОВЩИКА>

    Ожидаемый вывод:

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

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

  1. Создайте манифест coffee-backup.yaml:

    apiVersion: velero.io/v1kind: Backupmetadata:  name: coffee-backup  namespace: velerospec:  includedNamespaces:    - example-app
  2. Примените манифест в кластере:

    kubectl apply -f coffee-backup.yaml

    Этот манифест создает ручную резервную копию всего пространства имен example-app, в котором находятся нужные для работы приложения ресурсы. Время жизни созданной резервной копии по умолчанию – 72 часа. По истечении этого времени резервная копия будет удалена.

  3. (Опционально) Настройте расписание для автоматического создания резервных копий.

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

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

    kubectl delete ns example-app
  2. Создайте манифест coffee-restore.yaml:

    apiVersion: velero.io/v1kind: Restoremetadata:  name: coffee-restore  namespace: velerospec:  backupName: coffee-backup
  3. Примените манифест в кластере:

    kubectl apply -f coffee-restore.yaml

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

    1. Создайте кластер.
    2. Установите аддон Velero в кластер.
    3. Создайте и примените манифест coffee-restore.yaml.
  4. Удалите аннотацию с идентификатором балансировщика нагрузки, которая осталась после восстановления резервной копии:

    kubectl -n example-app annotate service coffee-svc loadbalancer.openstack.org/load-balancer-id-

    После этого будет создан новый балансировщик нагрузки.

  5. Дождитесь, когда балансировщику будет назначен Floating IP-адрес.

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

    kubectl get svc -n example-app

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

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

    curl <FLOATING_IP_АДРЕС_БАЛАНСИРОВЩИКА>

    Ожидаемый вывод:

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

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

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

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

    kubectl delete ns example-app
  2. (Опционально) Удалите пространство имен velero. Для этого:

    1. Удалите созданные экземпляры ресурсов, относящиеся к Custom Resource Definitions (CRD) аддона.

    2. Выполните команду:

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

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

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