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

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

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

Резервное копирование постоянного тома (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. По завершении создания резервной копии сервис, временные под и том удаляются. Моментальный снимок тома удаляется при использовании режима хранения моментальных снимков тома В хранилище Кибер Бэкап либо оставляется в кластере при использовании режима Комбинированное.

image1

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

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

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

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

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

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

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

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

image2

Требования

  • Для создания моментальных снимков томов в кластере Kubernetes должен быть установлен CSI-драйвер с поддержкой функции Snapshot.

    Для резервного копирования томов в хранилище Кибер Бэкап CSI-драйвер должен поддерживать функцию Raw Block. Если ваш драйвер её не поддерживает, то следует добавить аннотацию в соответствующие ему объекты VolumeSnapshotClass:

    kubectl annotate volumesnapshotclass <volume_snapshot_class_name> cyberprotect.ru/convert-to-block-mode=false
    

    Список CSI-драйверов и сведения о поддерживаемых ими функциях см. в документации разработчика Kubernetes.

  • Из кластера должен быть доступен Docker-репозиторий, из которого можно получить Docker-образ k8s-backup-and-restore. По умолчанию используется публичный Docker-репозиторий компании Киберпротект registry.cyberprotect.ru/registry.

  • Сервисная учетная запись cyberprotect должна обладать правами на запуск пода в привилегированном режиме в целевом пространстве имен.

Настройка доступа в 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