Eseguire il backup o il ripristino del cluster del carico di lavoro usando Velero e Archiviazione BLOB di Azure

È possibile creare un backup o un ripristino del cluster del carico di lavoro da un backup in servizio Azure Kubernetes (AKS) in Azure Stack HCI e cluster di carico di lavoro Windows Server usando Velero e BLOB di Azure come risorsa di archiviazione. Velero è uno strumento standard della community open source che consente di eseguire il backup e il ripristino di oggetti cluster Kubernetes e volumi permanenti. Supporta diversi provider di archiviazione per archiviare i backup.

Se un cluster del carico di lavoro si arresta in modo anomalo e non riesce a eseguire il ripristino, è possibile usare un backup di Velero per ripristinare il contenuto e gli oggetti API interni in un nuovo cluster.

Distribuire e configurare Velero

Seguire questa procedura per distribuire e configurare Velero:

  1. Installare l'interfaccia della riga di comando di Velero nella workstation. In una macchina Windows è possibile usare Chocolatey per installare il client Velero:

    choco install velero
    
  2. Configurare l'account di archiviazione di Azure e il contenitore BLOB.

    È necessaria una sottoscrizione di Azure attiva per creare un account di archiviazione di Azure e il contenitore BLOB perché Velero richiede entrambi di archiviare i backup. Se si preferisce usare una sottoscrizione di Azure diversa da quella usata durante la creazione dei backup, è possibile modificare la sottoscrizione di Azure. Per impostazione predefinita, Velero archivia i backup nella stessa sottoscrizione delle macchine virtuali e dei dischi e non consente di ripristinare i backup in un gruppo di risorse in una sottoscrizione diversa. Per abilitare i backup e il ripristino tra sottoscrizioni, è necessario specificare l'ID sottoscrizione che si vuole usare.

    Per passare alla sottoscrizione di Azure in cui si vogliono creare i backup, usare il az account comando PowerShell.

    Trovare prima di tutto il nome dell'ID sottoscrizione:

    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)
    

    In secondo luogo, impostare una sottoscrizione come sottoscrizione attiva corrente:

    az account set -s $AZURE_BACKUP_SUBSCRIPTION_ID
    

    Creare quindi un gruppo di risorse per l'account di archiviazione di backup, eseguire il comando seguente (modificando il percorso in base alle esigenze). L'esempio mostra l'account di archiviazione creato in un gruppo di risorse separato Velero_Backups .

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

    È necessario creare l'account di archiviazione con un ID univoco globale perché viene usato per DNS. Lo script di esempio seguente genera un nome casuale usando uuidgen, ma è possibile scegliere qualsiasi nome desiderato purché si seguano le regole di denominazione di Azure per gli account di archiviazione. L'account di archiviazione viene creato con la crittografia per le funzionalità dei dati inattivi (chiavi gestite da Microsoft) e viene configurato per consentire l'accesso solo tramite HTTPS.

    Per creare l'account di archiviazione, eseguire il comando seguente:

    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
    

    Creare infine il contenitore BLOB denominato velero. È possibile scegliere un nome diverso, ma preferibilmente deve essere univoco per un singolo cluster Kubernetes.

    BLOB_CONTAINER=velero
    az storage container create -n $BLOB_CONTAINER --public-access off --account-name $AZURE_STORAGE_ACCOUNT_ID
    
  3. Impostare le autorizzazioni per Velero e creare un'entità servizio.

    Per prima cosa, ottenere l'ID sottoscrizione dell'account Azure e l'ID tenant eseguendo il comando seguente:

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

    Creare quindi un'entità servizio con il Contributor ruolo . Questo ruolo ha accesso a livello di sottoscrizione, pertanto è necessario proteggere queste credenziali. Quando si crea l'entità servizio, consentire all'interfaccia della riga di comando di generare automaticamente una password e assicurarsi di acquisire la password.

    Se si usa Velero per eseguire il backup di più cluster con più contenitori BLOB, è consigliabile creare un nome utente univoco per ogni cluster anziché il nome veleropredefinito .

    Nota

    Se si usa una sottoscrizione diversa per i backup e le risorse del cluster, assicurarsi di specificare entrambe le sottoscrizioni nel 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]`
    

    Assicurarsi che il valore per --name non sia in conflitto con altre entità servizio e registrazioni dell'app.

    Dopo aver creato l'entità servizio, ottenere l'ID client eseguendo il comando seguente:

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

    Creare infine un file contenente tutte le variabili di ambiente pertinenti. Il comando è simile all'esempio seguente:

    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. Installare e avviare Velero.

    Installare Velero, inclusi tutti i prerequisiti, nel cluster e quindi avviare la distribuzione. La distribuzione crea uno spazio dei nomi denominato velero e inserisce una distribuzione denominata velero .

    Per eseguire il backup dei volumi Kubernetes a livello di file system, usare Restic e assicurarsi di aggiungere --use-restic. Attualmente, il servizio Azure Kubernetes in Azure Stack HCI e Windows Server non supporta gli snapshot del 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. Verificare se il servizio Velero è in esecuzione correttamente eseguendo il comando seguente:

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

Usare Velero per creare un backup del cluster del carico di lavoro

È possibile eseguire il backup o il ripristino di tutti gli oggetti nel cluster oppure filtrare gli oggetti in base al tipo, allo spazio dei nomi o all'etichetta.

Per eseguire un backup su richiesta di base del cluster:

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

Per controllare lo stato di avanzamento di un backup:

velero backup describe <BACKUP-NAME>

Dopo aver seguito le istruzioni precedenti, è possibile visualizzare il backup nell'account di archiviazione di Azure nel contenitore BLOB creato.

Usare Velero per ripristinare un cluster del carico di lavoro

È innanzitutto necessario creare un nuovo cluster in cui eseguire il ripristino perché non è possibile ripristinare un backup del cluster in un cluster esistente. L'operazione di ripristino consente di ripristinare tutti gli oggetti e i volumi permanenti da un backup creato in precedenza. È anche possibile ripristinare solo un subset filtrato di oggetti e volumi permanenti.

Nel cluster di destinazione in cui si vuole ripristinare il backup, eseguire la procedura seguente:

  1. Distribuire e configurare Velero usando le stesse credenziali di Azure usate per il cluster di origine.

  2. Assicurarsi che l'oggetto Velero Backup venga creato eseguendo il comando seguente. Le risorse velero vengono sincronizzate con i file di backup nell'archiviazione cloud.

    velero backup describe <BACKUP-NAME>
    
  3. Dopo aver verificato che il backup corretto (<BACKUP-NAME>) è disponibile, è possibile ripristinare tutto con il comando seguente:

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

Disinstallare Velero

Se si vuole disinstallare completamente Velero dal cluster, i comandi seguenti rimuoveranno tutte le risorse create da velero install:

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

Note aggiuntive

  • Velero su Windows: Velero non supporta ufficialmente Windows. In fase di test, il team di Velero è riuscito a eseguire il backup solo di applicazioni Windows senza stato. L'integrazione restic e i backup di applicazioni con stato o di volumi permanenti non sono supportati.

  • Guida dell'interfaccia della riga di comando di Velero: per visualizzare tutte le opzioni associate a un comando specifico, usare il --help flag con il comando . Ad esempio, velero restore create --help mostra tutte le opzioni associate al velero restore create comando . In alternativa, per elencare tutte le opzioni di velero restore, eseguire 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
    

Riferimenti

Funzionamento dell'integrazione resticdi Velero