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

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

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

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

Для установки модуля Data Protection в Nova Container Platform с настройками по умолчанию используйте представленный далее манифест кастомизации.

Манифест кастомизации
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
  name: nova-release-velero-main
  namespace: nova-gitops
  labels:
    nova-application-group: data-protection
    kustomization.nova-platform.io/cluster: "true"
spec:
  serviceAccountName: kustomize-controller
  commonMetadata:
    labels:
      app.kubernetes.io/managed-by: Nova
  interval: 10m
  retryInterval: 30s
  timeout: 5m
  prune: false
  force: true
  dependsOn:
  - name: nova-release-cluster-crds
  sourceRef:
    kind: GitRepository
    name: nova-release-gitrepo-main
  path: ./resources/velero/main
  postBuild:
    substituteFrom:
    - kind: ConfigMap
      name: nova-gitops-common-substitute-config
  healthChecks:
    - apiVersion: apps/v1
      kind: Deployment
      name: velero
      namespace: nova-cluster-backup
    - apiVersion: apps/v1
      kind: DaemonSet
      name: node-agent
      namespace: nova-cluster-backup

1.1. Установка в Kubernetes

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

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

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

Порядок действий
  1. Сохраните полученный манифест и установите его в кластер Kubernetes с помощью Nova Console или kubectl.

    Пример вывода:
    kubectl apply -f nova-release-cluster-backup-velero.yaml
    
    kustomization.kustomize.toolkit.fluxcd.io/nova-release-velero-main created
  2. Проверьте статус кастомизации:

    kubectl get ks nova-release-velero-main -n nova-gitops
    Пример вывода:
    kubectl get ks nova-release-velero-main -n nova-gitops
    
    NAME                       AGE   READY   STATUS
    nova-release-velero-main   55s   True    Applied revision: v6.5.0@sha1:86f53cb7e4dbacb29fa42f2c1c9814fa6aec7a07
  3. Проверьте состояние запущенных компонентов Velero, выполнив команду:

    kubectl get pods -n nova-cluster-backup
    Пример вывода:
    kubectl get pods -n nova-cluster-backup
    
    NAME                           READY   STATUS    RESTARTS   AGE
    velero-7877767f4-zkdbh         1/1     Running   0          22s
    node-agent-b4wrh               1/1     Running   0          22s
    node-agent-hpcj5               1/1     Running   0          22s
    node-agent-tmvvp               1/1     Running   0          22s
    node-agent-vhh6b               1/1     Running   0          22s
    node-agent-w2qbb               1/1     Running   0          22s
    node-agent-xk5l4               1/1     Running   0          22s
    node-agent-xlh6k               1/1     Running   0          22s

    На данном этапе установка модуля с настройками по умолчанию завершена, и вы можете перейти к его настройке.

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

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

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

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

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

Секрет доступа к объектному хранилищу должен быть размещен в среде 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

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

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

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

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

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

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

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

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

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

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

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

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

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

Для того, чтобы создать резервную копию, необходимо сначала создать место, в котором будет сохранена резервная копия. Для корректной работы необходимо хотя бы 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 указывает на то, что бакет объектного хранилища доступен для хранения резервных копий.

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

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

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

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

На данном этапе настройка хранилища резервных копий завершена, и вы можете перейти к настройкам планов резервного копирования.

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

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

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

3.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-v6.5.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-v6.5.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

3.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-v6.5.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-v6.5.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 используется общий статический ключ шифрования для всех создаваемых репозиториев резервного копирования. Это означает, что любой, кто имеет доступ к вашему хранилищу резервных копий, может расшифровать ваши резервные копии. Обязательно ограничьте доступ к хранилищу резервных копий соответствующим образом.