Tworzenie kopii zapasowej, przywracanie klastrów obciążeń przy użyciu platformy Velero

Dotyczy: usługa AKS w usłudze Azure Stack HCI 22H2, AKS w systemie Windows Server

W tym artykule opisano sposób instalowania i używania platformy Velero do tworzenia kopii zapasowych i przywracania klastrów obciążeń i klastrów docelowych przy użyciu magazynu Azure Blob Storage lub MinIO w usłudze AKS włączonej przez usługę Azure Arc.

Velero to standardowe narzędzie społeczności open source do tworzenia kopii zapasowych i przywracania obiektów klastra Kubernetes i woluminów trwałych. Obsługuje ona różnych dostawców magazynu do przechowywania kopii zapasowych. Jeśli docelowy klaster Kubernetes usługi AKS Arc ulegnie awarii i nie można go odzyskać, możesz użyć kopii zapasowej platformy Velero, aby przywrócić jego zawartość i wewnętrzne obiekty interfejsu API do nowego klastra.

Jeśli nie chcesz przechowywać kopii zapasowych w Azure Blob Storage, możesz użyć funkcji MinIO z platformą Velero. W tym artykule opisano sposób instalowania i konfigurowania platformy Velero do używania Azure Blob Storage lub instalowania i konfigurowania platformy Velero do korzystania z magazynu MinIO.

Uwaga

Velero nie obsługuje oficjalnie systemu Microsoft Windows. Podczas testowania zespół Velero mógł tworzyć kopie zapasowe tylko bezstanowych aplikacji systemu Windows. Restic integracja i tworzenie kopii zapasowych aplikacji stanowych lub woluminów trwałych nie było obsługiwane.

Wymagania wstępne

Przed rozpoczęciem wdrażania platformy Velero należy spełnić następujące wymagania wstępne:

Instalowanie platformy Velero przy użyciu Azure Blob Storage

Procedury opisane w tej sekcji opisują sposób instalowania platformy Velero i używania Azure Blob Storage do tworzenia kopii zapasowych. Jeśli nie chcesz przechowywać kopii zapasowych na platformie Azure, przejdź do sekcji Instalowanie usługi Velero z magazynem MiniO.

  1. Otwórz program PowerShell jako administrator.

  2. Zaloguj się do platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure:

    az login --use-device-code   
    
  3. Zainstaluj interfejs wiersza polecenia platformy Velero , uruchamiając następujące polecenie:

Uwaga

Flaga --use-restic nie jest już obsługiwana w wersji velero 1.10+, aby móc używać flagi w wersji 1.9.x jest wymagana

choco install velero   
  1. W razie potrzeby przejdź do subskrypcji platformy Azure, której chcesz użyć dla kopii zapasowych.

    Domyślnie usługa Velero przechowuje kopie zapasowe w tej samej subskrypcji platformy Azure co maszyny wirtualne i dyski i nie umożliwia przywracania kopii zapasowych do grupy zasobów w innej subskrypcji. Aby włączyć tworzenie kopii zapasowych i przywracanie w ramach subskrypcji, określ subskrypcję do użycia dla kopii zapasowych. Możesz pominąć ten krok, jeśli jesteś już w subskrypcji, której chcesz użyć do tworzenia kopii zapasowych.

    Przejdź do subskrypcji, której chcesz użyć dla kopii zapasowych:

    1. Użyj nazwy subskrypcji, aby znaleźć identyfikator subskrypcji:

      $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. Następnie zmień subskrypcję:

      az account set -s $AZURE_BACKUP_SUBSCRIPTION_ID
      
  2. Utwórz konto usługi Azure Storage i kontener obiektów blob.

    W przypadku używania Azure Blob Storage do tworzenia kopii zapasowych usługa Velero wymaga konta magazynu i kontenera obiektów blob do przechowywania kopii zapasowych. W poniższym przykładzie pokazano konto magazynu utworzone w nowej grupie zasobów Velero_Backups .

    Musisz utworzyć konto magazynu z globalnie unikatowym identyfikatorem, który może być używany w systemie DNS. Przykładowy skrypt używa uuidgen aplikacji do losowego generowania unikatowej nazwy. Można użyć dowolnej metody, o ile nazwa jest zgodna z regułami nazewnictwa platformy Azure dla kont magazynu.

    Konto magazynu jest tworzone przy użyciu funkcji szyfrowania magazynowanych (przy użyciu kluczy zarządzanych przez firmę Microsoft) i jest skonfigurowane tak, aby zezwalać tylko na dostęp za pośrednictwem połączeń HTTPS.

    Aby utworzyć konto magazynu i kontener obiektów blob, wykonaj następujące kroki:

    1. Utwórz grupę zasobów dla konta magazynu kopii zapasowej. W razie potrzeby zmień katalogi na preferowaną lokalizację i uruchom następujące polecenia:

      $AZURE_BACKUP_RESOURCE_GROUP="Velero_Backups"
      az group create -n $AZURE_BACKUP_RESOURCE_GROUP --location WestUS
      
    2. Utwórz konto magazynu:

      $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. Utwórz kontener obiektów blob:

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

      W przykładzie użyto kontenera obiektów blob o nazwie velero. Możesz użyć innej nazwy, najlepiej unikatowej dla pojedynczego klastra Kubernetes.

  3. Utwórz jednostkę usługi:

    1. Pobierz identyfikator subskrypcji i identyfikator dzierżawy dla konta platformy Azure:

      $AZURE_SUBSCRIPTION_ID=(az account list --query '[?isDefault].id' -o tsv)
      $AZURE_TENANT_ID=(az account list --query '[?isDefault].tenantId' -o tsv) 
      
    2. Utwórz jednostkę usługi z uprawnieniami współautora.

      Jednostkę usługi można utworzyć z rolą Współautor lub użyć roli niestandardowej:

      • Rola współautora: Rola Współautor udziela dostępu w całej subskrypcji, dlatego upewnij się, że należy chronić to poświadczenie, jeśli przypiszesz tę rolę.
      • Rola niestandardowa: Jeśli potrzebujesz bardziej restrykcyjnej roli, użyj roli niestandardowej.

      Przypisz rolę Współautor:

      Jeśli będziesz używać platformy Velero do tworzenia kopii zapasowych wielu klastrów z wieloma kontenerami obiektów blob, możesz utworzyć unikatową nazwę użytkownika dla każdego klastra zamiast używać nazwy velero.

      Aby utworzyć jednostkę usługi z rolą Współautor, użyj następującego polecenia. Zastąp własny identyfikator subskrypcji i opcjonalnie własną nazwą główną usługi. Tożsamość Microsoft Entra wygeneruje dla Ciebie wpis tajny.

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

      W razie potrzeby wprowadź następujące korekty w poleceniu:

      • Jeśli planujesz używać różnych subskrypcji dla klastra obciążeń i plików kopii zapasowych platformy Velero, podaj oba identyfikatory subskrypcji, jak w poniższym przykładzie:

        $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)
        
      • Jeśli nie chcesz używać velero jako nazwy głównej usługi, upewnij się, że --name wybrana nazwa jest unikatowa w Tożsamość Microsoft Entra i nie powoduje konfliktu z innymi jednostkami usługi ani rejestracjami aplikacji.

      Ważne

      Wpis tajny jest wyświetlany tylko w tym kroku po utworzeniu jednostki usługi. Pamiętaj, aby zanotować wpis tajny do użycia w przyszłych krokach.

      Użyj roli niestandardowej:

      Jeśli chcesz włączyć minimalne akcje dostawcy zasobów, utwórz rolę niestandardową i przypisz tę rolę do jednostki usługi.

      1. Utwórz plik o nazwie azure-role.json z następującą zawartością. Zastąp własną niestandardową nazwą roli i identyfikatorem subskrypcji.

        {
            "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. Utwórz rolę niestandardową i jednostkę usługi:

        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)
        

      Aby uzyskać więcej informacji na temat tworzenia ról niestandardowych, zobacz Ustawianie uprawnień dla platformy Velero.

  4. Pobierz nazwę główną usługi i przypisz tę nazwę do zmiennej AZURE_CLIENT_ID :

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

    Uwaga

    Jednostki usługi wygasają. Aby dowiedzieć się, kiedy nowa jednostka usługi wygaśnie, uruchom następujące polecenie: az ad sp show --id $AZURE_CLIENT_ID.

  5. Utwórz plik zawierający zmienne wymagane przez instalację platformy Velero. Polecenie wygląda podobnie do następującego:

    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
    

    Ważne

    Usuń ten plik po zainstalowaniu platformy Velero. Wpis tajny klienta jest w postaci zwykłego tekstu, co może stanowić zagrożenie bezpieczeństwa.

    Przed kontynuowaniem sprawdź, czy plik jest poprawnie sformatowany. Rozszerzenie nazwy pliku nie ma znaczenia.

    • Usuń wszelkie dodatkowe spacje lub karty.
    • Upewnij się, że nazwy zmiennych są poprawne.
  6. Zainstaluj i uruchom platformę Velero.

    Zainstaluj platformę Velero w klastrze i uruchom wdrożenie. Ta procedura tworzy przestrzeń nazw o nazwie velero i dodaje wdrożenie o nazwie velero do przestrzeni nazw.

    1. Zainstaluj platformę Velero przy użyciu następującego polecenia. Musisz dostosować przykładowe polecenie.

      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
      

      Ustaw następujące zmienne zgodnie z potrzebami:

      • Polecenie instaluje wtyczkę platformy Microsoft Azure, która musi być zgodna z używaną wersją interfejsu wiersza polecenia platformy Velero. Przykładowe polecenie używa wtyczki platformy Microsoft Azure w wersji 1.5.0, która jest zgodna z najnowszą wersją interfejsu wiersza polecenia platformy Velero, 1.9.0. Aby dowiedzieć się, która wersja wtyczki platformy Microsoft Azure ma zostać zainstalowana przy użyciu wersji interfejsu wiersza polecenia Valero, zobacz macierz zgodności.

      • Pamiętaj o dołączeniu parametru --use-restic , aby włączyć tworzenie kopii zapasowych woluminów Kubernetes na poziomie systemu plików przy użyciu polecenia Restic. Restic może służyć do tworzenia kopii zapasowej dowolnego typu woluminu Kubernetes. Domyślnie usługa Velero obsługuje tworzenie migawek woluminów trwałych dla woluminów Amazon EBS, platformy Azure Dyski zarządzane i dysków trwałych Google. W usłudze AKS Arc woluminy Kubernetes używają udostępnionych woluminów klastra (CSV) do przechowywania danych. Restic W związku z tym jest konieczne włączenie trwałych migawek woluminów. Usługa AKS Arc obecnie nie obsługuje migawek woluminów.

      • Parametr subscriptionId=$AZURE_BACKUP_SUBSCRIPTION_ID jest opcjonalny. Należy je uwzględnić tylko wtedy, gdy Velero i klaster obciążeń mają różne identyfikatory subskrypcji. Jeśli korzystają z tej samej subskrypcji platformy Azure, możesz usunąć subscriptionId parametr , a plik credentials-velero.txt dostarczy te informacje.

      Usługa Velero jest uruchamiana automatycznie podczas instalacji.

    2. Sprawdź, czy usługa Velero działa prawidłowo:

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

      Polecenie get pods powinno pokazać, że zasobniki Velero są uruchomione.

Instalowanie usługi Velero z magazynem MinIO

Procedury opisane w tej sekcji opisują sposób instalowania platformy Velero i używania magazynu MinIO na potrzeby kopii zapasowych. Jeśli wolisz używać Azure Blob Storage do tworzenia kopii zapasowych, przejdź do sekcji Instalowanie platformy Velero przy użyciu Azure Blob Storage.

Jeśli nie chcesz przechowywać kopii zapasowych w usłudze MinIO, przejdź do sekcji Konfigurowanie platformy Velero, aby używać Azure Blob Storage.

  1. Zainstaluj interfejs wiersza polecenia platformy Velero, uruchamiając następujące polecenie. Zainstalować Chocolately jeśli jeszcze tego nie zrobiono.

    choco install velero
    
  2. Zainstaluj polecenie MinIO:

    1. Utwórz trwały wolumin do przechowywania kopii zapasowej MinIO. W przykładzie tworzony jest wolumin trwały w domyślnej klasie magazynu w usłudze AKS Arc, która już istnieje.

      1. Utwórz plik YAML o nazwie minio-pvc-storage.yaml z następującą zawartością:

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

        Utwórz wolumin trwały, uruchamiając następujące polecenie:

        kubectl create -f minio-pvc-storage.yaml
        
      2. Utwórz plik wdrożenia minio-deployment.yaml na potrzeby uruchamiania funkcji MinIO. Dołącz następującą zawartość. Wdrożenie będzie używać utworzonego trwałego woluminu.

        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" 
        

        Następnie utwórz wdrożenie:

        kubectl create -f minio-deployment.yaml
        
    2. Utwórz usługę Kubernetes o nazwie minio-service.yaml. Ta usługa zapewni zewnętrzne adresy IP zasobnikowi MinIO.

      Utwórz plik YAML z następującymi ustawieniami, aby skonfigurować usługę:

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

      Następnie utwórz usługę:

      kubectl create -f mino-service.yaml
      
    3. Pobierz zewnętrzny adres IP zasobnika MinIO, uruchamiając następujące polecenie. Użyjesz tego adresu do zainstalowania platformy Velero.

      kubectl get svc
      
    4. Aby sprawdzić, czy funkcja MinIO jest uruchomiona, zaloguj się do adresu IP w przeglądarce lub użyj klienta MinIO, zgodnie z poniższym opisem.

      Zainstaluj klienta MinIO i przejrzyj pliki MinIO.

      Pobierz klienta MinIO:

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

      Następnie ustaw alias:

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

      Na koniec przejrzyj instalację MinIO:

      mc ls minio
      
    5. Utwórz zasobnik do przechowywania plików Velero. Ten zasobnik będzie używany w instalacji platformy Velero.

      mc mb minio/velero-backup
      
    6. Utwórz plik poświadczeń MinIO z następującymi informacjami:

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

    Przed uruchomieniem tego polecenia sprawdź nazwę zasobnika, poświadczenia MinIO i zewnętrzny adres IP MinIO.

  4. Sprawdź, czy usługa Velero działa prawidłowo:

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

    Polecenie get pods powinno pokazać, że zasobniki Velero są uruchomione.

Tworzenie kopii zapasowej klastra

Możesz utworzyć kopię zapasową lub przywrócić wszystkie obiekty w klastrze albo filtrować obiekty według typu, przestrzeni nazw i/lub etykiety.

Tworzenie kopii zapasowej

Użyj polecenia Velero backup create , aby utworzyć kopie zapasowe w wybranym magazynie. W poniższych przykładach użyto flagi --default-volumes-to-restic , która tworzy migawkę woluminów trwałych. Aby uzyskać informacje o innych opcjach tworzenia kopii zapasowych, zobacz Velero Backup Reference (Dokumentacja kopii zapasowych w usłudze Velero).

  • Kopia zapasowa na żądanie wszystkich przestrzeni nazw w klastrze:

    velero backup create <BACKUP-NAME> --default-volumes-to-restic
    
  • Kopia zapasowa na żądanie pojedynczej przestrzeni nazw w klastrze:

    velero backup create <BACKUP-NAME> --include-namespaces <NAMESPACE1> --default-volumes-to-restic
    
  • Kopia zapasowa na żądanie wielu wybranych przestrzeni nazw w klastrze:

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

Sprawdzanie postępu tworzenia kopii zapasowej

  • Aby sprawdzić postęp tworzenia kopii zapasowej, uruchom następujące polecenie:

    velero backup describe <BACKUP-NAME>
    
  • Jeśli używasz Azure Blob Storage dla kopii zapasowych, możesz wyświetlić kopię zapasową na koncie usługi Azure Storage w utworzonym obiekcie blob/kontenerze.

Przywracanie klastra

Aby przywrócić klaster, należy utworzyć nowy klaster, aby przywrócić stary klaster. Nie można przywrócić kopii zapasowej klastra do istniejącego klastra.

Polecenie restore umożliwia przywrócenie wszystkich obiektów i woluminów trwałych z wcześniej utworzonej kopii zapasowej. Można również przywrócić tylko filtrowany podzbiór obiektów i woluminów trwałych. Aby uzyskać więcej opcji tworzenia kopii zapasowych, zobacz Filtrowanie zasobów.

W klastrze, do którego chcesz przywrócić kopię zapasową ( klaster docelowy):

  1. Wdróż usługę Velero, korzystając z powyższych instrukcji. Użyj tych samych poświadczeń platformy Azure, które były używane dla klastra źródłowego.

  2. Upewnij się, że obiekt kopii zapasowej Velero został utworzony, uruchamiając następujące polecenie. Zasoby Velero są synchronizowane z plikami kopii zapasowych w magazynie w chmurze.

    velero backup describe <BACKUP-NAME>
    
  3. Po potwierdzeniu, że jest obecna właściwa kopia zapasowa (BACKUP-NAME), przywróć wszystkie obiekty w kopii zapasowej:

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

Uzyskiwanie pomocy dotyczącej poleceń platformy Velero

Aby wyświetlić wszystkie opcje skojarzone z określonym poleceniem Velero, użyj --help flagi z poleceniem . Na przykład velero restore create --help pokazuje wszystkie opcje skojarzone z poleceniem velero restore create .

Aby na przykład wyświetlić listę wszystkich opcji velero restorepolecenia , uruchom velero restore --helppolecenie , które zwraca następujące informacje:

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

Odinstalowywanie platformy Velero

Aby odinstalować aplikację Velero z klastra i usunąć wszystkie zasoby utworzone przez instalację platformy Velero, uruchom następujące polecenia:

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

Następne kroki