Executar backup ou restauração do cluster de carga de trabalho usando o Armazenamento de Blobs do Velero e do Azure

Você pode criar um backup ou restauração de cluster de carga de trabalho de um backup no AKS (Serviço de Kubernetes do Azure) em clusters de carga de trabalho do Azure Stack HCI e Windows Server usando o Velero e o Blob do Azure como armazenamento. O Velero é uma ferramenta padrão de comunidade de software livre que você pode usar para fazer backup e restaurar objetos de cluster do Kubernetes e volumes persistentes. Ele dá suporte a vários provedores de armazenamento para armazenar backups.

Se um cluster de carga de trabalho falhar e falhar na recuperação, você poderá usar um backup velero para restaurar seu conteúdo e objetos de API internos para um novo cluster.

Implantar e configurar o Velero

Use as seguintes etapas para implantar e configurar o Velero:

  1. Instale a CLI do Velero em sua estação de trabalho. Em um computador Windows, você pode usar o Chocolatey para instalar o cliente Velero:

    choco install velero
    
  2. Configure a conta de armazenamento do Azure e o contêiner de blob.

    Você precisa de uma assinatura ativa do Azure para criar uma conta de armazenamento do Azure e o contêiner de blob, pois o Velero requer que ambos armazenem backups. Se você preferir usar uma assinatura do Azure diferente da usada ao criar seus backups, poderá alterar a assinatura do Azure. Por padrão, o Velero armazena backups na mesma assinatura que suas VMs e discos e não permite que você restaure backups em um grupo de recursos em uma assinatura diferente. Para habilitar backups e restaurar entre assinaturas, você precisa especificar a ID da assinatura que deseja usar.

    Para alternar para a assinatura do Azure na qual você deseja criar os backups, use o comando do az account PowerShell.

    Primeiro, localize o nome da ID da assinatura:

    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)
    

    Em segundo lugar, defina uma assinatura para ser a assinatura ativa atual:

    az account set -s $AZURE_BACKUP_SUBSCRIPTION_ID
    

    Em seguida, crie um grupo de recursos para a conta de armazenamento de backups, execute o comando abaixo (alterando o local conforme necessário). O exemplo mostra a conta de armazenamento criada em um grupo de recursos separado Velero_Backups .

    AZURE_BACKUP_RESOURCE_GROUP=Velero_Backups
    az group create -n $AZURE_BACKUP_RESOURCE_GROUP --location WestUS
    

    Você precisa criar a conta de armazenamento com uma ID globalmente exclusiva, pois ela é usada para DNS. O script de exemplo abaixo gera um nome aleatório usando uuidgen, mas você pode escolher qualquer nome desejado, desde que siga as regras de nomenclatura do Azure para contas de armazenamento. A conta de armazenamento é criada com criptografia para recursos de dados em repouso (chaves gerenciadas pela Microsoft) e está configurada para permitir o acesso somente por meio de HTTPS.

    Para criar a conta de armazenamento, execute o seguinte comando:

    AZURE_STORAGE_ACCOUNT_ID="velero$(uuidgen | cut -d '-' -f5 | tr '[A-Z]' '[a-z]')"
    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
    

    Por fim, crie o contêiner de blob chamado velero. Você pode escolher um nome diferente, mas ele deve ser preferencialmente exclusivo para um único cluster do Kubernetes.

    BLOB_CONTAINER=velero
    az storage container create -n $BLOB_CONTAINER --public-access off --account-name $AZURE_STORAGE_ACCOUNT_ID
    
  3. Defina permissões para o Velero e crie uma entidade de serviço.

    Primeiro, obtenha sua ID de assinatura da conta do Azure e a ID do locatário executando o seguinte comando:

    AZURE_SUBSCRIPTION_ID=`az account list --query '[?isDefault].id' -o tsv`
    AZURE_TENANT_ID=`az account list --query '[?isDefault].tenantId' -o tsv`
    

    Em seguida, crie uma entidade de serviço com a Contributor função. Essa função tem acesso em toda a assinatura, portanto, você deve proteger essa credencial. Ao criar a entidade de serviço, permita que a CLI gere uma senha para você e certifique-se de capturar a senha.

    Se você usar o Velero para fazer backup de vários clusters com vários contêineres de blob, é recomendável criar um nome de usuário exclusivo por cluster em vez do nome veleropadrão.

    Observação

    Se você estiver usando uma assinatura diferente para backups e recursos de cluster, especifique ambas as assinaturas no az comando usando --scopes.

    AZURE_CLIENT_SECRET=`az ad sp create-for-rbac --name "velero" --role "Contributor" --scopes /subscriptions/<subscription_id> --query 'password' -o tsv \
    --scopes  /subscriptions/$AZURE_SUBSCRIPTION_ID[ /subscriptions/$AZURE_BACKUP_SUBSCRIPTION_ID]`
    

    Certifique-se de que o valor --name não entre em conflito com outras entidades de serviço e registros de aplicativo.

    Depois de criar a entidade de serviço, obtenha a ID do cliente executando o seguinte comando:

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

    Por fim, crie um arquivo que contenha todas as variáveis de ambiente relevantes. O comando se parece com o seguinte exemplo:

    cat << EOF  > ./credentials-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_RESOURCE_GROUP}
    AZURE_CLOUD_NAME=AzurePublicCloud
    EOF
    
  4. Instale e inicie o Velero.

    Instale o Velero, incluindo todos os pré-requisitos, no cluster e inicie a implantação. A implantação cria um namespace chamado velero e coloca uma implantação nomeada velero nele.

    Para fazer backup dos volumes do Kubernetes no nível do sistema de arquivos, use Restic e certifique-se de adicionar --use-restic. Atualmente, o AKS no Azure Stack HCI e no servidor Windows não dá suporte a instantâneos de volume.

    velero install \
       --provider azure \
       --plugins velero/velero-plugin-for-microsoft-azure:v1.3.0 \
       --bucket $BLOB_CONTAINER \
       --secret-file ./credentials-velero \
       --backup-location-config resourceGroup=$AZURE_BACKUP_RESOURCE_GROUP,storageAccount=$AZURE_STORAGE_ACCOUNT_ID[,subscriptionId=$AZURE_BACKUP_SUBSCRIPTION_ID] \
       --use-restic
    
  5. Verifique se o serviço Velero está sendo executado corretamente executando o seguinte comando:

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

Usar o Velero para criar um backup de cluster de carga de trabalho

Você pode fazer backup ou restaurar todos os objetos no cluster ou filtrar objetos por tipo, namespace ou rótulo.

Para executar um backup sob demanda básico do cluster:

velero backup create <BACKUP-NAME> --default-volumes-to-restic

Para verificar o progresso de um backup:

velero backup describe <BACKUP-NAME>

Depois de seguir as instruções acima, você pode exibir o backup em sua conta de armazenamento do Azure no contêiner de blob que você criou.

Usar o Velero para restaurar um cluster de carga de trabalho

Primeiro, você deve criar um novo cluster para restaurar, pois não é possível restaurar um backup de cluster para um cluster existente. A operação de restauração permite restaurar todos os objetos e volumes persistentes de um backup criado anteriormente. Você também pode restaurar apenas um subconjunto filtrado de objetos e volumes persistentes.

No cluster de destino em que você deseja restaurar o backup, execute as seguintes etapas:

  1. Implante e configure o Velero usando as mesmas credenciais do Azure que você fez para o cluster de origem.

  2. Verifique se o objeto velero Backup é criado executando o comando a seguir. Os recursos velero são sincronizados com os arquivos de backup no armazenamento em nuvem.

    velero backup describe <BACKUP-NAME>
    
  3. Depois de confirmar que o backup correto (<BACKUP-NAME>) está disponível, você pode restaurar tudo com o seguinte comando:

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

Desinstalar o Velero

Se você quiser desinstalar completamente o Velero do cluster, os comandos a seguir removerão todos os recursos criados por velero install:

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

Observações adicionais

  • Velero no Windows: a Velero não dá suporte oficialmente a Windows. No teste, a equipe do Velero conseguiu fazer backup apenas de aplicativos Windows sem estado. Não há suporte para integração restic e backups de aplicativos com estado ou volumes persistentes.

  • Ajuda da CLI do Velero: para ver todas as opções associadas a um comando específico, use o --help sinalizador com o comando. Por exemplo, velero restore create --help mostra todas as opções associadas ao velero restore create comando. Ou, para listar todas as opções de velero restore, execute 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
    

Referências

Como o Velero funcionana integração restic