Для улучшения работы сайта мы используем файлы cookies. Оставаясь на сайте, вы соглашаетесь с политикой обработки персональных данных.

Защита пользовательских данных с помощью модуля Data Protection

В данном разделе описана защита пользовательских данных с помощью модуля Data Protection.

1. Предварительные условия

  • Вы ознакомились с архитектурой и концепциями резервного копирования в Nova Container Platform.

  • Вы ознакомились с документацией по планированию установки и системным требованиям модуля защиты данных.

  • У вас есть доступ к кластеру с учетной записью, имеющей роль cluster-admin в Kubernetes.

  • Вы установили утилиту kubectl для работы с Kubernetes.

1.1. Дополнительные условия

  • При использовании backend velero — в кластере развернут и настроен Velero.

  • При использовании backend job — доступен NFS-сервер с выделенным каталогом для резервных копий.

2. Настройка секрета доступа к объектному хранилищу

В модуле Data Protection ПО Velero поставляется с плагином для подключения к объектному хранилищу, совместимому с Amazon Web Services (AWS) S3. Вы также можете использовать любые S3-совместимые хранилища для подключения к Velero.

Для подключения объектного хранилища в Velero вам необходимо настроить в Kubernetes объект Secret, в котором должны быть установлены учетные данные. Как правило, это переменные aws_access_key_id и aws_secret_access_key. Кроме этого, вам потребуется переопределить точку подключения к объектному хранилищу.

Следуйте инструкциям ниже, чтобы настроить хранилище резервных копий.

Секрет доступа к объектному хранилищу должен быть размещен в среде Kubernetes. Для корректной работы Velero должен быть создан секрет по умолчанию, который будет использоваться для доступа к объектному хранилищу в случаях, когда отдельный секрет явно не указан.

При дальнейшей настройке вы можете создать любое дополнительное количество секретов.

Размещение секрета доступа к объектному хранилищу в StarVault не дает явных преимуществ в безопасности платформы. При этом значительно повышается сложность эксплуатации решения по резервному копированию, особенно, когда резервное копирование выполняется в разные бакеты или хранилища, где требуются отдельные учетные записи.

Необходимые условия

  • У вас есть доступ к кластеру с учетной записью, имеющей роль cluster-admin в Kubernetes.

  • У вас подготовлена учетная запись для доступа к объектному хранилищу.

Порядок действий:
  1. Создайте на локальной машине файл, например, cloud-credentials. В данном файле необходимо указать учетную запись по умолчанию для подключения к объектному хранилищу.

    Пример вывода:
    cat << EOF > ./cloud-credentials
    [default]
    aws_access_key_id=<AWS_ACCESS_KEY_ID>
    aws_secret_access_key=<AWS_SECRET_ACCESS_KEY>
    EOF
  2. Создайте секрет по умолчанию:

    kubectl create secret generic cloud-credentials -n nova-cluster-backup --from-file cloud=cloud-credentials
    Пример вывода:
    kubectl create secret generic cloud-credentials -n nova-cluster-backup --from-file cloud=cloud-credentials
    
    secret/cloud-credentials created

3. Установка модуля Nova Data Protection

3.1. Установка с помощью kubectl

  1. Установите nova-data-protection-operator. Для этого сохраните предоставленный ниже манифест в файл, например DataProtectionOperator.yaml.

    Пример манифеста
    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: nova-data-protection-operator
      namespace: nova-operators
    spec:
      channel: stable
      installPlanApproval: Automatic
      name: nova-data-protection-operator
      source: nova-catalog
      sourceNamespace: nova-operatorhub
      startingCSV: nova-data-protection-operator.v1.0.0
  2. Установите манифест в кластер.

    kubectl apply -f DataProtectionOperator.yaml
  3. После установки выполните проверку.

    kubectl get pods -n nova-operators
    Пример вывода:
    NAME                                             READY   STATUS    RESTARTS      AGE
    nova-data-protection-operator-86d8bfb546-h7fhm   1/1     Running   2 (44h ago)   12d

    После успешной установки в столбце READY должно быть указано 1/1, в столбце STATUS должно быть указано Running.

  4. Для установки ClusterBackup сохраните предоставленный ниже манифест в файл, например, ClusterBackup.yaml.

    Пример манифеста
    apiVersion: velero.nova-platform.io/v1alpha1
    kind: ClusterBackup
    metadata:
      name: cluster
    spec:
      defaultBackupLocation: (1)
        config: (2)
          s3Url: https://s3.example.local (3)
          region: us-east-1 (4)
          checksumAlgorithm: "" (5)
        objectStorage: (6)
          bucket: nova-cluster-backup (7)
        credential: (8)
          name: cloud-credentials (9)
          key: cloud (10)
    1 spec.defaultBackupLocation (тип: object) - конфигурация основного хранилища резервных копий.
    2 spec.defaultBackupLocation.config (тип: object) - параметры подключения к S3-совместимому хранилищу.
    3 spec.defaultBackupLocation.config.s3Url (тип: string) - URL S3-совместимого хранилища.
    4 spec.defaultBackupLocation.config.region (тип: string) - регион AWS / регион S3-хранилища. Необязателен к заполнению.
    5 spec.defaultBackupLocation.config.checksumAlgorithm (тип: string) - алгоритм проверки контрольных сумм при передаче данных. Допустимые значения: "" (отключено), "CRC32", "CRC32C", "SHA1", "SHA256". Необязателен к заполнению.
    6 spec.defaultBackupLocation.objectStorage (тип: object) - параметры объектного хранилища.
    7 spec.defaultBackupLocation.objectStorage.bucket (тип: string) - имя существующего S3-бакета для хранения резервных копий.
    8 spec.defaultBackupLocation.credential (тип: object) - ссылка на Kubernetes Secret с учетными данными S3.
    9 spec.defaultBackupLocation.credential.name (тип: string) - имя Secret с учетными данными.
    10 spec.defaultBackupLocation.credential.key (тип: string) - ключ внутри Secret, содержащий учетные данные.
  5. Установите его в кластер.

    kubectl apply -f ClusterBackup.yaml
  6. После применения ресурса оператор создаст Flux Kustomizations для развертывания Velero и настройки BackupStorageLocation. Проверьте состояние с помощью команды:

    kubectl get clusterbackup cluster -o yaml

    Поле status.phase может принимать следующие значения:

    • Pending - ресурс создан, оператор еще не приступил к обработке

    • Reconciling - компоненты Velero разворачиваются

    • Ready - все компоненты успешно развернуты и готовы к работе

    • Error - произошла ошибка при обработке

3.2. Установка с помощью Nova Console

Установите модуль Nova Data Protection Operator через Nova Console OperatorHUB. Для этого выполните следующие шаги.

  1. Установите оператор Nova Data Protection Operator. В Nova Console в главном меню выберите OperatorsOperatorHUB. Выберите Nova Data Protection Operator. Нажмите кнопку Установить.

    Заполните поля формы по примеру, представленному на скриншоте.

    data protection operator

    Подтвердите установку, нажав Установить.

  2. Перейдите в раздел OperatorsУстановленные операторы. Выберите Nova Data Protection Operator или сразу после установки нажмите Открыть оператор.

  3. Перейдите ко вкладке ClusterBackup и нажмите на кнопку Создать ClusterBackup.

  4. Заполнить настройки можно двумя способами:

    • С помощью формы

      cluster backup 1
    • С помощью манифеста

      Пример манифеста
      apiVersion: velero.nova-platform.io/v1alpha1
      kind: ClusterBackup
      metadata:
        name: cluster
      spec:
        defaultBackupLocation: (1)
          config: (2)
            s3Url: https://s3.example.local (3)
            region: us-east-1 (4)
            checksumAlgorithm: "" (5)
          objectStorage: (6)
            bucket: nova-cluster-backup (7)
          credential: (8)
            name: cloud-credentials (9)
            key: cloud (10)
      1 spec.defaultBackupLocation (тип: object) - конфигурация основного хранилища резервных копий.
      2 spec.defaultBackupLocation.config (тип: object) - параметры подключения к S3-совместимому хранилищу.
      3 spec.defaultBackupLocation.config.s3Url (тип: string) - URL S3-совместимого хранилища.
      4 spec.defaultBackupLocation.config.region (тип: string) - регион AWS / регион S3-хранилища. Необязателен к заполнению.
      5 spec.defaultBackupLocation.config.checksumAlgorithm (тип: string) - алгоритм проверки контрольных сумм при передаче данных. Допустимые значения: "" (отключено), "CRC32", "CRC32C", "SHA1", "SHA256". Необязателен к заполнению.
      6 spec.defaultBackupLocation.objectStorage (тип: object) - параметры объектного хранилища.
      7 spec.defaultBackupLocation.objectStorage.bucket (тип: string) - имя существующего S3-бакета для хранения резервных копий.
      8 spec.defaultBackupLocation.credential (тип: object) - ссылка на Kubernetes Secret с учетными данными S3.
      9 spec.defaultBackupLocation.credential.name (тип: string) - имя Secret с учетными данными.
      10 spec.defaultBackupLocation.credential.key (тип: string) - ключ внутри Secret, содержащий учетные данные.
  5. Нажмите Создать. Отслеживайте статус на вкладке ClusterBackup на странице оператора.

4. Настройка хранилища резервных копий

4.1. Настройка ключа шифрования данных

Резервные копии персистентных данных (файлов) зашифровываются с помощью ключа, хранимого в StarVault. Данный ключ уникален для каждой инсталляции Nova Container Platform. При необходимости, вы можете сменить ключ шифрования следуя процедуре ниже.

Рекомендуется сменить ключ шифрования до настройки каких-либо планов резервного копирования. После настройки ключа шифрования вам необходимо выполнить перезапуск Velero с помощью команды:

kubectl -n nova-cluster-backup rollout restart deployment/velero

Предварительные условия

  • У вас есть доступ к кластеру с учетной записью, имеющей роль cluster-admin в Kubernetes.

  • У вас есть токен доступа к хранилищу секретов StarVault с привилегиями root.

  • У вас подготовлена учетная запись для доступа к объектному хранилищу.

    1. Подключитесь к StarVault следуя процедуре, описанной в разделе Подключение к StarVault.

    2. Перейдите в раздел Секреты, выберете секрет nova-secrets.

    3. В секрете nova-secrets перейдите в credentials, далее в nova-velero.

    4. Создайте новую версию секрета, используя кнопку Создать новую версию измените значение ключа repository_password на новое.

4.2. Настройка BackupStorageLocation

Место хранения создается при установке ClusterBackup. Ниже представлена инструкция, с помощью которой вы можете создать дополнительное место хранения.

Для того, чтобы создать резервную копию, необходимо сначала создать место, в котором будет сохранена резервная копия. Для корректной работы необходимо хотя бы 1 место. Чтобы создать место, необходимо выполнить следующие шаги:

  1. Создайте место для хранения резервной копии одним из способов:

    Через CLI

    Подготовьте манифест CR BackupStorageLocation и установите его в кластер Kubernetes с помощью Nova Console или kubectl.

    YAML-манифест
    apiVersion: velero.io/v1
    kind: BackupStorageLocation
    metadata:
      labels:
        app.kubernetes.io/managed-by: Nova
      name: default (1)
      namespace: nova-cluster-backup (2)
    spec:
      config:
        region: ru-dc-1 (3)
        s3Url: https://s3.mycompany.local (4)
        checksumAlgorithm: "" (5)
      default: true (6)
      objectStorage:
        bucket: velero-backup-bucket (7)
      provider: aws (8)
      credential:
        name: cloud-credentials (9)
        key: cloud
    1 metadata.name (тип данных: string) - имя CR BackupStorageLocation.
    2 metadata.namespace (тип данных: string) - пространство имен, где регистрируется объектное хранилище.
    3 spec.config.region (тип данных: string) регион для подключения к объектному хранилищу. Заполнение не обязательно.
    4 s3Url (тип данных: string) - точка подключения к объектному хранилищу.
    5 checksumAlgorithm (тип данных: string) - поле, определяющее алгоритм рассчета контрольной суммы, который используется для загрузки объектов в s3.Поддерживаемые значения: CRC32, CRC32C, SHA1, SHA256

    Поле checksumAlgorithm является опциональным. По умолчанию значение равно CRC32.

    Если пользовательское s3 хранилище не поддерживает алгоритмы, приведенные выше, поле checksumAlgorithm следует задать пустым checksumAlgorithm: "". В данном случае контрольная сумма не вычисляется и не будет прикреплена к заголовку запроса в s3.

    6 default (тип данных: bool) - флаг установить объектное хранилище по умолчанию (true).
    7 objectStorage.bucket (тип данных: string) - имя бакета (области хранения, куда будут загружаться резервные копии) для хранения резервных копий.
    8 provider (тип данных: string) - имя провайдера для подключения к объектному хранилищу.
    9 credential.name (тип данных: string) - имя секрета доступа к объектному хранилищу.
    Пример вывода:
    kubectl create -f backup-storage-location.yaml
    
    backupstoragelocation.velero.io/default created

    Через веб-интерфейс

    1. Перейдите в раздел Места хранения резервной копии.

    2. Нажмите кнопку Создать место хранения резервной копии.

      Места хранения резервных копий
    3. Далее необходимо задать параметры конфигурации. В верхней части интерфейса выберите один из следующих способов:

      Через YAML-манифест

      На странице с манифестом заполните поля:

      YAML

      Пример и расшифровка полей конфигурационного файла приведен ниже:


      apiVersion: velero.io/v1
      kind: BackupStorageLocation
      metadata:
        labels:
          app.kubernetes.io/managed-by: Nova
        name: default (1)
        namespace: nova-cluster-backup (2)
      spec:
        config:
          region: ru-dc-1 (3)
          s3Url: https://s3.mycompany.local (4)
          checksumAlgorithm: "" (5)
        default: true (6)
        objectStorage:
          bucket: velero-backup-bucket (7)
        provider: aws (8)
        credential:
          name: cloud-credentials (9)
          key: cloud
      1 metadata.name (тип данных: string) - имя CR BackupStorageLocation.
      2 metadata.namespace (тип данных: string) - пространство имен, где регистрируется объектное хранилище.
      3 spec.config.region (тип данных: string) регион для подключения к объектному хранилищу. Заполнение не обязательно.
      4 s3Url (тип данных: string) - точка подключения к объектному хранилищу.
      5 checksumAlgorithm (тип данных: string) - поле, определяющее алгоритм рассчета контрольной суммы, который используется для загрузки объектов в s3.Поддерживаемые значения: CRC32, CRC32C, SHA1, SHA256

      Поле checksumAlgorithm является опциональным. По умолчанию значение равно CRC32.

      Если пользовательское s3 хранилище не поддерживает алгоритмы, приведенные выше, поле checksumAlgorithm следует задать пустым checksumAlgorithm: "". В данном случае контрольная сумма не вычисляется и не будет прикреплена к заголовку запроса в s3.

      6 default (тип данных: bool) - флаг установить объектное хранилище по умолчанию (true).
      7 objectStorage.bucket (тип данных: string) - имя бакета (области хранения, куда будут загружаться резервные копии) для хранения резервных копий.
      8 provider (тип данных: string) - имя провайдера для подключения к объектному хранилищу.
      9 credential.name (тип данных: string) - имя секрета доступа к объектному хранилищу. ---
      Через заполнение формы

      Некоторые поля спецификации могут не отображаться в этом представлении формы. Пожалуйста, выберите представление YAML для детальной настройки.

      Форма
      • Заполните поле Имя. Параметр отвечает за имя ресурса BackupStorageLocation. Должно быть уникальным в Namespace (пример: default).

      • Заполните поле Namespace. Параметр отвечает за пространство имен, в котором расположен ресурс BackupStorageLocation (пример: my-namespace).

      • Заполните поле Бакет. Параметр отвечает за область хранения, куда будут загружаться резервные копии (пример: myBucket).

      • Заполните Режим доступа. Данный параметр отвечает за то, как Velero может получить доступ к месту хранения резервных копий. Допустимые значения: ReadWrite, ReadOnly (пример: ReadOnly)

      • Заполните Провайдер - имя поставщика хранилища объектов, который будет использоваться для хранения резервных копий (пример: aws).

    4. Нажмите кнопку Создать.

  2. Проверьте статус регистрации объектного хранилища одним из способов:

    Через kubectl
    kubectl get backupstoragelocations.velero.io default -n nova-cluster-backup
    Пример вывода:
    kubectl get backupstoragelocations.velero.io default -n nova-cluster-backup
    
    NAME      PHASE       LAST VALIDATED   AGE   DEFAULT
    default   Available   47s              47s   true
    Через Velero CLI
    velero backup-location get
    Пример вывода:
    velero backup-location get
    
    NAME      PROVIDER   BUCKET/PREFIX          PHASE       LAST VALIDATED                  ACCESS MODE   DEFAULT
    default   aws        velero-backup-bucket   Available   2024-06-10 11:42:05 +0000 UTC   ReadWrite     true

    Значение PHASE Available указывает на то, что бакет объектного хранилища доступен для хранения резервных копий.

    Через веб-интерфейс

    Перейдите в раздел Места хранения резервной копии.

    Места хранения резервной копии

    Статус регистрации места хранения резервных копий можно посмотреть в таблице мест в столбце Фаза. Значение Доступен указывает на то, что бакет объектного хранилища доступен для хранения резервных копий.

5. Восстановление резервных копий узлов

Перед тем, как восстанавливать какой-либо компонент узла или кластера Kubernetes в Nova Container Platform с помощью резервной копии Velero, необходимо сперва восстановить копию сервиса Nova Backup Daemon, в котором хранится резервная копия узлов. Кроме этого, поддерживается сценарий восстановления данных из объектного хранилища без доступа к Velero с помощью Kopia.

В разделах ниже описаны обе процедуры восстановления данных.

5.1. Восстановление данных с помощью Velero

При восстановлении данных с помощью Velero в кластер Kubernetes восстанавливается копия сервиса Nova Backup Daemon, в которой находятся резервные копии узлов. Вы можете перенести данные копии на локальную машину и перейти к восстановлению отдельных компонентов узлов и среды Kubernetes.

Необходимые условия
  • У вас есть доступ к кластеру с учетной записью, имеющей роль cluster-admin в Kubernetes.

  • Вы установили утилиту kubectl для работы с Kubernetes.

  • Вы настроили утилиту velero для работы с резервными копиями Velero.

Порядок действий
  1. Процесс восстановления можно запустить двумя способами:

    Через командную строку

    1. Получите список резервных копий и выберете копию для восстановления:

      kubectl
      kubectl get backups.velero.io -n nova-cluster-backup

      Пример

      kubectl get backups.velero.io -n nova-cluster-backup
      
      NAME                                  AGE
      control-plane-backup-20240611101535   145m
      control-plane-backup-20240611111535   85m
      control-plane-backup-20240611121535   25m
      Velero CLI
      velero backup get

      Пример

      velero backup get
      
      NAME                                  STATUS      ERRORS   WARNINGS   CREATED                         EXPIRES   STORAGE LOCATION   SELECTOR
      control-plane-backup-20240610141525   Completed   0        0          2024-06-10 14:15:25 +0000 UTC   1h        default            app.kubernetes.io/component=nova-backup-daemon
      control-plane-backup-20240610131525   Completed   0        0          2024-06-10 13:15:25 +0000 UTC   33m       default            app.kubernetes.io/component=nova-backup-daemon
      control-plane-backup-20240610161525   Completed   0        0          2024-06-10 12:15:25 +0000 UTC   26m ago   default            app.kubernetes.io/component=nova-backup-daemon
    2. Восстановите выбранную резервную копию в кластер Kubernetes:

      velero restore create <RESTORE_NAME> \
          --from-backup <BACKUP_NAME> \
          --namespace-mappings nova-cluster-backup:nova-cluster-restore

      Для восстановления резервной копии используйте следующие данные:

      • RESTORE_NAME - имя задания на восстановление резервной копии

      • BACKUP_NAME - имя выбранной резервной копии

        Не изменяйте значение ключа --namespace-mappings при создании задания на восстановление резервной копии. Копия восстанавливается в пространство имен nova-cluster-restore, сохраняя работоспособность сервиса Nova Backup Daemon в пространстве имен nova-cluster-backup.

        Пример вывода:
        velero restore create restore-control-plane-backup-20240610161525 \
            --from-backup control-plane-backup-20240610161525 \
            --namespace-mappings nova-cluster-backup:nova-cluster-restore
        
        Restore request "restore-control-plane-backup-20240610161525" submitted successfully.
        Run `velero restore describe restore-control-plane-backup-20240610161525` or `velero restore logs restore-control-plane-backup-20240610161525` for more details.
    3. Проверьте статус задания на восстановление резервной копии:

      velero restore get restore-control-plane-backup-20240610161525
      Пример вывода:
      velero restore get restore-control-plane-backup-20240610161525
      
      NAME                                          BACKUP                                STATUS      STARTED                         COMPLETED                       ERRORS   WARNINGS   CREATED                         SELECTOR
      restore-control-plane-backup-20240610161525   control-plane-backup-20240610161525   Completed   2024-06-11 15:33:51 +0000 UTC   2024-06-11 15:33:57 +0000 UTC   0        3          2024-06-11 15:33:51 +0000 UTC   <none>

    Через веб-интерфейс

    1. Для создания восстановления перейдите в раздел Восстановления.

    2. Нажмите на кнопку Создать восстановление

      Восстановления
    3. Далее необходимо задать параметры конфигурации. В верхней части интерфейса выберите один из следующих способов:

      Через YAML-манифест

      На странице с манифестом заполните поля:

      YAML

      Пример и расшифровка полей конфигурационного файла приведен ниже:


      apiVersion: velero.io/v1
      kind: Restore
      metadata:
        name: nova-restore-redis (1)
        namespace: nova-cluster-backup (2)
      spec:
        backupName: nova-backup-redis (3)
        itemOperationTimeout: 4h
        includedNamespaces: (4)
        - 'nova-redis'
        includedResources: (5)
        - 'configmap'
        - 'pods'
        labelSelector: (6)
          matchLabels:
            app: redis
        namespaceMapping: (7)
          namespace-backup-from: nova-redis
        restorePVs: true
        preserveNodePorts: true
      1 metadata.name (тип данных: string) - имя ресурса Restore. Должно быть уникальным в пространстве имен (Namespace). Заполнение обязательно.
      2 metadata.namespce (тип данных: string) - пространство имен, в котором расположен ресурс Restore. Заполнение обязательно.
      3 spec.backupName (тип данных: string) - уникальное имя резервной копии, из которой выполняется восстановление. Заполнение обязательно.
      4 spec.includedNamespaces (тип данных: []string ) - массив пространств имен для включения в восстановление. * или если не указан, включает все пространства имен. Заполнение необязательно.
      5 spec.includedResources (тип данных: []string ) - массив ресурсов для включения в восстановление. * или если не указан, включает все ресурсы. Заполнение необязательно.
      6 spec.labelSelector (тип данных: object (map)). Задает критерии выбора объектов по меткам. Только объекты, полностью соответствующие этим критериям, будут включены в восстановление. Заполнение необязательно.
      7 spec.namespaceMapping (тип данных: object (map)) - сопоставление исходных и целевых namespace при восстановлении. Не указанные namespace восстанавливаются с исходными именами. Заполнение обязательно.

      Через заполнение формы

      Некоторые поля спецификации могут не отображаться в этом представлении формы. Пожалуйста, выберите представление YAML для детальной настройки.

      Форма
      • Заполните поле Имя. Параметр отвечает за имя ресурса Restore. Должно быть уникальным в Namespace (пример: a-very-special-backup).

      • Заполните поле Namespace. Параметр отвечает за пространство имен, в котором расположен ресурс Restore (пример: my-namespace).

      • Перейдите ко вкладке Резервная копия → Расписание → Резервная копия. Выберите в поле Имя резервной копии/Имя расписания источник для восстановления данных (пример: a-very-special-backup-0).

      • Необязательно. Заполните поле Включить ресурсы массивом ресурсов для включения в востановление.* или если не указан, включает все ресурсы.

      • Необязательно. Заполните поле Селектор меток (AND). Данный параметр задает критерии выбора объектов по меткам. Только объекты, полностью соответствующие этим критериям, будут включены в восстановление (пример: app=velero).

      • Заполните Таймаут операции - время ожидания асинхронных операций BackupItemAction. Значение по умолчанию - 4 часа (пример: 4h).

    4. Нажмите на кнопку Создать.

  2. Получите список Pod’ов сервиса Nova Backup Daemon в пространстве имен nova-cluster-restore:

    kubectl get pods -n nova-cluster-restore
    Пример вывода:
    kubectl get pods -n nova-cluster-restore
    
    NAME                       READY   STATUS    RESTARTS   AGE
    nova-backup-daemon-2xf9p   1/1     Running   0          78s
    nova-backup-daemon-s5zws   1/1     Running   0          78s
    nova-backup-daemon-z4lmn   1/1     Running   0          77s
  3. Скопируйте резервные копии узлов с каждого из Pod:

    PODNAME=<POD_NAME>; \
        for file in $(kubectl exec $PODNAME -n nova-cluster-restore -c backup-daemon -- ls /opt/backup); \
        do kubectl cp -c backup-daemon nova-cluster-restore/$PODNAME:/opt/backup/$file $PWD/$file; done

    В качестве <POD_NAME> укажите имя Pod сервиса Nova Backup Daemon.

    Пример вывода:
    PODNAME=nova-backup-daemon-2xf9p; \
        for file in $(kubectl exec $PODNAME -n nova-cluster-restore -c backup-daemon -- ls /opt/backup); \
        do kubectl cp -c backup-daemon nova-cluster-restore/$PODNAME:/opt/backup/$file $PWD/$file; done

    Файлы резервной копии будут сохранены в текущую директорию на локальной машине пользователя.

  4. Проверьте список полученных файлов:

    Пример вывода:
    ls -la
    
    drwxr-xr-x. 2 root root     4096 Jun 11 19:09 .
    drwxr-xr-x. 7 root root     4096 Jun 11 18:39 ..
    -rw-r--r--. 1 root root 68989925 Jun 11 19:09 etcd_snapshot_nova-v7.6.0_k8s-v1.27.11_2024-06-11_050616.db.tar.gz
    -rw-r--r--. 1 root root 33970260 Jun 11 19:09 nova-master-1-nova-internal_kuberesources_2024-06-11_050616.tar.gz
    -rw-r--r--. 1 root root 33971757 Jun 11 19:08 nova-master-2-nova-internal_kuberesources_2024-06-11_050535.tar.gz
    -rw-r--r--. 1 root root 33973476 Jun 11 19:08 nova-master-3-nova-internal_kuberesources_2024-06-11_050556.tar.gz
    -rw-r--r--. 1 root root   375225 Jun 11 19:09 starvault_snapshot_nova-v7.6.0_2024-06-11_050616.db
  5. После восстановления резервной копии сервиса Nova Backup Daemon удалите задание на восстановление:

    velero restore delete <RESTORE_NAME>

    В качестве <RESTORE_NAME> укажите имя задания на восстановление резервной копии, которое необходимо удалить.

    Пример вывода:
    velero restore delete restore-control-plane-backup-20240610161525
    
    Are you sure you want to continue (Y/N)? y
    Request to delete restore "restore-control-plane-backup-20240610161525" submitted successfully.
    The restore will be fully deleted after all associated data (restore files in object storage) are removed.

    Также удалите восстановленный сервис Nova Backup Daemon:

    Пример вывода:
    kubectl delete ds -n nova-cluster-restore nova-backup-daemon

5.2. Восстановление данных c помощью Kopia

Для восстановления данных из объектного хранилища напрямую без участия Velero вам необходимо будет подключиться к репозиторию резервных копий Kopia с помощью утилиты Kopia CLI. Данный репозиторий инициализируется с помощью Velero автоматически в процессе настройки резервного копирования. Вы сможете получить файлы, которые были подготовлены сервисом Nova Backup Daemon. Имея данные файлы, вы сможете перейти к восстановлению отдельных компонентов узлов и среды Kubernetes.

Необходимые условия

  • Вы установили утилиту Kopia CLI.

  • У вас есть ключ шифрования резервных копий.

  • У вас есть доступ к бакету в объектном хранилище, где сохранены резервные копии.

Порядок действий
  1. Подключитесь к хранилищу резервных копий с помощью Kopia CLI:

    kopia repository connect s3 \
        --access-key=<AWS_ACCESS_KEY_ID> \
        --secret-access-key=<AWS_SECRET_ACCESS_KEY> \
        --bucket=<BUCKET_NAME> \
        --prefix=kopia/<BACKUP_NAME>/ \
        --endpoint=<S3_ENDPOINT_URL>
    
    Enter password to open repository:
    <ENCRYPTION_PASSWORD>

    Для подключения используйте следующие данные:

    • AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY - учетные данные для подключения к объектному хранилищу

    • BUCKET_NAME - имя бакета для хранения резервных копий.

    • S3_ENDPOINT_URL - точка подключения к объектному хранилищу без указания протокола.

      Пример вывода:
      kopia repository connect s3 \
          --access-key="ASIAIOSFODNN7EXAMPLE" \
          --secret-access-key="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" \
          --bucket=velero-backup-bucket \
          --prefix=kopia/<BACKUP_NAME>/ \
          --endpoint=s3.mycompany.local
      
      Enter password to open repository: ********
      
      Connected to repository.
  2. Получите список идентификаторов снапшотов в хранилище резервных копий:

    kopia snapshot list --all -l
    Пример вывода:
    kopia snapshot list –all -l
    
    default@default:/host_pods/1eeb2ac9-36de-4a9c-a1d1-a0ac4618f6fd/volumes/kubernetes.io~empty-dir/backup-volume 2024-06-11 12:15:40 MSK k702d957ec030e814fbc61bcd63d2d316 34 MB drwxrwxrwx files:1 dirs:1 (latest-3,hourly-3) pins:velero-pin 2024-06-11 13:15:40 MSK kf576cc276650d10920e96b48d162ea5a 34 MB drwxrwxrwx files:1 dirs:1 (latest-2,hourly-2) pins:velero-pin 2024-06-11 14:15:40 MSK k2d67a575200c57344846b221c36e9bd6 34 MB drwxrwxrwx files:1 dirs:1 (latest-1,hourly-1,daily-1,weekly-1,monthly-1,annual-1) pins:velero-pin
    
    default@default:/host_pods/4f4aaa17-da1a-4c30-a587-535604a991b1/volumes/kubernetes.io~empty-dir/backup-volume 2024-06-11 12:15:57 MSK kfcafeadd427239980e47f4eceeed244a 94.2 MB drwxrwxrwx files:3 dirs:1 (latest-3,hourly-3) pins:velero-pin 2024-06-11 13:15:58 MSK k31d18913f2a147722f292609b987ad15 93.3 MB drwxrwxrwx files:3 dirs:1 (latest-2,hourly-2) pins:velero-pin 2024-06-11 14:15:58 MSK k570cf06adf55dbf2e87b2959f148c3b2 92.3 MB drwxrwxrwx files:3 dirs:1 (latest-1,hourly-1,daily-1,weekly-1,monthly-1,annual-1) pins:velero-pin
    
    default@default:/host_pods/fd076d09-d8f6-480e-addf-03f3fa33f633/volumes/kubernetes.io~empty-dir/backup-volume 2024-06-11 12:15:47 MSK kf3872b5f18ef1fd536fe1d75cb2fa160 34 MB drwxrwxrwx files:1 dirs:1 (latest-3,hourly-3) pins:velero-pin 2024-06-11 13:15:47 MSK k7113f38a1b63f03caf4ca1cb179550fb 34 MB drwxrwxrwx files:1 dirs:1 (latest-2,hourly-2) pins:velero-pin 2024-06-11 14:15:47 MSK kc950a4ee5808557fe2c3d01df22ff4e3 34 MB drwxrwxrwx files:1 dirs:1 (latest-1,hourly-1,daily-1,weekly-1,monthly-1,annual-1) pins:velero-pin +

    В выводе команды отображен список резервных копий томов backup-volume для трех разных Pod сервиса Nova Backup Daemon, имеющих UID:

    • 1eeb2ac9-36de-4a9c-a1d1-a0ac4618f6fd

    • 4f4aaa17-da1a-4c30-a587-535604a991b1

    • fd076d09-d8f6-480e-addf-03f3fa33f633

      Для того, чтобы проверить соответствие данных резервных копий узлам в Kubernetes, вы можете выполнить команду:

      kubectl get pod -l app.kubernetes.io/component=nova-backup-daemon -n nova-cluster-backup \
          -o custom-columns=PodName:.metadata.name,UID:.metadata.uid,NODE:.spec.nodeName
      Пример вывода:
      kubectl get pod -l app.kubernetes.io/component=nova-backup-daemon -n nova-cluster-backup \
          -o custom-columns=PodName:.metadata.name,UID:.metadata.uid,NODE:.spec.nodeName
      
      PodName                    UID                                    NODE
      nova-backup-daemon-2xf9p   1eeb2ac9-36de-4a9c-a1d1-a0ac4618f6fd   nova-master-2.mycompany.local
      nova-backup-daemon-s5zws   fd076d09-d8f6-480e-addf-03f3fa33f633   nova-master-3.mycompany.local
      nova-backup-daemon-z4lmn   4f4aaa17-da1a-4c30-a587-535604a991b1   nova-master-1.mycompany.local
  3. Восстановите необходимую резервную копию:

    kopia snapshot restore <SNAPSHOT_ID>

    В качестве SNAPSHOT_ID укажите тот идентификатор снапшота, временная метка которого соответствует требуемой точке восстановления.

    Пример вывода:
    kopia snapshot restore k570cf06adf55dbf2e87b2959f148c3b2
    
    Restoring to local filesystem (/root/k570cf06adf55dbf2e87b2959f148c3b2) with parallelism=8...
    Processed 4 (92.3 MB) of 3 (92.3 MB) 69.9 MB/s (100.0%) remaining 0s.
    Processed 4 (92.3 MB) of 3 (92.3 MB) 69.9 MB/s (100.0%) remaining 0s.
    Restored 3 files, 1 directories and 0 symbolic links (92.3 MB).
  4. Проверьте восстановленные данные:

    Пример вывода:
    ls -la /root/k570cf06adf55dbf2e87b2959f148c3b2/
    итого 90160
    drwxrwxrwx.  2 root root     4096 Jun 11 14:15 .
    dr-xr-x---. 89 root root     4096 Jun 11 14:50 ..
    -rw-r--r--.  1 root root 58044113 Jun 11 14:15 etcd_snapshot_nova-v7.6.0_k8s-v1.27.11_2024-06-11_111549.db.tar.gz
    -rw-------.  1 root root 33970429 Jun 11 14:15 nova-master-1-nova-internal_kuberesources_2024-06-11_111549.tar.gz
    -rw-------.  1 root root   292009 Jun 11 14:15 starvault_snapshot_nova-v7.6.0_2024-06-11_111549.db

    Для архивов резервных копий применяется следующая схема именования:

    • Имя архива резервной копии Etcd имеет формат etcd_snapshot_nova-<Версия Nova>_k8s-<Версия Kubernetes>_<Время создания копии>.db.tar.gz.

    • Имена архивов резервных копий конфигураций узлов имеют формат <Имя узла в Kubernetes>_kuberesources_<Время создания копии>.tar.gz.

    • Имя архива резервной копии StarVault имеет формат starvault_snapshot_nova-<Версия Nova>_<Время создания копии>1.db.

      Резервная копия только одного из узлов включает копии Etcd и StarVault.

  5. Повторите действия по восстановлению для оставшихся Pod’ов сервиса Nova Backup Daemon.

  6. Отключитесь от хранилища резервных копий:

    kopia repository disconnect

В настоящее время в Velero используется общий статический ключ шифрования для всех создаваемых репозиториев резервного копирования. Это означает, что любой, кто имеет доступ к вашему хранилищу резервных копий, может расшифровать ваши резервные копии. Обязательно ограничьте доступ к хранилищу резервных копий соответствующим образом.