Резервное копирование постоянных томов в хранилище Кибер Бэкап Облачный и их восстановление

Резервное копирование постоянных томов в хранилище Кибер Бэкап Облачный и их восстановление#

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

Резервное копирование постоянного тома (PersistentVolume) в хранилище Кибер Бэкап Облачный выполняется следующим образом:

  1. Создаётся моментальный снимок исходного тома (VolumeSnapshotContent).

  2. На основе моментального снимка создаётся временный том в блочном режиме или в режиме файловой системы (при наличии аннотации cyberprotect.ru/convert-to-block-mode=false в VolumeSnapshotClass).

  3. В служебном пространстве имён cyberprotect создаётся временный под (Pod) с сервером NBD/NFS на основе Docker-образа k8s-backup-and-restore, к которому подключён временный том.

  4. Создаётся сервис (Service) типа NodePort, посредством которого агент для Kubernetes может получить данные временного тома. В случае недоступности сервиса агент использует механизм port forwarding.

  5. Агент для Kubernetes получает данные временного тома, создаётся резервная копия тома в хранилище Кибер Бэкап Облачный.

  6. По завершении создания резервной копии сервис, временные под и том удаляются. Моментальный снимок тома удаляется при использовании режима хранения моментальных снимков тома В хранилище Кибер Бэкап Облачный либо оставляется в кластере при использовании режима Комбинированное.

_images/Kubernetes-persistent-volume-backup-to-CyberBackup-storage.png

Восстановление из резервной копии

Восстановление тома из размещённой в хранилище Кибер Бэкап Облачный резервной копии происходит следующим образом:

  1. Останавливаются использующие восстанавливаемый том приложения (число реплик устанавливается равным нулю или удаляются поды).

  2. В служебном пространстве имён cyberprotect создаются новый том и временный под (Pod) с сервером NFS. Старый том при этом удаляется, если его имя совпадает с именем нового тома.

  3. Создаётся сервис типа NodePort, посредством которого агент для Kubernetes может записать данные из резервной копии на новый том. В случае недоступности сервиса агент использует механизм port forwarding.

  4. Агент для Kubernetes монтирует папку NFS и записывает данные из резервной копии на новый том.

  5. Сервис и временный под удаляются. Объект PersistentVolumeClaim тома переносится в целевое пространство имён.

  6. Новый том подключается к требуемым подам, восстанавливается исходное число реплик приложений.

_images/Kubernetes-persistent-volume-restoration-from-CyberBackup-storage.png

Требования

Для резервного копирования постоянных томов в хранилище Кибер Бэкап Облачный и их восстановления необходимо:

  • Установить в кластере 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-репозитории, который доступен в пределах закрытой среды. Например:

  1. На машине, на которой есть доступ к 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}
    
  2. Разместите tar-архив на машине, на которой есть доступ к внутреннему Docker-репозиторию и на которой установлен Docker.

  3. Отправьте 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}
    
  4. Укажите новое имя Docker-образа в конфигурационном файле агента для Kubernetes /opt/acronis/etc/dsp.k8s/k8s-agent.json в поле cluster_config.docker_image.

  5. В конфигурационном файле агента для Kubernetes укажите учётные данные для доступа во внутренний Docker-репозиторий, использовав один из следующих способов:

    • Использование строки Base64 с учётными данными для доступа во внутренний Docker-репозиторий.

      1. Получите строку с учётными данными в формате 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
        
      2. Укажите строку из вывода команды в поле cluster_config.docker_image_pull_secret конфигурационного файла агента для Kubernetes /opt/acronis/etc/dsp.k8s/k8s-agent.json.

    • Использование файла с учётными данными для доступа во внутренний Docker-репозиторий.

      1. Создайте файл с учётными данными, выполнив команду:

        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>
        
      2. Разместите полученный файл с учётными данными на машине с агентом для Kubernetes.

      3. Укажите путь к файлу с учётными данными в поле cluster_config.docker_image_pull_secret конфигурационного файла агента для Kubernetes /opt/acronis/etc/dsp.k8s/k8s-agent.json.

  6. Перезапустите агент для Kubernetes:

    /opt/acronis/aakore restart --unit dsp.k8s