다음을 통해 공유


Azure CLI를 사용하여 Azure Kubernetes Service 백업 복원

이 문서에서는 Azure CLI를 사용하여 Azure Backup이 만든 복원 지점에서 Azure Kubernetes 클러스터를 복원하는 방법을 설명합니다.

이제 Azure Backup은 클러스터에 설치해야 하는 백업 확장을 사용하여 AKS 클러스터(클러스터 리소스 및 클러스터에 연결된 영구 볼륨)를 백업할 수 있습니다. Backup 자격 증명 모음은 이 백업 확장을 통해 클러스터와 통신하여 백업 및 복원 작업을 수행합니다.

OLR(원래 위치 복구)(백업된 AKS 클러스터에서 복원) 및 ALR(대체 위치 복구)(다른 AKS 클러스터에서 복원)을 모두 수행할 수 있습니다. ILR(항목 수준 복구) 백업에서 복원할 항목을 선택할 수도 있습니다.

참고 항목

복원 작업을 시작하기 전에 대상 클러스터에 백업 확장이 설치되어 있고 백업 자격 증명 모음에 대해 신뢰할 수 있는 액세스가 활성화되어 있어야 합니다. 자세히 알아보기.

시작하기 전에

  • AKS 백업을 사용하면 원래 AKS 클러스터(백업됨)와 대체 AKS 클러스터로 복원할 수 있습니다. AKS 백업을 사용하면 전체 복원 및 항목 수준 복원을 수행할 수 있습니다. 복원 구성을 활용하여 복원할 클러스터 리소스를 기반으로 매개 변수를 정의할 수 있습니다.

  • 대상 AKS 클러스터에 백업 확장을 설치해야 합니다. 또한 백업 자격 증명 모음과 AKS 클러스터 간에 신뢰할 수 있는 액세스를 사용하도록 설정해야 합니다.

  • 대상 AKS 클러스터 버전이 백업 중에 사용되는 버전과 다른 경우 최신 클러스터 버전에서 사용되지 않는 리소스와 같은 다양한 시나리오에 대한 경고와 함께 복원 작업이 실패하거나 완료될 수 있습니다. 자격 증명 모음 계층에서 복원하는 경우 스테이징 위치에서 수화 리소스를 사용하여 애플리케이션 리소스를 대상 클러스터로 복원할 수 있습니다.

지원되는 시나리오 및 제한 사항에 대한 자세한 내용은 지원 매트릭스를 참조하세요.

대상 AKS 클러스터 유효성 검사 및 준비

복원 프로세스를 시작하기 전에 AKS 클러스터가 복원을 위해 준비되어 있는지 유효성을 검사해야 합니다. 여기에는 대상 AKS 클러스터와 Backup 자격 증명 모음 간에 신뢰할 수 있는 액세스를 사용하여 백업이 저장/하이드레이션되는 스토리지 계정에 대한 권한이 있는 확장과 함께 설치할 백업 확장이 포함됩니다.

먼저, 다음 명령을 실행하여 백업 확장이 클러스터에 설치되어 있는지 확인합니다.

az k8s-extension show --name azure-aks-backup --cluster-type managedClusters --cluster-name $targetakscluster --resource-group $aksclusterresourcegroup

확장이 설치된 경우 백업이 저장된 스토리지 계정에 대한 적절한 권한이 있는지 확인합니다.

az role assignment list --all --assignee  $(az k8s-extension show --name azure-aks-backup --cluster-name $targetakscluster --resource-group $aksclusterresourcegroup --cluster-type managedClusters --query aksAssignedIdentity.principalId --output tsv)

역할이 할당되지 않은 경우 다음 명령을 실행하여 역할을 할당할 수 있습니다.

az role assignment create --assignee-object-id $(az k8s-extension show --name azure-aks-backup --cluster-name $targetakscluster --resource-group $aksclusterresourcegroup --cluster-type managedClusters --query aksAssignedIdentity.principalId --output tsv) --role 'Storage Account Contributor'  --scope /subscriptions/$subscriptionId/resourceGroups/$storageaccountresourcegroup/providers/Microsoft.Storage/storageAccounts/$storageaccount

Backup 확장이 설치되지 않은 경우 백업이 입력으로 저장되는 스토리지 계정 및 Blob 컨테이너를 사용하여 다음 확장 설치 명령을 실행합니다.

az k8s-extension create --name azure-aks-backup --extension-type microsoft.dataprotection.kubernetes --scope cluster --cluster-type managedClusters --cluster-name $targetakscluster --resource-group $aksclusterresourcegroup --release-train stable --configuration-settings blobContainer=$blobcontainer storageAccount=$storageaccount storageAccountResourceGroup=$storageaccountresourcegroup storageAccountSubscriptionId=$subscriptionId

그런 다음, 다음 명령을 실행하여 스토리지 계정의 확장에 필요한 역할을 할당합니다.

az role assignment create --assignee-object-id $(az k8s-extension show --name azure-aks-backup --cluster-name $targetakscluster --resource-group $aksclusterresourcegroup --cluster-type managedClusters --query aksAssignedIdentity.principalId --output tsv) --role 'Storage Blob Data Contributor'  --scope /subscriptions/$subscriptionId/resourceGroups/$storageaccountresourcegroup/providers/Microsoft.Storage/storageAccounts/$storageaccount

신뢰할 수 있는 액세스 확인

Backup 자격 증명 모음과 대상 AKS 클러스터 간에 신뢰할 수 있는 액세스가 사용하도록 설정되어 있는지 확인하려면 다음 명령을 실행합니다.

az aks trustedaccess rolebinding list --resource-group $aksclusterresourcegroup --cluster-name $targetakscluster

그렇지 않은 경우 다음 명령을 사용하여 신뢰할 수 있는 액세스를 사용하도록 설정할 수 있습니다.

az aks trustedaccess rolebinding create --cluster-name $targetakscluster --name backuprolebinding --resource-group $aksclusterresourcegroup --roles Microsoft.DataProtection/backupVaults/backup-operator --source-resource-id /subscriptions/$subscriptionId/resourceGroups/$backupvaultresourcegroup/providers/Microsoft.DataProtection/BackupVaults/$backupvault

AKS 클러스터로 복원

관련 복구 지점 가져오기

AKS 클러스터와 연결된 모든 인스턴스를 가져오고 관련 인스턴스를 식별합니다.

az dataprotection backup-instance list-from-resourcegraph --datasource-type AzureKubernetesService --datasource-id /subscriptions/$subscriptionId/resourceGroups/$aksclusterresourcegroup/providers/Microsoft.ContainerService/managedClusters/$akscluster 

인스턴스가 식별되면 관련 복구 지점을 가져옵니다.

az dataprotection recovery-point list --backup-instance-name $backupinstancename --resource-group $backupvaultresourcegroup --vault-name $backupvault

보조 지역에 백업을 복원하려는 경우 플래그 --use-secondary-region 를 사용하여 해당 지역에서 사용 가능한 복구 지점을 식별합니다.

az dataprotection recovery-point list --backup-instance-name $backupinstancename --resource-group $backupvaultresourcegroup --vault-name $backupvault --use-secondary-region true

복원 요청 준비

대상 AKS 클러스터에 복원할 항목을 정의하는 복원 구성을 준비하려면 az dataprotection backup-instance initialize-restoreconfig 명령을 실행합니다.

az dataprotection backup-instance initialize-restoreconfig --datasource-type AzureKubernetesService >restoreconfig.json



{
  "conflict_policy": "Skip",
  "excluded_namespaces": null,
  "excluded_resource_types": null,
  "include_cluster_scope_resources": true,
  "included_namespaces": null,
  "included_resource_types": null,
  "label_selectors": null,
  "namespace_mappings": null,
  "object_type": "KubernetesClusterRestoreCriteria",
  "persistent_volume_restore_mode": "RestoreWithVolumeData",
  "resource_modifier_reference": null,
  "restore_hook_references": null,
  "staging_resource_group_id": null,
  "staging_storage_account_id": null
}

복원 구성은 다음 항목으로 구성됩니다.

  • conflict_policy: 복원하는 동안 백업과 같은 이름의 리소스가 클러스터에 있는 경우 충돌을 처리하는 방법을 선택할 수 있습니다. 백업 항목을 복원하지 않는 Skip 또는 백업에 저장된 리소스를 사용하여 클러스터 내 리소스의 변경 가능한 필드를 수정하는 업데이트의 두 가지 옵션이 있습니다.

  • excluded_namespace: 클러스터로 복원되지 않도록 제외할 네임스페이스를 나열할 수 있습니다. 해당 네임스페이스의 기본 리소스는 복원되지 않습니다.

  • excluded_resource_types: 클러스터로 복원되지 않도록 제외할 리소스 종류를 나열할 수 있습니다. 입력의 값은 키 값 쌍으로 API 그룹 종류로 제공되어야 합니다.

  • include_cluster_scope_resources: 값을 true 또는 false로 설정하여 클러스터 범위 리소스를 복원할지 여부를 결정할 수 있습니다.

  • included_namespaces : 클러스터 복원의 일부로만 포함할 네임스페이스를 나열할 수 있습니다. 이러한 네임스페이스의 기본 리소스를 복원해야 합니다.

  • excluded_resource_types: 클러스터로 복원하기 위해서만 포함할 리소스 종류를 나열할 수 있습니다. 입력의 값은 키 값 쌍으로 API 그룹 종류로 제공되어야 합니다.

  • label_selectors: 특정 레이블을 사용하여 복원할 리소스를 선택할 수 있습니다. 입력 값은 키 값 쌍으로 제공되어야 합니다.

  • namespace_mappings: 네임스페이스(및 기본 리소스)를 대상 클러스터의 다른 네임스페이스에 매핑할 수 있습니다. 대상 네임스페이스가 클러스터에 없는 경우 확장에서 새 네임스페이스를 만듭니다. 입력 값은 키 값 쌍으로 제공되어야 합니다.

  • persistent_volume_restore_mode: 이 변수를 사용하여 백업된 영구 볼륨을 복원할지 여부를 결정할 수 있습니다. 허용되는 값은 RestoreWithVolumeData, RestoreWithoutVolumeData입니다.

  • resource_modifier_reference: 이 변수를 사용하여 클러스터에 배포된 리소스 한정자 리소스를 참조할 수 있습니다. 입력 값은 리소스가 배포되는 네임스페이스의 키 값 쌍과 yaml 파일의 이름입니다.

  • restore_hook_references: 이 변수를 사용하여 클러스터에 배포된 복원 후크 리소스를 참조할 수 있습니다. 입력 값은 리소스가 배포되는 네임스페이스의 키 값 쌍과 yaml 파일의 이름입니다.

  • staging_resource_group_id: 자격 증명 모음 계층저장된 백업을 복원하는 경우 리소스 그룹의 ID를 준비 위치로 제공해야 합니다. 이 리소스 그룹에서 백업된 영구 볼륨은 대상 클러스터로 복원되기 전에 수화됩니다.

  • staging_storage_account_id: 자격 증명 모음 계층저장된 백업을 복원하는 경우 스토리지 계정의 ID를 준비 위치로 제공해야 합니다. 이 리소스 그룹에서 백업된 kubernetes 리소스는 대상 클러스터로 복원되기 전에 수화됩니다.

이제 관련된 모든 세부 정보와 함께 복원 요청을 준비합니다. 백업을 원래 클러스터로 복원하는 경우 다음 명령을 실행합니다.

az dataprotection backup-instance restore initialize-for-item-recovery --datasource-type AzureKubernetesService --restore-location $region --source-datastore OperationalStore --recovery-point-id $recoverypointid --restore-configuration restoreconfig.json --backup-instance-id /subscriptions/$subscriptionId/resourceGroups/$aksclusterresourcegroup/providers/Microsoft.DataProtection/backupVaults/$backupvault/backupInstances/$backupinstanceid >restorerequestobject.json

복원할 대상 AKS 클러스터가 원래 클러스터와 다른 경우 다음 명령을 실행합니다.

az dataprotection backup-instance restore initialize-for-data-recovery --datasource-type AzureKubernetesService --restore-location $region --source-datastore OperationalStore --recovery-point-id $recoverypointid --restore-configuration restoreconfig.json --target-resource-id /subscriptions/$subscriptionId/resourceGroups/$aksclusterresourcegroup/providers/Microsoft.ContainerService/managedClusters/$targetakscluster >restorerequestobject.json

참고 항목

자격 증명 모음 계층 --source-datastore 에서 VaultStore로 복구 지점을 선택한 경우 복원 구성에서 스토리지 계정 및 스냅샷 리소스 그룹을 제공합니다.

보조 지역의 클러스터로 복원하려는 경우 플래그 --restore-location 를 보조 지역의 --source-datastore 이름으로 설정하고 VaultStore로 설정합니다.

이제 요구 사항에 따라 JSON 개체를 업데이트한 후, 다음 명령을 실행하여 개체의 유효성을 검사할 수 있습니다.

az dataprotection backup-instance validate-for-restore --backup-instance-name $backupinstancename --resource-group $backupvaultresourcegroup --restore-request-object restorerequestobject.json --vault-name $backupvault

이 명령은 AKS 클러스터 및 Backup 자격 증명 모음에 복원을 수행하는 데 필요한 다른 리소스에 필요한 역할이 있는지 확인합니다. 역할 누락으로 인해 유효성 검사가 실패하는 경우 다음 명령을 실행하여 할당할 수 있습니다.

az dataprotection backup-instance update-msi-permissions --datasource-type AzureKubernetesService --operation Restore --permissions-scope Resource --resource-group  $backupvaultresourcegroup --vault-name $backupvault --restore-request-object restorerequestobject.json --snapshot-resource-group-id /subscriptions/$subscriptionId/resourceGroups/$snapshotresourcegroup

참고 항목

복원 작업 중에 Backup 자격 증명 모음 및 AKS 클러스터에는 복원을 수행하기 위한 특정 역할이 할당되어 있어야 합니다.

  • 대상 AKS 클러스터에는 스냅샷 리소스 그룹에 대한 기여자 역할이 있어야 합니다.
  • 백업 확장에 연결된 사용자 ID는 운영 계층의 경우 백업이 저장되는 스토리지 계정과 자격 증명 모음 계층의 경우 *스테이징 스토리지 계정에 스토리지 Blob 데이터 기여자 역할이 있어야 합니다.
  • Backup 자격 증명 모음은 운영 계층에서 복원하는 경우 대상 AKS 클러스터스냅샷 리소스 그룹에 대한 읽기 권한자 역할이 있어야 합니다.
  • Backup 자격 증명 모음은 자격 증명 모음 계층에서 백업을 복원하는 경우 스테이징 리소스 그룹에 기여자 역할을 해야 합니다.
  • Backup 자격 증명 모음은 자격 증명 모음 계층에서 백업을 복원하는 경우 준비 리소스 그룹에 스토리지 계정 기여자스토리지 Blob 데이터 소유자 역할이 있어야 합니다.

복원 트리거

역할 할당이 완료되면 복원 개체의 유효성을 다시 한 번 검사해야 합니다. 그런 다음, 아래 명령을 실행하여 복원 작업을 트리거할 수 있습니다.

az dataprotection backup-instance restore trigger --backup-instance-name $backupinstancename --restore-request-object restorerequestobject.json 

참고 항목

스테이징 리소스 그룹 및 스토리지 계정에서 하이드레이션된 리소스는 복원 작업이 완료된 후 자동으로 정리되지 않으며 수동으로 삭제됩니다.

작업 추적

az dataprotection job 명령을 사용하여 복원 작업을 추적할 수 있습니다. 모든 작업을 나열하고 특정 작업 세부 정보를 가져올 수 있습니다.

Resource Graph를 사용하여 모든 구독, 리소스 그룹 및 Backup 자격 증명 모음의 모든 작업을 추적할 수도 있습니다. az dataprotection job list-from-resourcegraph 명령을 사용하여 관련 작업을 가져옵니다.

az dataprotection job list-from-resourcegraph --datasource-type AzureKubernetesService --datasource-id /subscriptions/$subscriptionId/resourceGroups/$aksclusterresourcegroup/providers/Microsoft.ContainerService/managedClusters/$akscluster --operation Restore

다음 단계