Delen via


Back-ups maken van workloadclusters met Behulp van Velero

Van toepassing op: AKS in Azure Local 22H2, AKS op Windows Server

In dit artikel wordt beschreven hoe u Velero installeert en gebruikt voor het maken en herstellen van workloads en doelclusters met behulp van Azure Blob Storage of MinIO-opslag in AKS waarvoor Azure Arc is ingeschakeld.

Velero is een opensource-communitystandaardhulpprogramma voor het maken en herstellen van Kubernetes-clusterobjecten en permanente volumes. Het ondersteunt verschillende opslagproviders om de back-ups op te slaan. Als een Kubernetes-doelcluster van AKS Arc vastloopt en niet kan worden hersteld, kunt u een Velero-back-up gebruiken om de inhoud en interne API-objecten te herstellen naar een nieuw cluster.

Als u uw back-ups niet wilt opslaan in Azure Blob Storage, kunt u MinIO gebruiken met Velero. In dit artikel wordt beschreven hoe u Velero installeert en configureert voor het gebruik van Azure Blob Storage of het installeren en configureren van Velero voor het gebruik van MinIO-opslag.

Notitie

Velero biedt geen officiële ondersteuning voor Microsoft Windows. Tijdens het testen kon het Velero-team alleen back-ups maken van stateless Windows-toepassingen. Restic integratie en back-ups van stateful toepassingen of permanente volumes werden niet ondersteund.

Vereisten

Voltooi deze vereisten voordat u begint met uw Velero-implementatie:

Velero installeren met Azure Blob Storage

In de procedures in deze sectie wordt beschreven hoe u Velero installeert en Azure Blob Storage gebruikt voor back-ups. Als u uw back-ups niet wilt opslaan in Azure, gaat u naar Velero installeren met MiniO-opslag.

  1. Open PowerShell als beheerder.

  2. Meld u aan bij Azure met behulp van de Azure CLI:

    az login --use-device-code   
    
  3. Installeer de Velero CLI door de volgende opdracht uit te voeren:

    Notitie

    De --use-restic vlag wordt niet ondersteund op Velero versie 1.10 en hoger. De vlag wordt alleen ondersteund op versie 1.9.x.

    choco install velero   
    
  4. Wijzig indien nodig het Azure-abonnement dat u wilt gebruiken voor de back-ups.

    Standaard worden back-ups opgeslagen in hetzelfde Azure-abonnement als uw VM's en schijven en kunt u geen back-ups herstellen naar een resourcegroep in een ander abonnement. Als u back-up- en herstelbewerkingen tussen abonnementen wilt inschakelen, geeft u een abonnement op dat moet worden gebruikt voor uw back-ups. U kunt deze stap overslaan als u zich al in het abonnement bevindt dat u wilt gebruiken voor uw back-ups.

    Schakel over naar het abonnement dat u wilt gebruiken voor uw back-ups:

    1. Gebruik de naam van het abonnement om de abonnements-id te vinden:

      $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. Wijzig vervolgens het abonnement:

      az account set -s $AZURE_BACKUP_SUBSCRIPTION_ID
      
  5. Maak een Azure Storage-account en blobcontainer.

    Wanneer u Azure Blob Storage gebruikt voor back-ups, vereist Velero een opslagaccount en een blobcontainer om de back-ups op te slaan. In het volgende voorbeeld ziet u het opslagaccount dat is gemaakt in een nieuwe Velero_Backups resourcegroep.

    U moet het opslagaccount maken met een wereldwijd unieke id die kan worden gebruikt in DNS. Het voorbeeldscript gebruikt de uuidgen app om willekeurig een unieke naam te genereren. U kunt elke methode gebruiken zolang de naam de Azure-naamgevingsregels voor opslagaccounts volgt.

    Het opslagaccount wordt gemaakt met versleuteling-at-rest-mogelijkheden (met behulp van door Microsoft beheerde sleutels) en is geconfigureerd om alleen toegang via HTTPS-verbindingen toe te staan.

    Voer de volgende stappen uit om het opslagaccount en de blobcontainer te maken:

    1. Maak een resourcegroep voor het back-upopslagaccount. Wijzig indien nodig de directory's naar de gewenste locatie en voer de volgende opdrachten uit:

      $AZURE_BACKUP_RESOURCE_GROUP="Velero_Backups"
      az group create -n $AZURE_BACKUP_RESOURCE_GROUP --location WestUS
      
    2. Maak het opslagaccount:

      $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. Een blobcontainer maken:

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

      In het voorbeeld wordt een blobcontainer met de naam velerogebruikt. U kunt een andere naam gebruiken, bij voorkeur uniek voor één Kubernetes-cluster.

  6. Een service-principal maken:

    1. Haal de abonnements-id en tenant-id voor uw Azure-account op:

      $AZURE_SUBSCRIPTION_ID=(az account list --query '[?isDefault].id' -o tsv)
      $AZURE_TENANT_ID=(az account list --query '[?isDefault].tenantId' -o tsv) 
      
    2. Maak een service-principal met inzenderbevoegdheden.

      U kunt een service-principal maken met de rol Inzender of een aangepaste rol gebruiken:

      • Rol Inzender: De rol Inzender verleent abonnementsbrede toegang, dus zorg ervoor dat u deze referentie beveiligt als u die rol toewijst.
      • Aangepaste rol: Als u een meer beperkende rol nodig hebt, gebruikt u een aangepaste rol.

      Wijs de rol Inzender toe:

      Als u Velero gebruikt om een back-up te maken van meerdere clusters met meerdere blobcontainers, kunt u een unieke gebruikersnaam voor elk cluster maken in plaats van de naam velerote gebruiken.

      Gebruik de volgende opdracht om een service-principal te maken met de rol Inzender. Vervang uw eigen abonnements-id en eventueel uw eigen service-principalnaam. Microsoft Entra ID genereert een geheim voor u.

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

      Breng indien nodig de volgende wijzigingen aan in de opdracht:

      • Als u van plan bent om verschillende abonnementen te gebruiken voor uw workloadcluster en uw Velero-back-upbestanden, geeft u beide abonnements-id's op, zoals in het volgende voorbeeld:

        $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)
        
      • Als u de naam van uw service-principal niet wilt gebruiken velero , moet u ervoor zorgen dat de --name door u gekozen id uniek is in Microsoft Entra-id en niet conflicteert met andere service-principals of app-registraties.

      Belangrijk

      Het geheim wordt alleen tijdens deze stap weergegeven wanneer de service-principal wordt gemaakt. Noteer het geheim voor gebruik in toekomstige stappen.

      Een aangepaste rol gebruiken:

      Als u de minimale resourceprovideracties wilt inschakelen, maakt u een aangepaste rol en wijst u die rol toe aan de service-principal.

      1. Maak een bestand met de naam azure-role.json met de volgende inhoud. Vervang uw eigen aangepaste rolnaam en abonnements-id:

        {
            "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>"
            ]
        }
        
      2. Maak de aangepaste rol en service-principal:

        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)
        

      Zie Machtigingen instellen voor Velero voor meer informatie over het maken van aangepaste rollen.

  7. Haal de naam van de service-principal op en wijs die naam toe aan de AZURE_CLIENT_ID variabele:

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

    Notitie

    Service-principals verlopen. Voer deze opdracht uit om erachter te komen wanneer uw nieuwe service-principal verloopt: az ad sp show --id $AZURE_CLIENT_ID

  8. Maak een bestand dat de variabelen bevat die de Velero-installatie vereist. De opdracht ziet er ongeveer als volgt uit:

    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
    

    Belangrijk

    Verwijder dit bestand nadat u Velero hebt geïnstalleerd. Het clientgeheim is in tekst zonder opmaak, wat een beveiligingsrisico kan vormen.

    Controleer voordat u doorgaat of het bestand juist is opgemaakt. De bestandsnaamextensie maakt niet uit.

    • Verwijder eventuele extra spaties of tabbladen.
    • Zorg ervoor dat de namen van de variabelen juist zijn.
  9. Installeer En start Velero.

    Installeer Velero op het cluster en start de implementatie. Met deze procedure maakt u een naamruimte velero met de naamruimte en voegt u een implementatie toe met de naamruimte velero .

    1. Installeer Velero met behulp van de volgende opdracht. U moet de voorbeeldopdracht aanpassen.

      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
      

      Stel indien nodig de volgende variabelen in:

      • Met de opdracht wordt de Microsoft Azure-invoegtoepassing geïnstalleerd, die compatibel moet zijn met de Velero CLI-versie die u gebruikt. De voorbeeldopdracht maakt gebruik van Microsoft Azure-invoegtoepassing versie 1.5.0, die compatibel is met de nieuwste Velero CLI-versie, 1.9.0. Zie de compatibiliteitsmatrix voor meer informatie over welke versie van de Microsoft Azure-invoegtoepassing moet worden geïnstalleerd met uw Valero CLI-versie.

      • Zorg ervoor dat u de parameter opneemt voor het --use-restic inschakelen van back-ups van Kubernetes-volumes op bestandssysteemniveau met behulp van Restic. Restic kan worden gebruikt om een back-up te maken van elk type Kubernetes-volume. Standaard biedt Velero ondersteuning voor het maken van momentopnamen van permanente volumes voor Amazon EBS Volumes, Azure Managed Disks en Google Persistent Disks. In AKS Arc maken Kubernetes-volumes gebruik van CSV's (Cluster Shared Volumes) om gegevens op te slaan. Restic Daarom is het nodig om permanente momentopnamen van volumes in te schakelen. AKS Arc biedt momenteel geen ondersteuning voor momentopnamen van volumes.

      • subscriptionId=$AZURE_BACKUP_SUBSCRIPTION_ID is optioneel. U hoeft het alleen op te nemen als Velero en het workloadcluster verschillende abonnements-id's hebben. Als ze hetzelfde Azure-abonnement gebruiken, kunt u de subscriptionId parameter verwijderen en geeft het bestand credentials-velero.txt die informatie.

      De Velero-service wordt automatisch gestart bij de installatie.

    2. Controleer of de Velero-service correct wordt uitgevoerd:

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

      De get pods opdracht moet laten zien dat de Velero-pods worden uitgevoerd.

Velero installeren met MinIO-opslag

In de procedures in deze sectie wordt beschreven hoe u Velero installeert en MinIO-opslag gebruikt voor back-ups. Als u liever Azure Blob Storage gebruikt voor uw back-ups, gaat u naar Velero installeren met Azure Blob Storage.

Als u uw back-ups niet wilt opslaan in MinIO, gaat u naar Velero instellen om Azure Blob Storage te gebruiken.

  1. Installeer de Velero CLI door de volgende opdracht uit te voeren. Installeer Chocolately deze als u dat nog niet hebt gedaan.

    choco install velero
    
  2. MinIO installeren:

    1. Maak een permanent volume om de MinIO-back-up op te slaan. In het voorbeeld wordt een permanent volume gemaakt in de standaardopslagklasse in AKS Arc, die al bestaat.

      1. Maak een YAML-bestand met de naam minio-pvc-storage.yaml met de volgende inhoud:

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

        Maak het permanente volume door deze opdracht uit te voeren:

        kubectl create -f minio-pvc-storage.yaml
        
      2. Maak een implementatiebestand, minio-deployment.yaml, om MinIO te starten. Neem de volgende inhoud op. De implementatie gebruikt het permanente volume dat u hebt gemaakt.

        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" 
        

        Maak vervolgens de implementatie:

        kubectl create -f minio-deployment.yaml
        
    2. Maak een Kubernetes-service met de naam minio-service.yaml. Deze service levert externe IP-adressen aan de MinIO-pod.

      Maak een YAML-bestand met de volgende instellingen om de service te configureren:

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

      Maak vervolgens de service:

      kubectl create -f mino-service.yaml
      
    3. Haal het externe IP-adres van de MinIO-pod op door de volgende opdracht uit te voeren. U gebruikt dat adres om Velero te installeren.

      kubectl get svc
      
    4. Als u wilt controleren of MinIO actief is, meldt u zich aan bij het IP-adres in een browser of gebruikt u de MinIO-client, zoals hieronder wordt beschreven.

      Installeer de MinIO-client en blader door de MinIO-bestanden.

      Download de MinIO-client:

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

      Stel vervolgens een alias in:

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

      Blader tot slot door de MinIO-installatie:

      mc ls minio
      
    5. Maak een bucket om Velero-bestanden op te slaan. Deze bucket wordt gebruikt in de Velero-installatie.

      mc mb minio/velero-backup
      
    6. Maak een MinIO-referentiebestand minio.credentials met de volgende informatie:

      [default] 
      aws_access_key_id=<minio_access_key> 
      aws_secret_access_key=<minio_secret_key> 
      
  3. Velero installeren:

    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
    

    Voordat u deze opdracht uitvoert, controleert u de naam van de bucket, uw MinIO-referenties en het externe IP-adres van MinIO.

  4. Controleer of de Velero-service correct wordt uitgevoerd:

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

    De get pods opdracht moet laten zien dat de Velero-pods worden uitgevoerd.

Een back-up maken van een cluster

U kunt een back-up maken van alle objecten in uw cluster of objecten filteren op type, naamruimte en/of label.

Maak een back-up

Gebruik de Opdracht Velero backup create om back-ups te maken naar uw gekozen opslag. In de volgende voorbeelden wordt de --default-volumes-to-restic vlag gebruikt, waarmee een momentopname van de permanente volumes wordt gemaakt. Zie de Velero Backup Reference voor andere back-upopties.

  • Back-up op aanvraag van alle naamruimten in uw cluster:

    velero backup create <BACKUP-NAME> --default-volumes-to-restic
    
  • Back-up op aanvraag van één naamruimte in uw cluster:

    velero backup create <BACKUP-NAME> --include-namespaces <NAMESPACE1> --default-volumes-to-restic
    
  • Back-up op aanvraag van meerdere geselecteerde naamruimten in uw cluster:

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

Back-upvoortgang controleren

  • Voer deze opdracht uit om de voortgang van een back-up te controleren:

    velero backup describe <BACKUP-NAME>
    
  • Als u Azure Blob Storage gebruikt voor uw back-ups, kunt u uw back-up bekijken in uw Azure Storage-account onder de blob/container die u hebt gemaakt.

Een cluster herstellen

Als u een cluster wilt herstellen, moet u een nieuw cluster maken om het oude cluster te herstellen naar. U kunt een back-up van een cluster niet herstellen naar een bestaand cluster.

Met de restore opdracht kunt u alle objecten en permanente volumes herstellen op basis van een eerder gemaakte back-up. U kunt ook alleen een gefilterde subset van objecten en permanente volumes herstellen. Zie Resourcefiltering voor meer back-upopties.

Op het cluster waarnaar u de back-up wilt herstellen (het doelcluster):

  1. Implementeer Velero met behulp van de bovenstaande instructies. Gebruik dezelfde Azure-referenties die u hebt gebruikt voor het broncluster.

  2. Zorg ervoor dat het Velero-back-upobject is gemaakt door de volgende opdracht uit te voeren. Velero-resources worden gesynchroniseerd met de back-upbestanden in cloudopslag.

    velero backup describe <BACKUP-NAME>
    
  3. Nadat u hebt bevestigd dat de juiste back-up (BACKUP-NAME) aanwezig is, herstelt u alle objecten in de back-up:

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

Hulp krijgen bij Velero-opdrachten

Als u alle opties wilt zien die zijn gekoppeld aan een specifieke Velero-opdracht, gebruikt u de --help vlag met de opdracht. Toont bijvoorbeeld velero restore create --help alle opties die zijn gekoppeld aan de velero restore create opdracht.

Als u bijvoorbeeld alle opties van velero restore, voert u uit velero restore --help, waarmee de volgende informatie wordt geretourneerd:

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

Velero verwijderen

Als u Velero wilt verwijderen uit uw cluster en alle resources wilt verwijderen die zijn gemaakt door de Installatie van Velero, voert u de volgende opdrachten uit:

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

Volgende stappen