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