Резервное копирование по расписанию
Используйте аддон Velero, чтобы настраивать резервное копирование кластеров по заданному расписанию в формате cron и восстанавливать кластер на основании этого расписания.
- Создайте кластер Kubernetes актуальной версии, если это еще не сделано.
- Убедитесь, что вы можете подключиться к кластеру с помощью
kubectl. - Установите аддон Velero, если это еще не сделано.
Чтобы познакомиться с созданием резервной копии и восстановлением из нее, создайте демоприложение coffee. К этому приложению будет подключен постоянный том (persistent volume).
-
Создайте файл манифеста с указанием класса хранения в зоне доступности, где расположена ваша группа worker-узлов:
-
Примените манифест в кластере:
kubectl apply -f coffee.yamlМанифест создаст все необходимые для работы приложения ресурсы Kubernetes в пространстве имен
example-app. -
Убедитесь, что создан диск для постоянного тома:
-
Найдите созданный для приложения постоянный том:
kubectl get pv -n example-appВ выводе найдите идентификатор постоянного тома, у которого в столбце
CLAIMуказаноexample-app/coffee-pvc. Пример вывода команды:NAME ... STATUS CLAIM ...... ... ... ... ...<ID_ПОСТОЯННОГО_ТОМА> ... Bound example-app/coffee-pvc ... -
Получите идентификатор диска для созданного постоянного тома:
kubectl describe pv <ID_ПОСТОЯННОГО_ТОМА> -n example-appВ выводе команды будет содержаться идентификатор диска в параметре
VolumeHandle. Пример вывода:...Source:Type: CSI (a Container Storage Interface (CSI) volume source)Driver: cinder.csi.openstack.orgFSType: ...VolumeHandle: <ID_ДИСКА>... -
Получите подробную информацию о диске с таким идентификатором, используя OpenStack CLI:
openstack volume show <ID_ДИСКА> --fit-width
-
-
Дождитесь, когда балансировщику будет назначен Floating IP-адрес.
Периодически проверяйте статус балансировщика:
kubectl get svc -n example-appВ столбце
EXTERNAL-IPдолжен появиться Floating IP-адрес, назначенный балансировщику. -
Убедитесь, что NGINX отвечает на запросы:
curl <FLOATING_IP_АДРЕС_БАЛАНСИРОВЩИКА>Ожидаемый вывод:
The coffee pod says Hello World to everyone! This file is located on the dynamically claimed Cinder ReadWriteOnce persistent volume.
-
Создайте манифест
coffee-schedule.yaml:apiVersion: velero.io/v1kind: Schedulemetadata:name: coffee-schedulenamespace: velerospec:schedule: "*/10 * * * *"template:includedNamespaces:- example-appЗдесь:
-
coffee-schedule— название расписания, по которому вы сможете в дальнейшем найти его в списке расписаний резервного копирования. -
velero— пространство имен кластера, для которого вы настраиваете расписание. -
schedule— параметр, который задает время создания резервных копий в формате cron, например*/10 * * * *— каждые 10 минут. Каждый символ отвечает за конкретное значение времени.
-
-
Примените манифест в кластере:
kubectl apply -f coffee-schedule.yaml
В результате работы такого расписания резервные копии будут создаваться каждые 10 минут. Название каждой резервной копии будет в формате <НАЗВАНИЕ_РАСПИСАНИЯ>-<TIMESTAMP>, где <TIMESTAMP> — время ее создания. Пример названия: daily-backup-20260805070000.
Время жизни резервной копии по умолчанию — 72 часа. По истечении этого времени резервная копия будет удалена.
Проверьте параметры созданного расписания с помощью команды:
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:46ZGeneration: 2Resource Version: 19702UID: b77cc369-5430-48d0-831c-df057b5e0277Spec:Schedule: */10 * * * *Skip Immediately: falseTemplate:Included Namespaces:example-appStatus:Phase: EnabledEvents: <none>
-
Создайте манифест
coffee-schedule-restore.yaml:apiVersion: velero.io/v1kind: Restoremetadata:name: coffee-schedule-restorenamespace: velerospec:scheduleName: coffee-schedule -
Примените манифест в кластере:
kubectl apply -f coffee-schedule-restore.yaml
Работающий кластер тарифицируется и потребляет вычислительные ресурсы. Если ресурсы Kubernetes, созданные для проверки резервного копирования с помощью аддона Velero, вам больше не нужны, удалите их:
-
Удалите созданное пространство имен
example-appи связанные с ним ресурсы, а также созданную резервную копию:Linux/macOSWindowskubectl delete ns example-app -
(Опционально) Удалите пространство имен
velero. Для этого:-
Удалите созданные экземпляры ресурсов, относящиеся к Custom Resource Definitions (CRD) аддона.
-
Выполните команду:
Linux/macOSWindowskubectl delete ns velero
-
-
Удалите резервные копии из бакета, который использовался аддоном Velero.
При необходимости также удалите сам бакет.
-
Остановите созданный кластер, чтобы воспользоваться им позже, или удалите его навсегда.