Резервное копирование постоянных томов в хранилище Кибер Бэкап Облачный и их восстановление#
Резервное копирование
Резервное копирование постоянного тома (PersistentVolume) в хранилище Кибер Бэкап Облачный выполняется следующим образом:
Создаётся моментальный снимок исходного тома (VolumeSnapshotContent).
На основе моментального снимка создаётся временный том в блочном режиме или в режиме файловой системы (при наличии аннотации
cyberprotect.ru/convert-to-block-mode=false в VolumeSnapshotClass).В служебном пространстве имён cyberprotect создаётся временный под (Pod) с сервером NBD/NFS на основе Docker-образа
k8s-backup-and-restore, к которому подключён временный том.Создаётся сервис (Service) типа NodePort, посредством которого агент для Kubernetes может получить данные временного тома. В случае недоступности сервиса агент использует механизм
port forwarding.Агент для Kubernetes получает данные временного тома, создаётся резервная копия тома в хранилище Кибер Бэкап Облачный.
По завершении создания резервной копии сервис, временные под и том удаляются. Моментальный снимок тома удаляется при использовании режима хранения моментальных снимков тома В хранилище Кибер Бэкап Облачный либо оставляется в кластере при использовании режима Комбинированное.
Восстановление из резервной копии
Восстановление тома из размещённой в хранилище Кибер Бэкап Облачный резервной копии происходит следующим образом:
Останавливаются использующие восстанавливаемый том приложения (число реплик устанавливается равным нулю или удаляются поды).
В служебном пространстве имён
cyberprotectсоздаются новый том и временный под (Pod) с сервером NFS. Старый том при этом удаляется, если его имя совпадает с именем нового тома.Создаётся сервис типа NodePort, посредством которого агент для Kubernetes может записать данные из резервной копии на новый том. В случае недоступности сервиса агент использует механизм port forwarding.
Агент для Kubernetes монтирует папку NFS и записывает данные из резервной копии на новый том.
Сервис и временный под удаляются. Объект
PersistentVolumeClaimтома переносится в целевое пространство имён.Новый том подключается к требуемым подам, восстанавливается исходное число реплик приложений.
Требования
Для резервного копирования постоянных томов в хранилище Кибер Бэкап Облачный и их восстановления необходимо:
Установить в кластере Kubernetes CSI-драйвер с поддержкой функций Snapshot и Raw Block (подробнее см. в разделе Подготовка кластера Kubernetes).
Обеспечить доступ из кластера к Docker-репозиторию для загрузки Docker-образа
k8s-backup-and-restore(см. далее). По умолчанию используется публичный Docker-репозиторий компании Киберпротект https://registry.cyberprotect.ru/registry.Наличие у сервисной учётной записи
cyberprotectправ на запуск подов в привилегированном режиме в целевом пространстве имён (подробнее см. в разделе Создание служебной учётной записи для агента для Kubernetes).
Настройка доступа в Docker-репозиторий в закрытой среде
При отсутствии доступа в Docker-репозиторий по умолчанию (например, если Кибер Бэкап Облачный используется в среде без доступа в Интернет) можно загрузить из него Docker-образ k8s-backup-and-restore и разместить его в Docker-репозитории, который доступен в пределах закрытой среды. Например:
На машине, на которой есть доступ к Docker-репозиторию по умолчанию и на которой установлен Docker, получите Docker-образ и сохраните его в виде tar-архива:
CYBERPROTECT_REGISTRY=registry.cyberprotect.ru/registry IMAGE_NAME=k8s-backup-and-restore IMAGE_TAG=1.0 docker pull ${CYBERPROTECT_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG} docker save -o ${IMAGE_NAME}_${IMAGE_TAG}.tar ${CYBERPROTECT_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}Разместите tar-архив на машине, на которой есть доступ к внутреннему Docker-репозиторию и на которой установлен Docker.
Отправьте Docker-образ во внутренний Docker-репозиторий:
CYBERPROTECT_REGISTRY=registry.cyberprotect.ru/registry IMAGE_NAME=k8s-backup-and-restore IMAGE_TAG=1.0 INTERNAL_REGISTRY=<YOUR_INTERNAL_DOCKER_REGISTRY> INTERNAL_IMAGE_NAME=${IMAGE_NAME} INTERNAL_IMAGE_TAG=${IMAGE_TAG} docker image load -i ${IMAGE_NAME}_${IMAGE_TAG}.tar docker tag ${CYBERPROTECT_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG} ${INTERNAL_REGISTRY}/${INTERNAL_IMAGE_NAME}:${INTERNAL_IMAGE_TAG} docker push ${INTERNAL_REGISTRY}/${INTERNAL_IMAGE_NAME}:${INTERNAL_IMAGE_TAG}Укажите новое имя Docker-образа в конфигурационном файле агента для Kubernetes
/opt/acronis/etc/dsp.k8s/k8s-agent.jsonв полеcluster_config.docker_image.В конфигурационном файле агента для Kubernetes укажите учётные данные для доступа во внутренний Docker-репозиторий, использовав один из следующих способов:
Использование строки Base64 с учётными данными для доступа во внутренний Docker-репозиторий.
Получите строку с учётными данными в формате Base64, выполнив команду:
kubectl create secret docker-registry regcred \ --docker-server=<YOUR_INTERNAL_DOCKER_REGISTRY> \ --docker-username=<YOUR_DOCKER_USER> \ --docker-password=<YOUR_DOCKER_PASSWORD> \ --docker-email=<YOUR_DOCKER_EMAIL> \ --dry-run=server -o json | jq '.data.".dockerconfigjson"' -r
Укажите строку из вывода команды в поле
cluster_config.docker_image_pull_secretконфигурационного файла агента для Kubernetes/opt/acronis/etc/dsp.k8s/k8s-agent.json.
Использование файла с учётными данными для доступа во внутренний Docker-репозиторий.
Создайте файл с учётными данными, выполнив команду:
kubectl create secret docker-registry regcred \ --docker-server=<YOUR_INTERNAL_DOCKER_REGISTRY> \ --docker-username=<YOUR_DOCKER_USER> \ --docker-password=<YOUR_DOCKER_PASSWORD> \ --docker-email=<YOUR_DOCKER_EMAIL> \ -dry-run=server -o json | jq '.data.".dockerconfigjson"' -r | base64 -d > <YOUR_DOCKER_CREDENTIALS_FILE.json>
Разместите полученный файл с учётными данными на машине с агентом для Kubernetes.
Укажите путь к файлу с учётными данными в поле
cluster_config.docker_image_pull_secretконфигурационного файла агента для Kubernetes/opt/acronis/etc/dsp.k8s/k8s-agent.json.
Перезапустите агент для Kubernetes:
/opt/acronis/aakore restart --unit dsp.k8s