Резервное копирование кластера в Object Storage
Вы можете создавать резервные копии данных кластера Managed Kubernetes с помощью инструмента Velero. Резервные копии можно использовать как для восстановления существующего кластера, так и для создания нового. Для хранения резервных копий используется бакет Object Storage.
В этом руководстве вы установите Velero в кластер Managed Kubernetes, создадите резервные копии объектов кластера и данных из постоянного хранилища (Persistent Volume), а также восстановите данные из резервной копии.
Чтобы начать работу с Velero:
- Подготовьте виртуальную машину — на нее будет установлен набор утилит для работы с кластером и резервными копиями.
- Создайте тестовый дейплоймент с набором внутренних ресурсов Kubernetes и томом постоянного хранилища.
- Настройте File System Backup — он понадобится для создания резервных копий постоянного хранилища.
- Создайте резервные копии кластера и постоянного хранилища.
Если вам больше не нужны созданные ресурсы, удалите их.
Перед началом работы
Заголовок раздела «Перед началом работы»- C именем
sa-k8sи рольюregistry.puller— для работы группы узлов Managed Kubernetes. - С именем
sa-storageбез назначенной роли — для выгрузки резервных копий в бакет Object Storage. Нужная роль для сервисного аккаунта будет назначена позже.
Для сервисного аккаунт
sa-storage:- Создайте HMAC-ключ — для выгрузки резервных копий в бакет Object Storage. Сохраните значения
Access keyиSecret key. - Создайте API-ключ — для авторизации в Artifact Registry и скачивания Helm-чарта
velero. Сохраните API-ключ.
Создайте кластер Managed Kubernetes и группу узлов для него. При создании группы используйте сервисный аккаунт
sa-k8s.Создайте NAT-шлюз для подсети, в которой будет развернут кластер Managed Kubernetes.
Создайте виртуальную машину в той же сети, где развернут кластер Managed Kubernetes.
Создайте бакет Object Storage с именем
velero-bucket.Настройте права доступа на бакет
velero-bucketдля сервисного аккаунтаsa-storage:- В веб-консоли выберите нужный проект.
- В списке сервисов выберите Object Storage → Бакеты и выберите
velero-bucket. - Перейдите на вкладку Права доступа. В блоке Управление ролями нажмите кнопку Добавить.
- В открывшемся меню выберите тип аккаунта — Сервисный, после чего в строке поиска введите
sa-storage. - В списке ролей выберите
storage.bucket.objectEditor. - Нажмите кнопку Добавить.
1. Подготовьте виртуальную машину
Заголовок раздела «1. Подготовьте виртуальную машину»Для работы с Velero установите набор утилит на виртуальную машину:
Подключитесь к ВМ по SSH.
Установите и настройте утилиту MWS CLI:
Установите утилиту командной строки
kubectl.Получите kubeconfig:
bash mws mk8s get-kubeconfig --name <имя кластера>Убедитесь, что кластер доступен:
bash kubectl cluster-infoЕсли конфигурация настроена правильно, вы получите такой ответ:
bash Kubernetes control plane is running at https://<IP-адрес кластера>KubeDNS is running at https://<IP-адрес кластера>/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
2. Создайте тестовый деплоймент
Заголовок раздела «2. Создайте тестовый деплоймент»Для проверки работы Velero вы создадите деплоймент busybox:1.28, содержащий следующие ресурсы:
- постоянное хранилище с именем тома
test-storage; - секрет Kubernetes с именем
test-secret; - метка (
selector) для секрета.
Эти ресурсы потребуются для демонстрации различных сценариев восстановления из резервной копии.
Чтобы создать деплоймент:
Создайте файл
myapp.yaml, содержащий манифест деплоймента.Создайте деплоймент:
bash kubectl apply -f myapp.yamlУбедитесь, что приложение и его Persistent Volume Claim успешно созданы:
bash kubectl get pods -l app=test-app && \kubectl get pvc test-pvcОжидаемый результат:
bash NAME READY STATUS RESTARTS AGEtest-app-7bf57b58b8-jnxqf 1/1 Running 0 2m30sNAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGEtest-pvc Bound pvc-c81a3ea4-cfe6-4703-bd00-ddb349a977f3 1Gi RWO mws <unset> 2m31sДобавьте секрет Kubernetes:
bash kubectl create secret generic test-secret \--namespace default \--from-literal=username=admin \--from-literal=password=password123Добавьте метку (
selector) на созданный секрет:bash kubectl label secret test-secret -n default secret=my-test-secretУбедитесь, что секрет успешно создан:
bash kubectl get secrets -n default
3. Установите Velero в кластер
Заголовок раздела «3. Установите Velero в кластер»В этой части руководства вы установите серверную часть Velero в кластер Managed Kubernetes.
Аутентифицируйтесь в Artifact Registry:
bash helm registry login -u apikey -p <API-ключ> registry.mwsapis.ruСкачайте Helm-чарт
veleroна ВМ:bash helm pull oci://registry.mwsapis.ru/mws-mk8s-images/customer/charts/velero \--version 12.0.0 \--untarСоздайте файл с ключами:
bash cat << EOF > credentials-velero.txt[default]aws_access_key_id=<значение Access key HMAC-ключа>aws_secret_access_key=<значение Secret key HMAC-ключа>EOFУстановите Velero:
bash helm install --namespace velero \--create-namespace \--generate-name \--set backupStorageLocationCustomRepo.bucket=velero-bucket \--set-file credentials.secretContents.cloud=credentials-velero.txt \./velero/Проверьте успешность установки:
bash helm list -n veleroОжидаемый результат:
bash NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSIONvelero-1774353057 velero 1 2026-03-24 14:50:59.258129131 +0300 MSK deployed velero-12.0.0 1.18.0Проверьте доступность бакета и работоспособность пода Velero:
bash kubectl get -n velero backupstoragelocations.velero.io && \kubectl get -n velero deploymentОжидаемый результат:
bash NAME PHASE LAST VALIDATED AGE DEFAULTvelero-s3-backup Available 35s 55m trueNAME READY UP-TO-DATE AVAILABLE AGEvelero 1/1 1 1 55m
4. Настройте File System Backup
Заголовок раздела «4. Настройте File System Backup»Механизм File System Backup позволяет создавать резервные копии данных, находящихся в томах постоянного хранилища. Создание резервных копий постоянных хранилищ с помощью снапшотов CSI не поддерживается.
Включите механизм File System Backup в вашем кластере Managed Kubernetes:
Внесите изменения в файл
./velero/values.yaml, с помощью которого ранее был установлен Velero. Удалите символ#перед следующими строками:yaml ...deployNodeAgent: truenodeAgent:disableHostPath: falseresources:requests:cpu: 500mmemory: 512Milimits:cpu: 1000mmemory: 1024MiuseScratchEmptyDir: true...Узнайте имя деплоймента Velero:
bash helm list -n veleroОжидаемый результат:
bash NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION<имя деплоймента> velero 1 2026-03-24 14:50:59.258129131 +0300 MSK deployed velero-12.0.0 1.18.0Обновите деплоймент:
bash helm upgrade <имя деплоймента> \--namespace velero \--set backupStorageLocationCustomRepo.bucket=velero-bucket \-f ./velero/values.yaml \./velero/ \--reset-valuesУбедитесь, что агенты Velero расположены на каждом узле кластера:
bash kubectl get pods -n velero -l "name=node-agent"Ожидаемый результат:
bash NAME READY STATUS RESTARTS AGEnode-agent-xlknx 1/1 Running 0 64mТеперь Velero может создавать резервные копии данных из постоянного хранилища этого пода.
5. Настройте расписание резервного копирования
Заголовок раздела «5. Настройте расписание резервного копирования»В этой части руководства вы создадите расписание резервного копирования. Копия будет создаваться ежедневно в 12:00 и включать в себя все объекты кластера.
Подготовьте манифест с расписанием резервного копирования:
bash cat << EOF > schedule-velero.txtapiVersion: velero.io/v1kind: Schedulemetadata:name: velero-main-schedulenamespace: velerospec:schedule: 0 */12 * * *skipImmediately: falsetemplate:hooks: {}includeClusterResources: trueincludedNamespaces:- '*'storageLocation: velero-s3-backupttl: 720hEOFВы можете изменить некоторые параметры расписания:
schedule— расписание резервного копирования в формате crontab;skipImmediately— резервное копирование будет запущено только в момент срабатывания расписания;includeClusterResources— в резервную копию будут включены все объекты уровня кластера (cluster-scoped);includedNamespacesсо значением*— в резервную копию будут включены все пространства имен;ttl— время жизни резервной копии (720 часов, 30 дней).
Примените расписание:
bash kubectl apply -f schedule-velero.txtУбедитесь, что расписание успешно создано и активировано:
bash kubectl get schedules.velero.io -n veleroОжидаемый результат:
bash NAME STATUS SCHEDULE LASTBACKUP AGE PAUSEDvelero-main-schedule Enabled 0 */12 * * * 9s
6. Создайте резервные копии
Заголовок раздела «6. Создайте резервные копии»В этом разделе руководства вы вручную создадите резервную копию кластера и постоянного хранилища, используя правила из расписания.
6.1. Создайте резервную копию кластера
Заголовок раздела «6.1. Создайте резервную копию кластера»Выполните команду создания копии:
bash velero backup create <имя резервной копии> \--from-schedule velero-main-scheduleДождитесь завершения создания резервной копии. Отслеживать создание копии можно с помощью запроса логов:
bash velero backup logs <имя резервной копии>Для получения информации о созданной резервной копии используйте команду:
bash velero describe backup <имя резервной копии>
6.2. Создайте резервную копию постоянного хранилища
Заголовок раздела «6.2. Создайте резервную копию постоянного хранилища»Чтобы включить в резервную копию данные из тома test-storage:
Выполните команду создания копии:
bash velero backup create <имя резервной копии> \--from-schedule velero-main-scheduleДождитесь завершения создания резервной копии. Отслеживать создание копии можно с помощью запроса логов:
bash velero backup logs <имя резервной копии>Убедитесь, что резервная копия включает в себя том
test-storage:bash velero backup describe <имя резервной копии> --detailsВ выводе команды будет информация о резервной копии тома:
bash storage.k8s.io/v1/CSIDriver:- csi.mws.rustorage.k8s.io/v1/CSINode:- <имя группы узлов>storage.k8s.io/v1/StorageClass:- mwsstorage.k8s.io/v1/VolumeAttachment:- csi-d3ad5d912fec6d90044c3d288912316184324fc6a76f48231a3948e7d429f9f4
7. Восстановите данные из резервной копии
Заголовок раздела «7. Восстановите данные из резервной копии»Доступны несколько вариантов восстановления данных из резервной копии:
Чтобы восстановить отдельные ресурсы в одном пространстве имен:
Для проверки восстановления удалите тестовый секрет:
bash kubectl delete secret test-secretВосстановите удаленный секрет из резервной копии:
bash velero restore create --from-backup <имя резервной копии> \--include-namespaces=default \--include-resources=secretsУбедитесь, что секрет восстановлен:
bash kubectl get secrets -n default
Чтобы восстановить ресурсы пространства имен на основе метки (
selector):Для проверки восстановления удалите тестовый секрет:
bash kubectl delete secret test-secretВосстановите удаленный секрет с помощью метки:
bash velero restore create --from-backup <имя резервной копии> \--include-namespaces=default \--selector "secret=my-test-secret"
Чтобы восстановить все ресурсы пространства имен, выполните команду:
bash velero restore create \--from-backup <имя резервной копии> \--include-namespaces=<пространство имен>Чтобы восстановить все данные в кластере из резервной копии, выполните команду
velero restore create --from-backup <имя резервной копии>.Чтобы восстановить данные постоянного хранилища:
Удалите деплоймент и его Persistent Volume Claim:
bash kubectl delete deployment test-app -n default && \kubectl delete pvc test-pvc -n defaultУбедитесь, что ресурсы удалены:
bash kubectl get deployments,pod,pvc -n defaultВосстановите деплоймент и его том из резервной копии:
bash velero restore create test-restore-pv \--from-backup <имя резервной копии> \--restore-volumes=trueУбедитесь, что ресурсы восстановлены:
bash kubectl get deployments,pod,pvc -n default
Вы можете получить список созданных экземпляров восстановлений, логи и подробную информацию о восстановлении. Для этого используйте команды:
velero get restorevelero restore logs <имя экземпляра восстановления>velero describe restore <имя экземпляра восстановления>Удалите платные ресурсы
Заголовок раздела «Удалите платные ресурсы»Ресурсы, созданные в руководстве, тарифицируются. Если вы больше не планируете использовать их: