Резервное копирование постоянных томов в хранилище Кибер Бэкап Облачный#
Резервное копирование
Резервное копирование постоянного тома (PersistentVolume) в хранилище Кибер Бэкап Облачный выполняется следующим образом:
Создается моментальный снимок исходного тома (VolumeSnapshotContent).
Создается временный том в блочном режиме на основе моментального снимка.
Создается временный под (Pod) с сервером NBD на основе Docker-образа
k8s-backup-and-restore, к которому подключен временный том. Под создается в том же самом пространстве имен, что и поды, к которым подключен исходный том.Создается сервис (Service) типа NodePort, посредством которого агент для Kubernetes может получить данные временного тома. Сервис создается в том же самом пространстве имен, что и поды, к которым подключен исходный том.
Агент для Kubernetes получает данные временного тома, создается резервная копия тома в хранилище Кибер Бэкап Облачный.
По завершении создания резервной копии сервис, временные под и том удаляются. Моментальный снимок тома удаляется при использовании режима хранения моментальных снимков тома В хранилище Кибер Бэкап Облачный либо оставляется в кластере при использовании режима Комбинированное.
Восстановление из резервной копии
Восстановление тома из размещенной в хранилище Кибер Бэкап Облачный резервной копии происходит следующим образом:
Останавливаются использующие восстанавливаемый том приложения (число реплик устанавливается равным нулю или удаляются поды).
Создаются новый том и временный под с сервером NFS, при этом старый том удаляется, если его имя совпадает с именем нового тома.
Создается сервис типа NodePort, посредством которого агент для Kubernetes может записать данные из резервной копии на новый том.
Агент для Kubernetes монтирует папку NFS и записывает данные из резервной копии на новый том.
Сервис и временный под удаляются.
Новый том подключается к требуемым подам, восстанавливается исходное число реплик приложений.
Требования
В кластере Kubernetes должен быть установлен CSI-драйвер, поддерживающий функцию Raw Block. Эта функция позволяет подключить постоянный том к поду как блочное устройство. Список CSI-драйверов и сведения о поддерживаемых ими функциях см. в документации разработчика Kubernetes.
Из кластера должен быть доступен Docker-репозиторий, из которого можно получить Docker-образ
k8s-backup-and-restore. По умолчанию используется публичный Docker-репозиторий компании Киберпротект https://registry.cyberprotect.ru/registry.Сервисная учетная запись
cyberprotectдолжна обладать правами на запуск пода в привилегированном режиме в целевом пространстве имен.
Настройка доступа в 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

