Udostępnij za pośrednictwem


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 usługi Velero do tworzenia kopii zapasowych i przywracania klastrów obciążeń i klastrów docelowych przy użyciu usługi Azure Blob Storage lub magazynu MinIO w usłudze AKS włączonej przez usługę Azure Arc.

Velero to standardowe narzędzie społeczności typu open source do tworzenia kopii zapasowych i przywracania obiektów klastra Kubernetes i woluminów trwałych. Obsługuje różnych dostawców magazynu do przechowywania kopii zapasowych. Jeśli docelowy klaster Kubernetes usługi AKS Arc ulegnie awarii i nie uda się 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 usłudze Azure Blob Storage, możesz użyć funkcji MinIO z usługą Velero. W tym artykule opisano sposób instalowania i konfigurowania usługi Velero do korzystania z usługi Azure Blob Storage lub instalowania i konfigurowania usługi 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ły obsługiwane.

Wymagania wstępne

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

Instalowanie platformy Velero za pomocą usługi Azure Blob Storage

W procedurach w tej sekcji opisano sposób instalowania platformy Velero i używania usługi 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ć na potrzeby 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ę, która ma być używana dla kopii zapasowych. Możesz pominąć ten krok, jeśli jesteś już w subskrypcji, której chcesz użyć na potrzeby 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 korzystania z usługi 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 wygenerowania unikatowej nazwy. Możesz 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. Tworzenie kontenera 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 dla 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ć usługi 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. Identyfikator Entra firmy Microsoft 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 zmiany w poleceniu:

      • Jeśli planujesz używać różnych subskrypcji dla klastra obciążenia 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 nazwy głównej usługi, upewnij się, że --name wybrana nazwa jest unikatowa w identyfikatorze Entra firmy Microsoft i nie powoduje konfliktu z innymi jednostkami usługi ani rejestracjami aplikacji.

      Ważne

      Wpis tajny jest wyświetlany tylko w tym kroku, gdy zostanie utworzona jednostka 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 narzędzia 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 program Velero.

    Zainstaluj rozwiązanie 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 do zainstalowania z wersją interfejsu wiersza polecenia Valero znajduje się w macierzy zgodności.

      • Pamiętaj, aby uwzględnić --use-restic parametr , 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 platforma Velero obsługuje tworzenie migawek woluminów trwałych dla woluminów Amazon EBS, usługi 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 należy włączyć trwałe migawki woluminów. Usługa AKS Arc obecnie nie obsługuje migawek woluminów.

      • Element 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 używają 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 za pomocą magazynu MinIO

W procedurach w tej sekcji opisano sposób instalowania usługi Velero i używania magazynu MinIO na potrzeby kopii zapasowych. Jeśli wolisz używać usługi Azure Blob Storage do tworzenia kopii zapasowych, przejdź do sekcji Instalowanie usługi Velero z usługą Azure Blob Storage.

Jeśli nie chcesz przechowywać kopii zapasowych w usłudze MinIO, przejdź do sekcji Konfigurowanie usługi Velero w celu korzystania z usługi Azure Blob Storage.

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

    choco install velero
    
  2. Zainstaluj polecenie MinIO:

    1. Utwórz wolumin trwały do przechowywania kopii zapasowej MinIO. W przykładzie tworzony jest wolumin trwały w domyślnej klasie magazynu w usłudze AKS Arc, który 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 woluminu trwałego.

        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, jak opisano poniżej.

      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 minio.credentials z następującymi informacjami:

      [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 zapoznać się z innymi opcjami tworzenia kopii zapasowych, zobacz Velero Backup Reference (Dokumentacja kopii zapasowej Velero).

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

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

    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 usługi Azure Blob Storage do tworzenia 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 podzestaw 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 platformy Velero są synchronizowane z plikami kopii zapasowych w magazynie w chmurze.

    velero backup describe <BACKUP-NAME>
    
  3. Po potwierdzeniu obecności odpowiedniej kopii zapasowej (BACKUP-NAME) przywróć wszystkie obiekty w kopii zapasowej:

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

Uzyskaj pomoc dotyczącą poleceń 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ć usługę 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