Резервное копирование, восстановление кластеров рабочих нагрузок с помощью 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 выполните следующие предварительные требования:
- Установка Azure CLI.
- Установите
Chocolatey
. Вы можете установитьChocolatey
клиент Velero, который включает интерфейс командной строки Velero на компьютере Windows.
Установка Velero с помощью Хранилище BLOB-объектов Azure
В этом разделе описано, как установить Velero и использовать Хранилище BLOB-объектов Azure для резервных копий. Если вы не хотите хранить резервные копии в Azure, перейдите к разделу "Установка Velero с хранилищем MiniO".
Откройте PowerShell от имени администратора.
Войдите в Azure с помощью Azure CLI:
az login --use-device-code
Установите интерфейс командной строки Velero, выполнив следующую команду:
Примечание.
Флаг
--use-restic
не поддерживается в Velero версии 1.10 и более поздних версиях. Флаг поддерживается только в версии 1.9.x.choco install velero
При необходимости перейдите в подписку Azure, которую вы хотите использовать для резервных копий.
По умолчанию Velero сохраняет резервные копии в той же подписке Azure, что и виртуальные машины и диски, и не позволяет восстанавливать резервные копии в группе ресурсов в другой подписке. Чтобы включить операции резервного копирования и восстановления между подписками, укажите подписку, используемую для резервных копий. Этот шаг можно пропустить, если вы уже находитесь в подписке, которую вы хотите использовать для резервных копий.
Перейдите в подписку, которую вы хотите использовать для резервных копий:
Используйте имя подписки для поиска идентификатора подписки:
$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)
Затем измените подписку:
az account set -s $AZURE_BACKUP_SUBSCRIPTION_ID
Создайте учетную запись хранения Azure и контейнер BLOB-объектов.
При использовании Хранилище BLOB-объектов Azure для резервного копирования Velero требуется учетная запись хранения и контейнер BLOB-объектов для хранения резервных копий. В следующем примере показана учетная запись хранения, созданная в новой группе ресурсов Velero_Backups .
Необходимо создать учетную запись хранения с глобально уникальным идентификатором, который можно использовать в DNS. Пример скрипта использует
uuidgen
приложение для случайного создания уникального имени. Вы можете использовать любой метод, если имя следует правилам именования Azure для учетных записей хранения.Учетная запись хранения создается с возможностями шифрования неактивных данных (с помощью управляемых корпорацией Майкрософт ключей) и настроена только для разрешения доступа через подключения HTTPS.
Чтобы создать учетную запись хранения и контейнер BLOB-объектов, выполните следующие действия.
Создайте группу ресурсов для учетной записи хранения резервных копий. При необходимости измените каталоги на предпочитаемое расположение и выполните следующие команды:
$AZURE_BACKUP_RESOURCE_GROUP="Velero_Backups" az group create -n $AZURE_BACKUP_RESOURCE_GROUP --location WestUS
Создайте учетную запись хранения.
$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
Создайте контейнер BLOB-объектов:
$BLOB_CONTAINER="velero" az storage container create -n $BLOB_CONTAINER --public-access off --account-name $AZURE_STORAGE_ACCOUNT_ID
В примере используется контейнер BLOB-объектов с именем
velero
. Можно использовать другое имя, предпочтительно уникальное для одного кластера Kubernetes.
Создайте субъект-службу:
Получите идентификатор подписки и идентификатор клиента для учетной записи Azure:
$AZURE_SUBSCRIPTION_ID=(az account list --query '[?isDefault].id' -o tsv) $AZURE_TENANT_ID=(az account list --query '[?isDefault].tenantId' -o tsv)
Создайте субъект-службу с привилегиями участника.
Вы можете создать субъект-службу с ролью участника или использовать пользовательскую роль:
- Роль участника. Роль участника предоставляет доступ на уровне подписки, поэтому при назначении этой роли обязательно защитите эти учетные данные.
- Пользовательская роль: если вам нужна более строгая роль, используйте пользовательскую роль.
Назначьте роль участника:
Если вы будете использовать 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 и не конфликтует с другими субъектами-службами или регистрацией приложений.
Внимание
Секрет отображается только на этом шаге, когда субъект-служба создается. Обязательно запишите секрет для использования в будущих шагах.
Используйте пользовательскую роль:
Если вы хотите включить минимальные действия поставщика ресурсов, создайте пользовательскую роль и назначьте эту роль субъекту-службе.
Создайте файл с именем 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>" ] }
Создайте пользовательскую роль и субъект-службу:
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".
Получите имя субъекта-службы и назначьте это имя переменной 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
Создайте файл, содержащий переменные, необходимые для установки 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. Секрет клиента находится в виде открытого текста, что может представлять угрозу безопасности.
Прежде чем продолжить, убедитесь, что файл правильно отформатирован. Расширение имени файла не имеет значения.
- Удалите все дополнительные пробелы или вкладки.
- Убедитесь, что имена переменных правильны.
Установите и запустите Velero.
Установите Velero в кластере и запустите развертывание. Эта процедура создает вызываемое
velero
пространство имен и добавляет развертывание с именемvelero
в пространство имен.Установите 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 запускается автоматически при установке.
Проверьте, работает ли служба 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".
Установите интерфейс командной строки Velero, выполнив следующую команду. Установите,
Chocolately
если вы еще не сделали этого.choco install velero
Установите MinIO:
Создайте постоянный том для хранения резервной копии MinIO. В примере создается постоянный том в классе хранилища по умолчанию в AKS Arc, который уже существует.
Создайте ФАЙЛ 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
Создайте файл развертывания 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
Создайте службу 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
Получите внешний IP-адрес pod MinIO, выполнив следующую команду. Этот адрес будет использоваться для установки Velero.
kubectl get svc
Чтобы проверить, работает ли 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
Создайте контейнер для хранения файлов Velero. Этот контейнер будет использоваться в установке Velero.
mc mb minio/velero-backup
Создайте файл minio.credentials MinIO со следующими сведениями:
[default] aws_access_key_id=<minio_access_key> aws_secret_access_key=<minio_secret_key>
Установите 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.
Проверьте, работает ли служба 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
позволяет восстановить все объекты и постоянные тома из ранее созданной резервной копии. Можно также восстановить только отфильтрованное подмножество объектов и постоянных томов. Дополнительные параметры резервного копирования см. в разделе "Фильтрация ресурсов".
В кластере, в который требуется восстановить резервную копию (целевой кластер):
Разверните Velero с помощью приведенных выше инструкций. Используйте те же учетные данные Azure, которые использовались для исходного кластера.
Убедитесь, что объект резервного копирования Velero был создан, выполнив следующую команду. Ресурсы Velero синхронизируются с файлами резервной копии в облачном хранилище.
velero backup describe <BACKUP-NAME>
Убедившись, что правое резервное копирование (
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