Criar cópias de segurança e restaurar clusters de cargas de trabalho com o Velero

Aplica-se a: AKS no Azure Stack HCI 22H2, AKS no Windows Server

Este artigo descreve como instalar e utilizar o Velero para fazer cópias de segurança e restaurar a carga de trabalho e os clusters de destino com o armazenamento Armazenamento de Blobs do Azure ou MinIO no AKS ativado pelo Azure Arc.

O Velero é uma ferramenta padrão de comunidade open source para criar cópias de segurança e restaurar objetos de cluster do Kubernetes e volumes persistentes. Suporta vários fornecedores de armazenamento para armazenar as cópias de segurança. Se um cluster do Kubernetes de destino do AKS Arc falhar e não conseguir recuperar, pode utilizar uma cópia de segurança velero para restaurar os respetivos conteúdos e objetos de API internos para um novo cluster.

Se não quiser armazenar as suas cópias de segurança no Armazenamento de Blobs do Azure, pode utilizar o MinIO com o Velero. Este artigo descreve como instalar e configurar o Velero para utilizar Armazenamento de Blobs do Azure ou instalar e configurar o Velero para utilizar o armazenamento MinIO.

Nota

O Velero não suporta oficialmente o Microsoft Windows. Nos testes, a equipa velero só conseguiu criar cópias de segurança de aplicações Windows sem estado. Restic a integração e as cópias de segurança de aplicações com estado ou volumes persistentes não foram suportadas.

Pré-requisitos

Conclua estes pré-requisitos antes de iniciar a implementação do Velero:

Instalar o Velero com Armazenamento de Blobs do Azure

Os procedimentos nesta secção descrevem como instalar o Velero e utilizar Armazenamento de Blobs do Azure para cópias de segurança. Se não quiser armazenar as cópias de segurança no Azure, aceda a Instalar o Velero com o armazenamento MiniO.

  1. Abra o PowerShell como um Administrador.

  2. Inicie sessão no Azure com a CLI do Azure:

    az login --use-device-code   
    
  3. Instale a CLI do Velero ao executar o seguinte comando:

Nota

O sinalizador --use-restic já não é suportado na versão velero 1.10+, para poder utilizar o sinalizador versão 1.9.x é necessário

choco install velero   
  1. Se necessário, altere para a subscrição do Azure que pretende utilizar para as cópias de segurança.

    Por predefinição, o Velero armazena cópias de segurança na mesma subscrição do Azure que as suas VMs e discos e não lhe permite restaurar cópias de segurança para um grupo de recursos numa subscrição diferente. Para ativar cópias de segurança e restauros entre subscrições, especifique uma subscrição a utilizar para as suas cópias de segurança. Pode ignorar este passo se já estiver na subscrição que pretende utilizar para as suas cópias de segurança.

    Mude para a subscrição que pretende utilizar para as suas cópias de segurança:

    1. Utilize o nome da subscrição para encontrar o ID da subscrição:

      $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. Em seguida, altere a subscrição:

      az account set -s $AZURE_BACKUP_SUBSCRIPTION_ID
      
  2. Crie uma conta de armazenamento do Azure e um contentor de blobs.

    Quando utiliza Armazenamento de Blobs do Azure para cópias de segurança, o Velero necessita de uma conta de armazenamento e de um contentor de blobs para armazenar as cópias de segurança. O exemplo seguinte mostra a conta de armazenamento criada num novo grupo de recursos Velero_Backups .

    Tem de criar a conta de armazenamento com um ID exclusivo global que possa ser utilizado no DNS. O script de exemplo utiliza a aplicação uuidgen para gerar aleatoriamente um nome exclusivo. Pode utilizar qualquer método desde que o nome siga as regras de nomenclatura do Azure para contas de armazenamento.

    A conta de armazenamento é criada com funcionalidades de encriptação inativas (utilizando chaves geridas pela Microsoft) e está configurada para permitir apenas o acesso através de ligações HTTPS.

    Para criar a conta de armazenamento e o contentor de blobs, siga estes passos:

    1. Crie um grupo de recursos para a conta de armazenamento de cópias de segurança. Altere os diretórios para a sua localização preferida, se necessário, e execute os seguintes comandos:

      $AZURE_BACKUP_RESOURCE_GROUP="Velero_Backups"
      az group create -n $AZURE_BACKUP_RESOURCE_GROUP --location WestUS
      
    2. Crie a conta de armazenamento:

      $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. Criar um contentor de blobs:

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

      O exemplo utiliza um contentor de blobs com o nome velero. Pode utilizar um nome diferente, preferencialmente exclusivo para um único cluster do Kubernetes.

  3. Criar um principal de serviço:

    1. Obtenha o ID da subscrição e o ID do inquilino da sua conta do Azure:

      $AZURE_SUBSCRIPTION_ID=(az account list --query '[?isDefault].id' -o tsv)
      $AZURE_TENANT_ID=(az account list --query '[?isDefault].tenantId' -o tsv) 
      
    2. Crie um principal de serviço que tenha privilégios de Contribuidor.

      Pode criar um principal de serviço com a função Contribuidor ou utilizar uma função personalizada:

      • Função de contribuidor: A função Contribuidor concede acesso ao nível da subscrição, por isso, certifique-se de que protege esta credencial se atribuir essa função.
      • Função personalizada: Se precisar de uma função mais restritiva, utilize uma função personalizada.

      Atribuir a função contribuidor:

      Se estiver a utilizar o Velero para criar uma cópia de segurança de vários clusters com vários contentores de blobs, poderá querer criar um nome de utilizador exclusivo para cada cluster em vez de utilizar o nome velero.

      Para criar um principal de serviço com a função Contribuidor, utilize o seguinte comando. Substitua o seu próprio ID de subscrição e, opcionalmente, o seu próprio nome principal de serviço. Microsoft Entra ID irá gerar um segredo para si.

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

      Faça estes ajustes ao comando, se necessário:

      • Se planear utilizar subscrições diferentes para o cluster de cargas de trabalho e os ficheiros de cópia de segurança do Velero, forneça ambos os IDs de subscrição, como no exemplo seguinte:

        $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)
        
      • Se não quiser utilizar velero como nome principal de serviço, certifique-se de que a --name escolha é exclusiva no Microsoft Entra ID e não entra em conflito com outros principais de serviço ou registos de aplicações.

      Importante

      O segredo só é mostrado durante este passo, quando o principal de serviço é criado. Certifique-se de que anota o segredo para utilização em passos futuros.

      Utilizar uma função personalizada:

      Se quiser ativar as ações mínimas do fornecedor de recursos, crie uma função personalizada e atribua essa função ao principal de serviço.

      1. Crie um ficheiro com o nome azure-role.json com os seguintes conteúdos. Substitua o seu próprio nome de função personalizado e o ID da subscrição.

        {
            "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"
            ],
            "NotActions": [],
            "AssignableScopes": [
              "<SUBSCRIPTION_ID>"
            ]
        }
        
      2. Crie a função personalizada e o principal de serviço:

        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)
        

      Para obter mais informações sobre como criar funções personalizadas, veja Definir permissões para Velero.

  4. Obtenha o nome do principal de serviço e atribua esse nome à variável AZURE_CLIENT_ID :

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

    Nota

    Os principais de serviço expiram. Para saber quando o novo principal de serviço irá expirar, execute este comando: az ad sp show --id $AZURE_CLIENT_ID.

  5. Crie um ficheiro que contenha as variáveis necessárias para a instalação do Velero. O comando tem um aspeto semelhante ao seguinte:

    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
    

    Importante

    Elimine este ficheiro depois de instalar o Velero. O segredo do cliente está em texto simples, o que pode representar um risco de segurança.

    Antes de continuar, verifique se o ficheiro está corretamente formatado. A extensão de nome de ficheiro não importa.

    • Remova quaisquer espaços ou separadores adicionais.
    • Certifique-se de que os nomes das variáveis estão corretos.
  6. Instale e inicie o Velero.

    Instale o Velero no cluster e inicie a implementação. Este procedimento cria um espaço de nomes chamado velero e adiciona uma implementação com o nome velero ao espaço de nomes.

    1. Instale o Velero com o seguinte comando. Terá de personalizar o comando de exemplo.

      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
      

      Defina as seguintes variáveis conforme necessário:

      • O comando instala o plug-in do Microsoft Azure, que tem de ser compatível com a versão da CLI do Velero que está a utilizar. O comando de exemplo utiliza a versão 1.5.0 do plug-in do Microsoft Azure, que é compatível com a versão mais recente da CLI velero, 1.9.0. Para saber qual a versão do plug-in do Microsoft Azure a instalar com a sua versão da CLI valero, veja a matriz de compatibilidade.

      • Certifique-se de que inclui o --use-restic parâmetro para ativar a cópia de segurança dos volumes do Kubernetes ao nível do sistema de ficheiros com Restic. Restic pode ser utilizado para criar cópias de segurança de qualquer tipo de volume do Kubernetes. Por predefinição, o Velero suporta a captura de instantâneos de volumes persistentes para Volumes EBS do Amazon, Managed Disks do Azure e Discos Persistentes do Google. No AKS Arc, os volumes do Kubernetes utilizam Volumes Partilhados de Cluster (CSVs) para armazenar dados. Assim, Restic é necessário para ativar instantâneos de volume persistentes. Atualmente, o AKS Arc não suporta instantâneos de volume.

      • subscriptionId=$AZURE_BACKUP_SUBSCRIPTION_ID é opcional. Só tem de incluí-lo se o Velero e o cluster de cargas de trabalho tiverem IDs de subscrição diferentes. Se utilizarem a mesma subscrição do Azure, pode remover o subscriptionId parâmetro e o ficheiro credentials-velero.txt fornecerá essas informações.

      O serviço Velero é iniciado automaticamente na instalação.

    2. Verifique se o serviço Velero está a ser executado corretamente:

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

      O get pods comando deve mostrar que os pods velero estão em execução.

Instalar o Velero com armazenamento MinIO

Os procedimentos nesta secção descrevem como instalar o Velero e utilizar o armazenamento MinIO para cópias de segurança. Se preferir utilizar Armazenamento de Blobs do Azure para as suas cópias de segurança, aceda a Instalar o Velero com Armazenamento de Blobs do Azure.

Se não quiser armazenar as suas cópias de segurança no MinIO, aceda a Configurar o Velero para utilizar Armazenamento de Blobs do Azure.

  1. Instale a CLI do Velero ao executar o seguinte comando. Instalar Chocolately se ainda não o fez.

    choco install velero
    
  2. Instalar o MinIO:

    1. Crie um volume persistente para armazenar a cópia de segurança MinIO. O exemplo cria um volume persistente na classe de armazenamento predefinida no AKS Arc, que já existe.

      1. Crie um ficheiro YAML com o nome minio-pvc-storage.yaml, com o seguinte conteúdo:

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

        Crie o volume persistente ao executar este comando:

        kubectl create -f minio-pvc-storage.yaml
        
      2. Crie um ficheiro de implementação, minio-deployment.yaml, para iniciar o MinIO. Inclua os seguintes conteúdos. A implementação utilizará o volume persistente que criou.

        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" 
        

        Em seguida, crie a implementação:

        kubectl create -f minio-deployment.yaml
        
    2. Crie um serviço Kubernetes denominado minio-service.yaml. Este serviço irá fornecer endereços IP externos ao pod MinIO.

      Crie um ficheiro YAML com as seguintes definições para configurar o serviço:

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

      Em seguida, crie o serviço:

      kubectl create -f mino-service.yaml
      
    3. Obtenha o endereço IP externo do pod MinIO ao executar o seguinte comando. Irá utilizar esse endereço para instalar o Velero.

      kubectl get svc
      
    4. Para verificar se o MinIO está a funcionar, inicie sessão no endereço IP num browser ou utilize o cliente MinIO, conforme descrito abaixo.

      Instale o cliente MinIO e navegue pelos ficheiros MinIO.

      Transfira o cliente MinIO:

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

      Em seguida, defina um alias:

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

      Por fim, navegue pela instalação MinIO:

      mc ls minio
      
    5. Crie um registo para armazenar ficheiros Velero. Este registo será utilizado na instalação velero.

      mc mb minio/velero-backup
      
    6. Crie um ficheiro de credenciais MinIO com as seguintes informações:

      minio.credentials 
             [default] 
        aws_access_key_id=<minio_access_key> 
        aws_secret_access_key=<minio_secret_key> 
      
  3. Instalar o 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
    

    Antes de executar este comando, verifique o nome do registo, as credenciais minIO e o endereço IP externo minIO.

  4. Verifique se o serviço Velero está a ser executado corretamente:

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

    O get pods comando deve mostrar que os pods velero estão em execução.

Criar uma cópia de segurança de um cluster

Pode fazer uma cópia de segurança ou restaurar todos os objetos no cluster ou filtrar objetos por tipo, espaço de nomes e/ou etiqueta.

Criar uma cópia de segurança

Utilize o comando Velero backup create para criar cópias de segurança para o armazenamento escolhido. Os exemplos seguintes utilizam o --default-volumes-to-restic sinalizador, que cria um instantâneo dos volumes persistentes. Para obter outras opções de cópia de segurança, veja Referência do Velero Backup.

  • Cópia de segurança a pedido de todos os espaços de nomes no cluster:

    velero backup create <BACKUP-NAME> --default-volumes-to-restic
    
  • Cópia de segurança a pedido de um único espaço de nomes no cluster:

    velero backup create <BACKUP-NAME> --include-namespaces <NAMESPACE1> --default-volumes-to-restic
    
  • Cópia de segurança a pedido de vários espaços de nomes selecionados no cluster:

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

Verificar o progresso da cópia de segurança

  • Para verificar o progresso de uma cópia de segurança, execute este comando:

    velero backup describe <BACKUP-NAME>
    
  • Se estiver a utilizar Armazenamento de Blobs do Azure para as suas cópias de segurança, pode ver a cópia de segurança na sua conta de armazenamento do Azure no blob/contentor que criou.

Restaurar um cluster

Para restaurar um cluster, tem de criar um novo cluster para o qual restaurar o cluster antigo. Não pode restaurar uma cópia de segurança de cluster para um cluster existente.

O restore comando permite-lhe restaurar todos os objetos e volumes persistentes a partir de uma cópia de segurança criada anteriormente. Também pode restaurar apenas um subconjunto filtrado de objetos e volumes persistentes. Para obter mais opções de cópia de segurança, veja Filtragem de recursos.

No cluster para o qual pretende restaurar a cópia de segurança (o cluster de destino):

  1. Implemente Velero com as instruções acima. Utilize as mesmas credenciais do Azure que utilizou para o cluster de origem.

  2. Certifique-se de que o objeto de cópia de segurança Velero foi criado ao executar o seguinte comando. Os recursos velero são sincronizados com os ficheiros de cópia de segurança no armazenamento na cloud.

    velero backup describe <BACKUP-NAME>
    
  3. Depois de confirmar que a cópia de segurança correta (BACKUP-NAME) está presente, restaure todos os objetos na cópia de segurança:

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

Obter ajuda com os comandos do Velero

Para ver todas as opções associadas a um comando Velero específico, utilize o --help sinalizador com o comando . Por exemplo, velero restore create --help mostra todas as opções associadas ao velero restore create comando.

Por exemplo, para listar todas as opções de velero restore, execute velero restore --help, que devolve as seguintes informações:

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

Desinstalar Velero

Para desinstalar o Velero do cluster e remover todos os recursos criados pela instalação velero, execute os seguintes comandos:

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

Passos seguintes