VK Cloud logo

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

Используйте аддон Velero, чтобы настраивать резервное копирование кластеров по заданному расписанию в формате cron и восстанавливать кластер на основании этого расписания.

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

  1. Создайте кластер Kubernetes актуальной версии, если это еще не сделано.
  2. Убедитесь, что вы можете подключиться к кластеру с помощью kubectl.
  3. Установите аддон 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-schedule.yaml:

    apiVersion: velero.io/v1kind: Schedulemetadata:  name: coffee-schedule  namespace: velerospec:  schedule: "*/10 * * * *"  template:    includedNamespaces:      - example-app

    Здесь:

    • coffee-schedule — название расписания, по которому вы сможете в дальнейшем найти его в списке расписаний резервного копирования.

    • velero — пространство имен кластера, для которого вы настраиваете расписание.

    • schedule — параметр, который задает время создания резервных копий в формате cron, например */10 * * * * — каждые 10 минут. Каждый символ отвечает за конкретное значение времени.

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

    kubectl apply -f coffee-schedule.yaml

В результате работы такого расписания резервные копии будут создаваться каждые 10 минут. Название каждой резервной копии будет в формате <НАЗВАНИЕ_РАСПИСАНИЯ>-<TIMESTAMP>, где <TIMESTAMP> — время ее создания. Пример названия: daily-backup-20260805070000.

Время жизни резервной копии по умолчанию — 72 часа. По истечении этого времени резервная копия будет удалена.

3. Просмотрите созданное расписание

Проверьте параметры созданного расписания с помощью команды:

kubectl -n velero describe schedule coffee-schedule

Пример вывода команды:

Name:         coffee-scheduleNamespace:    veleroLabels:       <none>Annotations:  <none>API Version:  velero.io/v1Kind:         ScheduleMetadata:  Creation Timestamp:  2026-08-03T09:25:46Z  Generation:          2  Resource Version:    19702  UID:                 b77cc369-5430-48d0-831c-df057b5e0277Spec:  Schedule:          */10 * * * *  Skip Immediately:  false  Template:    Included Namespaces:      example-appStatus:  Phase:  EnabledEvents:   <none>

4. Выполните восстановление данных из копии, созданной по расписанию

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

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

    kubectl apply -f coffee-schedule-restore.yaml

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

Работающий кластер тарифицируется и потребляет вычислительные ресурсы. Если ресурсы 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. Остановите созданный кластер, чтобы воспользоваться им позже, или удалите его навсегда.