이 문서에서는 한 AKS(Azure Kubernetes Service) 클러스터에서 동일한 구독 또는 다른 구독의 다른 클러스터로 Azure Disk 영구 볼륨을 안전하게 이동하는 방법을 설명합니다. 대상 구독은 동일한 지역에 있어야 합니다.
이 이동을 완료하는 단계는 다음과 같습니다.
- 데이터 손실을 방지하려면 원본 AKS 클러스터의 Azure Disk 리소스 상태가 연결됨 상태가 아닌지 확인합니다.
- Azure Disk 리소스를 동일한 구독 또는 다른 구독의 대상 리소스 그룹으로 이동합니다.
- Azure Disk 리소스 이동이 성공했는지 확인합니다.
- 이동된 디스크를 대상 클러스터의 Pod에 볼륨으로 탑재하기 위해 먼저 PV(영구 볼륨)와 PVC(영구 볼륨 클레임)를 생성합니다.
시작하기 전에
- Azure CLI 버전 2.0.59 이상이 설치 및 구성되어 있어야 합니다. 버전을 확인하려면
az --version을 실행합니다. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요. - 새 리소스 그룹 또는 구독으로 리소스 이동에서 다른 지역 간에 리소스를 이동하는 방법에 대한 세부 정보 및 요구 사항을 검토합니다. 해당 문서에서 리소스를 이동하기 전 체크 리스트를 검토해야 합니다.
- 원본 클러스터에는 Azure Disk가 연결된 하나 이상의 영구 볼륨이 있어야 합니다.
- 대상 구독에 AKS 클러스터가 있어야 합니다.
디스크 볼륨 상태 유효성 검사
영구 볼륨을 사용하는 동안 데이터 손상, 불일치 또는 데이터 손실의 위험을 방지하는 것이 중요합니다. 마이그레이션 또는 이동 프로세스 중에 이러한 위험을 완화하려면 먼저 다음 단계를 수행하여 디스크 볼륨이 연결되지 않았는지 확인해야 합니다.
명령을 사용하여
az aks showAzure 관리 디스크를 호스팅하는 노드 리소스 그룹을 식별하고 매개 변수를 추가합니다--query nodeResourceGroup.az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv명령의 출력은 다음 예제와 유사합니다.
MC_myResourceGroup_myAKSCluster_eastusaz disk list명령을 사용하여 관리 디스크를 나열합니다. 이전 단계에서 반환된 리소스 그룹을 참조합니다.az disk list --resource-group MC_myResourceGroup_myAKSCluster_eastus목록을 검토하고 다른 클러스터로 이동할 디스크 볼륨을 확인합니다. 또한
diskState속성을 찾아 디스크 상태의 유효성을 검사합니다. 명령의 출력은 압축된 예제입니다.{ "LastOwnershipUpdateTime": "2023-04-25T15:09:19.5439836+00:00", "creationData": { "createOption": "Empty", "logicalSectorSize": 4096 }, "diskIOPSReadOnly": 3000, "diskIOPSReadWrite": 4000, "diskMBpsReadOnly": 125, "diskMBpsReadWrite": 1000, "diskSizeBytes": 1073741824000, "diskSizeGB": 1000, "diskState": "Unattached",참고 사항
위의 출력에서 이동하려는 각 디스크의
resourceGroup필드 값을 확인합니다. 이 리소스 그룹은 클러스터 리소스 그룹이 아닌 노드 리소스 그룹입니다. 디스크를 이동하려면 이 리소스 그룹의 이름이 필요합니다.diskState이(가)Attached을(를) 표시하는 경우 먼저 워크로드가 여전히 볼륨에 액세스하고 있는지 확인하고 중지합니다. 일정 기간 후에 디스크 상태는 상태Unattached을(를) 반환한 다음 이동할 수 있습니다.
영구 볼륨 이동
영구 볼륨을 다른 AKS 클러스터로 이동하려면 Azure 리소스를 새 리소스 그룹 또는 구독으로 이동에 설명된 단계를 따릅니다. Azure Portal, Azure PowerShell을 사용하거나 Azure CLI를 사용하여 마이그레이션을 수행할 수 있습니다.
이 프로세스 중에는 다음을 참조합니다.
- Azure 관리 디스크를 호스팅하는 원본 노드 리소스 그룹의 이름 또는 리소스 ID입니다. Azure Portal에서 Disk 대시보드로 이동하고 디스크에 연결된 리소스 그룹을 확인하여 노드 리소스 그룹의 이름을 찾을 수 있습니다.
- 관리 디스크를 이동할 대상 리소스 그룹의 이름 또는 리소스 ID입니다.
- 관리 디스크 리소스의 이름 또는 리소스 ID입니다.
참고 사항
리소스 공급자 간의 종속성 때문에 이 작업을 완료하는 데 최대 4시간이 걸릴 수 있습니다.
디스크 볼륨이 이동되었는지 확인
디스크 볼륨을 대상 클러스터 리소스 그룹으로 이동한 후 az disk list 명령을 사용하여 리소스 그룹 목록의 리소스 유효성을 검사합니다. 리소스가 이동된 대상 리소스 그룹을 참조합니다. 이 예제에서는 디스크가 MC_myResourceGroup_myAKSCluster_eastus 리소스 그룹으로 이동되었습니다.
az disk list --resource-group MC_myResourceGroup_myAKSCluster_eastus
이동된 디스크를 볼륨으로 탑재
이동한 디스크 볼륨을 탑재하려면, 이전 단계에서 복사한 리소스 ID와 퍼시스턴트 볼륨 클레임, 예제의 단순함을 위해 Pod를 사용하여 정적 영구 볼륨을 생성합니다.
영구적 볼륨을 사용하여 pv-azuredisk.yaml 파일을 만듭니다. volumeHandle 필드를 이전 단계의 디스크 리소스 ID로 업데이트합니다.
apiVersion: v1 kind: PersistentVolume metadata: name: pv-azuredisk spec: capacity: storage: 10Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain storageClassName: managed-csi csi: driver: disk.csi.azure.com readOnly: false volumeHandle: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/MC_rg_azure_aks-pvc-target_eastus/providers/Microsoft.Compute/disks/pvc-aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e volumeAttributes: fsType: ext4PersistentVolume을 사용하는 PersistentVolumeClaim을 사용하여 pvc-azuredisk.yaml 파일을 만듭니다.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-azuredisk spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi volumeName: pv-azuredisk storageClassName: managed-csiPersistentVolume 및 PersistentVolumeClaim을
kubectl apply명령을 사용하여 생성하고, 생성한 2개의 YAML 파일을 참조합니다.kubectl apply -f pv-azuredisk.yaml kubectl apply -f pvc-azuredisk.yaml명령을 사용하여 PersistentVolumeClaim이 생성되고
kubectl get에 바인딩되어 있는지 확인합니다.kubectl get pvc pvc-azuredisk명령의 출력은 다음 예제와 유사합니다.
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE pvc-azuredisk Bound pv-azuredisk 20Gi RWO 5sPersistentVolumeClaim을 참조하려면 azure-disk-pod.yaml 파일을 만듭니다. 예제 매니페스트에서 Pod의 이름은 mypod입니다.
apiVersion: v1 kind: Pod metadata: name: mypod spec: nodeSelector: kubernetes.io/os: linux containers: - image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine name: mypod resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi volumeMounts: - name: azure mountPath: /mnt/azure volumes: - name: azure persistentVolumeClaim: claimName: pvc-azuredisk구성을 적용하고 kubectl apply 명령을 사용하여 볼륨을 탑재합니다.
kubectl apply -f azure-disk-pod.yaml/mnt/azure의 마이그레이션된 Pod의 상태와 데이터를 확인하고, Pod 파일 시스템 내에 마운트된 볼륨을 검증합니다. 먼저kubectl get명령을 사용하여 Pod 상태를 가져옵니다.kubectl get pods명령의 출력은 다음 예제와 유사합니다.
NAME READY STATUS RESTARTS AGE mypod 1/1 Running 0 4m1s/mnt/azure명령을 사용하여 탑재된 볼륨kubectl exec내의 데이터를 확인합니다.kubectl exec -it mypod -- ls -l /mnt/azure/명령의 출력은 다음 예제와 유사합니다.
total 28 -rw-r--r-- 1 root root 0 Jan 11 10:09 file-created-in-source-aks
다음 단계
- 디스크 기반 스토리지 솔루션에 대한 자세한 내용은 AKS의 디스크 기반 솔루션을 참조하세요.
- 스토리지 모범 사례에 관한 자세한 내용은 Azure Kubernetes Service의 스토리지 및 백업 모범 사례를 참조하세요.