Fazer backup e restaurar clusters de carga de trabalho usando o Velero e o armazenamento de BLOBs do Azure

Este tópico descreve como fazer backup e restaurar o AKS em clusters de carga de trabalho de HCI Azure Stack usando o Velero e o blob do Azure como o armazenamento. Velero é uma ferramenta de código aberto da Comunidade padrão para fazer backup e restaurar objetos de cluster kubernetes e volumes persistentes, além de oferecer suporte a uma variedade de provedores de armazenamento para armazenar seus 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 os objetos de API internos para um novo cluster.

Implantar e configurar o Velero

Use as etapas a seguir 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 como Velero requer tanto para armazenar backups. Se preferir usar uma assinatura do Azure diferente daquela usada ao criar seus backups, você 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 para 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 az account comando do 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 como 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 a seguir (alterando o local conforme necessário). O exemplo mostra a conta de armazenamento criada em um Velero_Backups grupo de recursos separado.

    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, uma vez que ela é usada para DNS. O script de exemplo a seguir gera um nome aleatório usando uuidgen , mas você pode escolher qualquer nome que desejar, desde que siga as uuidgen. A conta de armazenamento é criada com criptografia para os recursos em repouso (chaves gerenciadas pela Microsoft) e é 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 preferencialmente ser exclusivo para um único cluster kubernetes.

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

    Primeiro, obtenha a ID da 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`
    

    De, crie uma entidade de serviço com a Contributor função. Essa função tem acesso de toda a assinatura, portanto, você deve proteger essa credencial. Ao criar a entidade de serviço, deixe 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 que você crie um nome de usuário exclusivo por cluster, em vez do nome padrão velero .

    Observação

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

    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]`
    

    Verifique se o valor de não está em --name 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 é semelhante ao exemplo a seguir:

    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 chamada nela velero .

    Para fazer backup de volumes do kubernetes no nível do sistema de arquivos, use o REST e certifique-se de adicionar . Atualmente, AKS em Azure Stack HCI não oferece 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 fazer backup de um cluster de carga de trabalho

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

Para executar um backup básico sob demanda de seu 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, já que não é possível restaurar um backup de cluster para um cluster existente. A operação de restauração permite que você restaure 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 de backup Velero é criado executando o comando a seguir. Os recursos do 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 seu cluster, os seguintes comandos 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: o Velero não oferece suporte oficialmente a Windows. em testes, a equipe do Velero conseguiu fazer backup apenas de aplicativos Windows sem estado. Não há suporte para a integração REST 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 aintegração REST do Velero Works