AKS 하이브리드에서 Velero를 사용하여 워크로드 클러스터 백업, 복원

적용 대상: Azure Stack HCI의 AKS, Windows Server의 AKS

이 문서에서는 Velero를 설치하고 사용하여 AKS 하이브리드의 Azure Blob Storage 또는 MinIO 스토리지를 사용하여 워크로드 및 대상 클러스터를 백업 및 복원하는 방법을 설명합니다.

Velero 는 Kubernetes 클러스터 개체 및 영구 볼륨을 백업 및 복원하기 위한 오픈 소스 커뮤니티 표준 도구입니다. 다양한 스토리지 공급자가 백업을 저장할 수 있도록 지원합니다. AKS 하이브리드 대상 클러스터가 충돌하고 복구에 실패하는 경우 Velero 백업을 사용하여 콘텐츠 및 내부 API 개체를 새 클러스터로 복원할 수 있습니다.

백업을 Azure Blob Storage 저장하지 않으려면 Velero와 함께 MinIO를 사용할 수 있습니다. 이 문서에서는 Azure Blob Storage 사용하도록 Velero를 설치 및 구성하거나 MinIO 스토리지를 사용하도록 Velero를 설치 및 구성하는 방법을 설명합니다.

참고

Velero는 공식적으로 Microsoft Windows를 지원하지 않습니다. 테스트에서 Velero 팀은 상태 비스테이션 없는 Windows 애플리케이션만 백업할 수 있었습니다. Restic 상태 저장 애플리케이션 또는 영구 볼륨의 통합 및 백업은 지원되지 않았습니다.

필수 조건

Velero 배포를 시작하기 전에 다음 필수 구성 요소를 완료합니다.

Azure Blob Storage 사용하여 Velero 설치

이 섹션의 절차에서는 Velero를 설치하고 백업에 Azure Blob Storage 사용하는 방법을 설명합니다. Azure에 백업을 저장하지 않으려면 MiniO 스토리지를 사용하여 Velero 설치로 이동합니다.

  1. 관리자 권한으로 PowerShell을 엽니다.

  2. Azure CLI를 사용하여 Azure에 로그인합니다.

    az login --use-device-code   
    
  3. 다음 명령을 실행하여 Velero CLI 를 설치합니다.

    choco install velero   
    
  4. 필요한 경우 백업에 사용할 Azure 구독으로 변경합니다.

    기본적으로 Velero는 VM 및 디스크와 동일한 Azure 구독에 백업을 저장하며 다른 구독의 리소스 그룹에 백업을 복원할 수 없습니다. 구독 간에 백업 및 복원을 사용하도록 설정하려면 백업에 사용할 구독을 지정합니다. 백업에 사용하려는 구독에 이미 있는 경우 이 단계를 건너뛸 수 있습니다.

    백업에 사용할 구독으로 전환합니다.

    1. 구독 이름을 사용하여 구독 ID를 찾습니다.

      $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. 그런 다음, 구독을 변경합니다.

      az account set -s $AZURE_BACKUP_SUBSCRIPTION_ID
      
  5. Azure Storage 계정 및 Blob 컨테이너를 만듭니다.

    백업에 Azure Blob Storage 사용하는 경우 Velero는 백업을 저장하기 위해 스토리지 계정 및 Blob 컨테이너가 필요합니다. 다음 예제에서는 새 Velero_Backups 리소스 그룹에서 만든 스토리지 계정을 보여 줍니다.

    DNS에서 사용할 수 있는 전역적으로 고유한 ID를 사용하여 스토리지 계정을 만들어야 합니다. 샘플 스크립트는 uuidgen 앱을 사용하여 고유 이름을 임의로 생성합니다. 이름이 스토리지 계정에 대한 Azure 명명 규칙을 따르는 한 모든 메서드를 사용할 수 있습니다.

    스토리지 계정은 미사용 데이터 암호화 기능(Microsoft 관리형 키 사용)으로 만들어지고 HTTPS 연결을 통한 액세스만 허용하도록 구성됩니다.

    스토리지 계정 및 Blob 컨테이너를 만들려면 다음 단계를 수행합니다.

    1. 백업 스토리지 계정에 대한 리소스 그룹을 만듭니다. 필요한 경우 디렉터리를 원하는 위치로 변경하고 다음 명령을 실행합니다.

      $AZURE_BACKUP_RESOURCE_GROUP="Velero_Backups"
      az group create -n $AZURE_BACKUP_RESOURCE_GROUP --location WestUS
      
    2. 스토리지 계정을 만듭니다.

      $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. Blob 컨테이너 만들기:

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

      이 예제에서는 라는 veleroBlob 컨테이너를 사용합니다. 단일 Kubernetes 클러스터에 고유한 다른 이름을 사용할 수 있습니다.

  6. 서비스 주체 만들기:

    1. Azure 계정의 구독 ID 및 테넌트 ID를 가져옵니다.

      $AZURE_SUBSCRIPTION_ID=(az account list --query '[?isDefault].id' -o tsv)
      $AZURE_TENANT_ID=(az account list --query '[?isDefault].tenantId' -o tsv) 
      
    2. 기여자 권한이 있는 서비스 주체를 만듭니다.

      기여자 역할을 사용하여 서비스 주체를 만들거나 사용자 지정 역할을 사용할 수 있습니다.

      • 기여자 역할: 기여자 역할은 구독 전체 액세스 권한을 부여하므로 해당 역할을 할당하는 경우 이 자격 증명을 보호해야 합니다.
      • 사용자 지정 역할: 보다 제한적인 역할이 필요한 경우 사용자 지정 역할을 사용합니다.

      기여자 역할 할당:

      Velero를 사용하여 여러 Blob 컨테이너가 있는 여러 클러스터를 백업하는 경우 이름을 사용하는 대신 각 클러스터에 대해 고유한 사용자 이름을 velero만들 수 있습니다.

      기여자 역할을 사용하여 서비스 주체를 만들려면 다음 명령을 사용합니다. 사용자 고유의 구독 ID를 대체하고 필요에 따라 사용자 고유의 서비스 주체 이름을 대체합니다. Azure Active Directory(Azure AD)는 비밀을 생성합니다.

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

      필요한 경우 명령을 조정합니다.

      • 워크로드 클러스터 및 Velero 백업 파일에 서로 다른 구독을 사용하려는 경우 다음 예제와 같이 두 구독 ID를 모두 제공합니다.

        $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)
        
      • 서비스 주체 이름으로 사용하지 velero 않으려면 선택한 가 Azure Active Directory(Azure AD)에서 고유하며 다른 서비스 주체 또는 앱 등록과 충돌하지 않는지 확인 --name 합니다.

      중요

      비밀은 서비스 주체가 만들어지는 이 단계에서만 표시됩니다. 이후 단계에서 사용할 비밀을 기록해 둡니다.

      사용자 지정 역할 사용:

      최소 리소스 공급자 작업을 사용하도록 설정하려면 사용자 지정 역할을 만들고 해당 역할을 서비스 주체에 할당합니다.

      1. 다음 내용을 사용하여 azure-role.json 이라는 파일을 만듭니다. 사용자 고유의 사용자 지정 역할 이름 및 구독 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"
            ],
            "NotActions": [],
            "AssignableScopes": [
              "<SUBSCRIPTION_ID>"
            ]
        }
        
      2. 사용자 지정 역할 및 서비스 주체를 만듭니다.

        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)
        

      사용자 지정 역할을 만드는 방법에 대한 자세한 내용은 Velero에 대한 권한 설정을 참조하세요.

  7. 서비스 주체 이름을 가져와서 해당 이름을 AZURE_CLIENT_ID 변수에 할당합니다.

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

    참고

    서비스 주체가 만료됩니다. 새 서비스 주체가 만료되는 시기를 확인하려면 다음 명령을 az ad sp show --id $AZURE_CLIENT_ID실행합니다.

  8. Velero 설치에 필요한 변수가 포함된 파일을 만듭니다. 명령은 다음과 유사합니다.

    _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
    

    중요

    Velero를 설치한 후 이 파일을 삭제합니다. 클라이언트 암호는 일반 텍스트로 표시되므로 보안 위험이 발생할 수 있습니다.

    계속하기 전에 파일의 형식이 올바르게 지정되었는지 확인합니다. 파일 이름 확장명은 중요하지 않습니다.

    • 추가 공백 또는 탭을 제거합니다.
    • 변수 이름이 올바른지 확인합니다.
  9. Velero를 설치하고 시작합니다.

    클러스터에 Velero를 설치하고 배포를 시작합니다. 이 절차에서는 라는 velero 네임스페이스를 만들고 라는 velero 배포를 네임스페이스에 추가합니다.

    1. 다음 명령을 사용하여 Velero를 설치합니다. 예제 명령을 사용자 지정해야 합니다.

      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
      

      필요에 따라 다음 변수를 설정합니다.

      • 명령은 사용 중인 Velero CLI 버전과 호환되어야 하는 Microsoft Azure 플러그 인을 설치합니다. 예제 명령은 최신 Velero CLI 버전 1.9.0과 호환되는 Microsoft Azure 플러그 인 버전 1.5.0을 사용합니다. Valero CLI 버전과 함께 설치할 Microsoft Azure 플러그 인 버전을 확인하려면 호환성 매트릭스를 참조하세요.

      • 를 사용하여 Restic파일 시스템 수준에서 Kubernetes 볼륨의 백업을 사용하도록 설정하려면 매개 변수를 포함 --use-restic 해야 합니다. Restic 는 모든 유형의 Kubernetes 볼륨을 백업하는 데 사용할 수 있습니다. 기본적으로 Velero는 Amazon EBS 볼륨, Azure Managed Disks 및 Google 영구 디스크에 대한 영구 볼륨의 스냅샷을 생성할 수 있습니다. AKS 하이브리드에서 Kubernetes 볼륨은 CSV(클러스터 공유 볼륨)를 사용하여 데이터를 저장합니다. Restic 따라서 영구 볼륨 스냅샷을 사용하도록 설정하려면 이 필요합니다. AKS 하이브리드는 현재 볼륨 스냅샷을 지원하지 않습니다.

      • subscriptionId=$AZURE_BACKUP_SUBSCRIPTION_ID는 선택 사항입니다. Velero와 워크로드 클러스터에 구독 ID가 다른 경우에만 포함해야 합니다. 동일한 Azure 구독을 사용하는 경우 매개 변수를 subscriptionId 제거할 수 있으며 credentials-velero.txt 파일에서 해당 정보를 제공합니다.

      Velero 서비스는 설치 시 자동으로 시작됩니다.

    2. Velero 서비스가 제대로 실행되고 있는지 확인합니다.

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

      get pods 명령은 Velero Pod가 실행 중임을 보여 줍니다.

MinIO 스토리지를 사용하여 Velero 설치

이 섹션의 절차에서는 Velero를 설치하고 백업에 MinIO 스토리지를 사용하는 방법을 설명합니다. 백업에 Azure Blob Storage 사용하려면 Azure Blob Storage Velero 설치로 이동합니다.

MinIO에 백업을 저장하지 않으려면 Azure Blob Storage 사용하도록 Velero 설정으로 이동합니다.

  1. 다음 명령을 실행하여 Velero CLI를 설치합니다. 설치 Chocolately 아직 없으면 입니다.

    choco install velero
    
  2. MinIO 설치:

    1. MinIO 백업을 저장할 영구 볼륨을 만듭니다. 이 예제에서는 이미 존재하는 AKS 하이브리드의 기본 스토리지 클래스에 영구 볼륨을 만듭니다.

      1. 다음 내용을 사용하여 minio-pvc-storage.yaml이라는 YAML 파일을 만듭니다.

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

        다음 명령을 실행하여 영구 볼륨을 만듭니다.

        kubectl create -f minio-pvc-storage.yaml
        
      2. MinIO를 시작하기 위한 배포 파일 minio-deployment.yaml을 만듭니다. 다음 내용을 포함합니다. 배포는 사용자가 만든 영구 볼륨을 사용합니다.

        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" 
        

        그런 다음 배포를 만듭니다.

        kubectl create -f minio-deployment.yaml
        
    2. minio-service.yaml이라는 Kubernetes 서비스를 만듭니다. 이 서비스는 MinIO Pod에 외부 IP 주소를 제공합니다.

      다음 설정을 사용하여 YAML 파일을 만들어 서비스를 구성합니다.

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

      그런 다음, 서비스를 만듭니다.

      kubectl create -f mino-service.yaml
      
    3. 다음 명령을 실행하여 MinIO Pod의 외부 IP 주소를 가져옵니다. 해당 주소를 사용하여 Velero를 설치합니다.

      kubectl get svc
      
    4. MinIO가 실행 중인지 확인하려면 아래 설명된 대로 브라우저의 IP 주소에 로그인하거나 MinIO 클라이언트를 사용합니다.

      MinIO 클라이언트를 설치하고 MinIO 파일을 탐색합니다.

      MinIO 클라이언트를 다운로드합니다.

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

      다음으로 별칭을 설정합니다.

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

      마지막으로 MinIO 설치를 탐색합니다.

      mc ls minio
      
    5. Velero 파일을 저장할 버킷을 만듭니다. 이 버킷은 Velero 설치에 사용됩니다.

      mc mb minio/velero-backup
      
    6. 다음 정보를 사용하여 MinIO 자격 증명 파일을 만듭니다.

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

    이 명령을 실행하기 전에 버킷 이름, MinIO 자격 증명 및 MinIO 외부 IP 주소를 확인합니다.

  4. Velero 서비스가 제대로 실행되고 있는지 확인합니다.

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

    get pods 명령은 Velero Pod가 실행 중임을 보여 줍니다.

클러스터 백업

클러스터의 모든 개체를 백업하거나 복원하거나 형식, 네임스페이스 및/또는 레이블별로 개체를 필터링할 수 있습니다.

백업 만들기

Velero backup create 명령을 사용하여 선택한 스토리지에 대한 백업을 만듭니다. 다음 예제에서는 영구 볼륨의 --default-volumes-to-restic 스냅샷을 만드는 플래그를 사용합니다. 다른 백업 옵션은 Velero Backup 참조를 참조하세요.

  • 클러스터에 있는 모든 네임스페이스의 주문형 백업:

    velero backup create <BACKUP-NAME> --default-volumes-to-restic
    
  • 클러스터에 있는 단일 네임스페이스의 주문형 백업:

    velero backup create <BACKUP-NAME> --include-namespaces <NAMESPACE1> --default-volumes-to-restic
    
  • 클러스터에서 선택한 여러 네임스페이스의 주문형 백업:

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

백업 진행률 확인

  • 백업 진행률을 확인하려면 다음 명령을 실행합니다.

    velero backup describe <BACKUP-NAME>
    
  • 백업에 Azure Blob Storage 사용하는 경우 만든 Blob/컨테이너 아래의 Azure Storage 계정에서 백업을 볼 수 있습니다.

클러스터 복원

클러스터를 복원하려면 이전 클러스터를 복원할 새 클러스터를 만들어야 합니다. 클러스터 백업을 기존 클러스터로 복원할 수 없습니다.

명령을 restore 사용하면 이전에 만든 백업에서 모든 개체 및 영구 볼륨을 복원할 수 있습니다. 개체 및 영구 볼륨의 필터링된 하위 집합만 복원할 수도 있습니다. 추가 백업 옵션은 리소스 필터링을 참조하세요.

백업을 복원하려는 클러스터에서( 대상 클러스터)

  1. 위의 지침을 사용하여 Velero를 배포합니다. 원본 클러스터에 사용한 것과 동일한 Azure 자격 증명을 사용합니다.

  2. 다음 명령을 실행하여 Velero 백업 개체가 만들어졌는지 확인합니다. Velero 리소스는 클라우드 스토리지의 백업 파일과 동기화됩니다.

    velero backup describe <BACKUP-NAME>
    
  3. 올바른 백업(BACKUP-NAME)이 있는지 확인한 후 백업의 모든 개체를 복원합니다.

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

Velero 명령에 대한 도움말 보기

특정 Velero 명령과 연결된 모든 옵션을 보려면 명령과 함께 플래그를 사용합니다 --help . 예를 들어 는 velero restore create --help 명령과 연결된 모든 옵션을 표시합니다 velero restore create .

예를 들어 의 모든 옵션을 velero restore나열하려면 다음 정보를 반환하는 를 실행 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

벨레로 제거

클러스터에서 Velero를 제거하고 Velero 설치에서 만든 모든 리소스를 제거하려면 다음 명령을 실행합니다.

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

다음 단계