Поделиться через


Резервное копирование, восстановление кластеров рабочих нагрузок с помощью Velero

Область применения: AKS в Azure Stack HCI 22H2, AKS на Windows Server

В этой статье описывается, как установить и использовать Velero для резервного копирования и восстановления рабочих нагрузок и целевых кластеров с помощью Хранилище BLOB-объектов Azure или хранилища MinIO в AKS, включенном Azure Arc.

Velero — это стандартное средство сообщества с открытым кодом для резервного копирования и восстановления объектов кластера Kubernetes и постоянных томов. Она поддерживает различные поставщики хранилища для хранения резервных копий. Если кластер Kubernetes целевого объекта AKS Arc завершает работу и завершается сбоем, можно использовать резервную копию Velero для восстановления содержимого и внутренних объектов API в новом кластере.

Если вы не хотите хранить резервные копии в Хранилище BLOB-объектов Azure, можно использовать MinIO с Velero. В этой статье описывается, как установить и настроить Velero для использования Хранилище BLOB-объектов Azure или установки и настройки Velero для использования хранилища MinIO.

Примечание.

Velero официально не поддерживает Microsoft Windows. При тестировании команда Velero могла создавать резервные копии только приложений Windows без отслеживания состояния. Restic интеграция и резервные копии приложений с отслеживанием состояния или постоянных томов не поддерживаются.

Необходимые компоненты

Перед началом развертывания Velero выполните следующие предварительные требования:

Установка Velero с помощью Хранилище BLOB-объектов Azure

В этом разделе описано, как установить Velero и использовать Хранилище BLOB-объектов Azure для резервных копий. Если вы не хотите хранить резервные копии в Azure, перейдите к разделу "Установка Velero с хранилищем MiniO".

  1. Откройте PowerShell от имени администратора.

  2. Войдите в Azure с помощью Azure CLI:

    az login --use-device-code   
    
  3. Установите интерфейс командной строки Velero, выполнив следующую команду:

    Примечание.

    Флаг --use-restic не поддерживается в Velero версии 1.10 и более поздних версиях. Флаг поддерживается только в версии 1.9.x.

    choco install velero   
    
  4. При необходимости перейдите в подписку Azure, которую вы хотите использовать для резервных копий.

    По умолчанию Velero сохраняет резервные копии в той же подписке Azure, что и виртуальные машины и диски, и не позволяет восстанавливать резервные копии в группе ресурсов в другой подписке. Чтобы включить операции резервного копирования и восстановления между подписками, укажите подписку, используемую для резервных копий. Этот шаг можно пропустить, если вы уже находитесь в подписке, которую вы хотите использовать для резервных копий.

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

    1. Используйте имя подписки для поиска идентификатора подписки:

      $AZURE_BACKUP_SUBSCRIPTION_NAME="<NAME_OF_TARGET_SUBSCRIPTION>"
      $AZURE_BACKUP_SUBSCRIPTION_ID=$(az account list --query="[?name=='$AZURE_BACKUP_SUBSCRIPTION_NAME'].id | [0]" -o tsv)
      
    2. Затем измените подписку:

      az account set -s $AZURE_BACKUP_SUBSCRIPTION_ID
      
  5. Создайте учетную запись хранения Azure и контейнер BLOB-объектов.

    При использовании Хранилище BLOB-объектов Azure для резервного копирования Velero требуется учетная запись хранения и контейнер BLOB-объектов для хранения резервных копий. В следующем примере показана учетная запись хранения, созданная в новой группе ресурсов Velero_Backups .

    Необходимо создать учетную запись хранения с глобально уникальным идентификатором, который можно использовать в DNS. Пример скрипта использует uuidgen приложение для случайного создания уникального имени. Вы можете использовать любой метод, если имя следует правилам именования Azure для учетных записей хранения.

    Учетная запись хранения создается с возможностями шифрования неактивных данных (с помощью управляемых корпорацией Майкрософт ключей) и настроена только для разрешения доступа через подключения HTTPS.

    Чтобы создать учетную запись хранения и контейнер BLOB-объектов, выполните следующие действия.

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

      $AZURE_BACKUP_RESOURCE_GROUP="Velero_Backups"
      az group create -n $AZURE_BACKUP_RESOURCE_GROUP --location WestUS
      
    2. Создайте учетную запись хранения.

      $AZURE_STORAGE_ACCOUNT_ID="<NAME_OF_ACCOUNT_TO_ASSIGN>"
      
      az storage account create --name $AZURE_STORAGE_ACCOUNT_ID --resource-group $AZURE_BACKUP_RESOURCE_GROUP --sku Standard_GRS --encryption-services blob --https-only true --kind BlobStorage --access-tier Hot
      
    3. Создайте контейнер BLOB-объектов:

      $BLOB_CONTAINER="velero"
      az storage container create -n $BLOB_CONTAINER --public-access off --account-name $AZURE_STORAGE_ACCOUNT_ID
      

      В примере используется контейнер BLOB-объектов с именем velero. Можно использовать другое имя, предпочтительно уникальное для одного кластера Kubernetes.

  6. Создайте субъект-службу:

    1. Получите идентификатор подписки и идентификатор клиента для учетной записи Azure:

      $AZURE_SUBSCRIPTION_ID=(az account list --query '[?isDefault].id' -o tsv)
      $AZURE_TENANT_ID=(az account list --query '[?isDefault].tenantId' -o tsv) 
      
    2. Создайте субъект-службу с привилегиями участника.

      Вы можете создать субъект-службу с ролью участника или использовать пользовательскую роль:

      • Роль участника. Роль участника предоставляет доступ на уровне подписки, поэтому при назначении этой роли обязательно защитите эти учетные данные.
      • Пользовательская роль: если вам нужна более строгая роль, используйте пользовательскую роль.

      Назначьте роль участника:

      Если вы будете использовать Velero для резервного копирования нескольких кластеров с несколькими контейнерами BLOB-объектов, вы можете создать уникальное имя пользователя для каждого кластера вместо использования имени velero.

      Чтобы создать субъект-службу с ролью участника, используйте следующую команду. Замените собственный идентификатор подписки и, при необходимости, собственное имя субъекта-службы. Идентификатор Microsoft Entra создаст секрет для вас.

      $AZURE_CLIENT_SECRET=(az ad sp create-for-rbac --name "velero" --role "Contributor" --query 'password' -o tsv --scopes  /subscriptions/$AZURE_SUBSCRIPTION_ID)
      

      При необходимости внесите следующие изменения в команду:

      • Если вы планируете использовать разные подписки для кластера рабочей нагрузки и файлов резервной копии Velero, укажите оба идентификатора подписок, как показано в следующем примере:

        $AZURE_CLIENT_SECRET=(az ad sp create-for-rbac --name "velero" --role "Contributor" --query 'password' -o tsv --scopes  /subscriptions/$AZURE_SUBSCRIPTION_ID /subscriptions/$AZURE_BACKUP_SUBSCRIPTION_ID)
        
      • Если вы не хотите использовать velero в качестве имени субъекта-службы, убедитесь, что --name выбранный вариант является уникальным в идентификаторе Microsoft Entra и не конфликтует с другими субъектами-службами или регистрацией приложений.

      Внимание

      Секрет отображается только на этом шаге, когда субъект-служба создается. Обязательно запишите секрет для использования в будущих шагах.

      Используйте пользовательскую роль:

      Если вы хотите включить минимальные действия поставщика ресурсов, создайте пользовательскую роль и назначьте эту роль субъекту-службе.

      1. Создайте файл с именем azure-role.json со следующим содержимым. Замените собственное имя пользовательской роли и идентификатор подписки:

        {
            "Name": <CUSTOM_ROLE_NAME>,
            "Id": null,
            "IsCustom": true,
            "Description": "Velero related permissions to perform backups, restores and deletions",
            "Actions": [
                "Microsoft.Compute/disks/read",
                "Microsoft.Compute/disks/write",
                "Microsoft.Compute/disks/endGetAccess/action",
                "Microsoft.Compute/disks/beginGetAccess/action",
                "Microsoft.Compute/snapshots/read",
                "Microsoft.Compute/snapshots/write",
                "Microsoft.Compute/snapshots/delete",
                "Microsoft.Storage/storageAccounts/listkeys/action",
                "Microsoft.Storage/storageAccounts/regeneratekey/action",
                "Microsoft.Storage/storageAccounts/read"
            ],
            "NotActions": [],
            "AssignableScopes": [
              "<SUBSCRIPTION_ID>"
            ]
        }
        
      2. Создайте пользовательскую роль и субъект-службу:

        az role definition create --role-definition azure-role.json
        
        $AZURE_CLIENT_SECRET=(az ad sp create-for-rbac --name "velero" --role "<CUSTOM_ROLE>" --query 'password' -o tsv --scopes  /subscriptions/$AZURE_SUBSCRIPTION_ID)
        

      Дополнительные сведения о создании пользовательских ролей см. в разделе "Настройка разрешений для Velero".

  7. Получите имя субъекта-службы и назначьте это имя переменной AZURE_CLIENT_ID :

    $AZURE_CLIENT_ID=(az ad sp list --display-name "velero" --query '[0].appId' -o tsv)
    

    Примечание.

    Срок действия субъектов-служб истекает. Чтобы узнать, когда истекает срок действия нового субъекта-службы, выполните следующую команду: az ad sp show --id $AZURE_CLIENT_ID

  8. Создайте файл, содержащий переменные, необходимые для установки Velero. Команда выглядит примерно так:

    AZURE_SUBSCRIPTION_ID=${AZURE_SUBSCRIPTION_ID}
    AZURE_TENANT_ID=${AZURE_TENANT_ID}
    AZURE_CLIENT_ID=${AZURE_CLIENT_ID}
    AZURE_CLIENT_SECRET=${AZURE_CLIENT_SECRET}
    AZURE_RESOURCE_GROUP=${AZURE_BACKUP_RESOURCE_GROUP}
    AZURE_CLOUD_NAME=AzurePublicCloud" | Out-File -FilePath ./credentials-velero.txt
    

    Внимание

    Удалите этот файл после установки Velero. Секрет клиента находится в виде открытого текста, что может представлять угрозу безопасности.

    Прежде чем продолжить, убедитесь, что файл правильно отформатирован. Расширение имени файла не имеет значения.

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

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

    1. Установите Velero с помощью следующей команды. Вам потребуется настроить пример команды.

      velero install --provider azure --plugins velero/velero-plugin-for-microsoft-azure:v1.5.0 --bucket $BLOB_CONTAINER --secret-file ./credentials-velero.txt --backup-location-config resourceGroup=$AZURE_BACKUP_RESOURCE_GROUP,storageAccount=$AZURE_STORAGE_ACCOUNT_ID,subscriptionId=$AZURE_BACKUP_SUBSCRIPTION_ID --use-restic
      

      При необходимости задайте следующие переменные:

      • Команда устанавливает подключаемый модуль Microsoft Azure, который должен быть совместим с используемой версией интерфейса командной строки Velero. В примере команды используется подключаемый модуль Microsoft Azure версии 1.5.0, совместимый с последней версией интерфейса командной строки Velero 1.9.0. Чтобы узнать, какая версия подключаемого модуля Microsoft Azure устанавливается с версией CLI Valero, см. матрицу совместимости.

      • Обязательно включите --use-restic параметр, чтобы включить резервное копирование томов Kubernetes на уровне файловой системы с помощью Restic. Restic можно использовать для резервного копирования любого типа тома Kubernetes. По умолчанию Velero поддерживает создание моментальных снимков постоянных томов для томов Amazon EBS, Azure Управляемые диски и постоянных дисков Google. В AKS Arc тома Kubernetes используют общие тома кластера для хранения данных. Restic Поэтому необходимо включить моментальные снимки постоянных томов. AKS Arc в настоящее время не поддерживает моментальные снимки томов.

      • subscriptionId=$AZURE_BACKUP_SUBSCRIPTION_ID является необязательным. Его необходимо включить только в том случае, если Velero и кластер рабочей нагрузки имеют разные идентификаторы подписок. Если они используют ту же подписку Azure, можно удалить subscriptionId параметр, а файл credentials-velero.txt предоставит эти сведения.

      Служба Velero запускается автоматически при установке.

    2. Проверьте, работает ли служба Velero правильно:

      kubectl -n velero get pods
      kubectl logs deployment/velero -n velero
      

      Команда get pods должна показать, что выполняются модули pod Velero.

Установка Velero с хранилищем MinIO

В этом разделе описано, как установить Velero и использовать хранилище MinIO для резервных копий. Если вы предпочитаете использовать Хранилище BLOB-объектов Azure для резервных копий, перейдите к разделу Install Velero с Хранилище BLOB-объектов Azure.

Если вы не хотите хранить резервные копии в MinIO, перейдите к разделу "Настройка Velero для использования Хранилище BLOB-объектов Azure".

  1. Установите интерфейс командной строки Velero, выполнив следующую команду. Установите, Chocolately если вы еще не сделали этого.

    choco install velero
    
  2. Установите MinIO:

    1. Создайте постоянный том для хранения резервной копии MinIO. В примере создается постоянный том в классе хранилища по умолчанию в AKS Arc, который уже существует.

      1. Создайте ФАЙЛ YAML с именем minio-pvc-storage.yaml со следующим содержимым:

        kind: PersistentVolumeClaim
        apiVersion: v1
        metadata: 
        name: minio-pv-claim 
        spec: 
        storageClassName: default 
        accessModes: 
           - ReadWriteOnce 
        resources: 
           requests: 
              storage: 100Gi 
        

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

        kubectl create -f minio-pvc-storage.yaml
        
      2. Создайте файл развертывания minio-deployment.yaml для запуска MinIO. Включите следующее содержимое. Развертывание будет использовать созданный постоянный том.

        apiVersion: apps/v1
        kind: Deployment
        metadata:
        name: minio-deployment 
        spec: 
        selector: 
           matchLabels: 
              app: minio 
        strategy: 
           type: Recreate 
        template: 
           metadata: 
              labels: 
              app: minio 
           spec: 
              volumes: 
              - name: storage 
              persistentVolumeClaim: 
                 claimName: minio-pv-claim 
              containers: 
              - name: minio 
              image: minio/minio:latest 
              args:
              - server 
              - /storage 
              env: 
              - name: MINIO_ACCESS_KEY 
                value: "<you can define this>" 
              - name: MINIO_SECRET_KEY 
                value: "<you can define this>" 
              ports: 
              - containerPort: 9000 
                hostPort: 9000 
              volumeMounts: 
              - name: storage  
                mountPath: "/storage" 
        

        Затем создайте развертывание:

        kubectl create -f minio-deployment.yaml
        
    2. Создайте службу Kubernetes с именем minio-service.yaml. Эта служба предоставит внешние IP-адреса модулем pod MinIO.

      Создайте ФАЙЛ YAML со следующими параметрами, чтобы настроить службу:

      apiVersion: v1 
      kind: Service 
      metadata: 
      name: minio-service 
      spec: 
      type: LoadBalancer 
      ports: 
         - port: 9000 
           targetPort: 9000 
           protocol: TCP 
      selector: 
         app: minio 
      

      Затем создайте службу:

      kubectl create -f mino-service.yaml
      
    3. Получите внешний IP-адрес pod MinIO, выполнив следующую команду. Этот адрес будет использоваться для установки Velero.

      kubectl get svc
      
    4. Чтобы проверить, работает ли MinIO, войдите в IP-адрес в браузере или используйте клиент MinIO, как описано ниже.

      Установите клиент MinIO и просмотрите файлы MinIO.

      Скачайте клиент MinIO:

      Invoke-WebRequest -Uri "https://dl.minio.io/client/mc/release/windows-amd64/mc.exe" -OutFile "C:\mc.exe
      

      Затем задайте псевдоним:

      mc alias set minio http://10.10.77.6:9000 "minio_access_key" "minio_secret_key" --api s3v4
      

      Наконец, просмотрите установку MinIO:

      mc ls minio
      
    5. Создайте контейнер для хранения файлов Velero. Этот контейнер будет использоваться в установке Velero.

      mc mb minio/velero-backup
      
    6. Создайте файл minio.credentials MinIO со следующими сведениями:

      [default] 
      aws_access_key_id=<minio_access_key> 
      aws_secret_access_key=<minio_secret_key> 
      
  3. Установите Velero:

    velero install --provider aws --bucket velero-backup --secret-file .\minio.credentials --backup-location-config region=minio,s3ForcePathStyle=true,s3Url=http://10.10.77.6:9000 --plugins velero/velero-plugin-for-aws:v1.1.0 --use-restic
    

    Перед выполнением этой команды проверьте имя контейнера, учетные данные MinIO и внешний IP-адрес MinIO.

  4. Проверьте, работает ли служба Velero правильно:

    kubectl -n velero get pods
    kubectl logs deployment/velero -n Velero
    

    Команда get pods должна показать, что выполняются модули pod Velero.

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

Вы можете создать резервную копию или восстановить все объекты в кластере или фильтровать объекты по типу, пространству имен и /или метке.

Создайте резервную копию.

Используйте команду Velero backup create для создания резервных копий в выбранном хранилище. В следующих примерах используется --default-volumes-to-restic флаг, который создает моментальный снимок постоянных томов. Другие параметры резервного копирования см. в справочнике по резервному копированию Velero.

  • Резервное копирование всех пространств имен в кластере по запросу:

    velero backup create <BACKUP-NAME> --default-volumes-to-restic
    
  • Резервное копирование одного пространства имен в кластере по запросу:

    velero backup create <BACKUP-NAME> --include-namespaces <NAMESPACE1> --default-volumes-to-restic
    
  • Резервное копирование по запросу нескольких выбранных пространств имен в кластере:

    velero backup create <BACKUP-NAME> --include-namespaces <NAMESPACE-1>, <NAMESPACE-2> --default-volumes-to-restic
    

Проверка хода выполнения резервного копирования

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

    velero backup describe <BACKUP-NAME>
    
  • Если вы используете Хранилище BLOB-объектов Azure для резервных копий, вы можете просмотреть резервную копию в учетной записи хранения Azure в созданном blob-объекте или контейнере.

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

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

Команда restore позволяет восстановить все объекты и постоянные тома из ранее созданной резервной копии. Можно также восстановить только отфильтрованное подмножество объектов и постоянных томов. Дополнительные параметры резервного копирования см. в разделе "Фильтрация ресурсов".

В кластере, в который требуется восстановить резервную копию (целевой кластер):

  1. Разверните Velero с помощью приведенных выше инструкций. Используйте те же учетные данные Azure, которые использовались для исходного кластера.

  2. Убедитесь, что объект резервного копирования Velero был создан, выполнив следующую команду. Ресурсы Velero синхронизируются с файлами резервной копии в облачном хранилище.

    velero backup describe <BACKUP-NAME>
    
  3. Убедившись, что правое резервное копирование (BACKUP-NAME) присутствует, восстановите все объекты в резервной копии:

    velero restore create --from-backup <BACKUP-NAME>
    

Получение справки по командам Velero

Чтобы просмотреть все параметры, связанные с определенной командой Velero, используйте --help флаг с командой. Например, отображаются все параметры, velero restore create --help связанные с командой velero restore create .

Например, чтобы вывести список всех параметров velero restore, выполните команду velero restore --help, которая возвращает следующие сведения:

  velero restore [command]
  Available Commands:
  create      Create a restore
  delete      Delete restores
  describe    Describe restores
  get         Get restores
  logs        Get restore logs

Удаление Velero

Чтобы удалить Velero из кластера и удалить все ресурсы, созданные установкой Velero, выполните следующие команды:

kubectl delete namespace/velero clusterrolebinding/velero 
kubectl delete crds -l component=velero

Следующие шаги