本文說明如何將 Azure 磁碟永續性磁碟區從一個 Azure Kubernetes Service (AKS) 叢集安全地移至相同訂用帳戶或不同訂用帳戶中的另一個叢集。 目標訂用帳戶必須位於相同的區域中。
完成此移動的步驟順序如下:
- 若要避免資料遺失,請確認來源 AKS 叢集上的 Azure 磁碟資源狀態不是處於 [已連結] 狀態。
- 將 Azure 磁碟資源移至相同訂用帳戶或不同訂用帳戶中的目標資源群組。
- 驗證 Azure 磁碟資源移動是否成功。
- 建立持續性磁碟區 (PV) 與持續性磁碟區宣告 (PVC),然後在目標叢集上將已移動的磁碟掛接為 Pod 的磁碟區。
開始之前
- 確定您已安裝並設定 Azure CLI 2.0.59 版或更新版本。 若要尋找版本,請執行
az --version。 如果您需要安裝或升級,請參閱安裝 Azure CLI。 - 在將資源移至新的資源群組或訂用帳戶中檢閱有關在不同區域之間移動資源的詳細資料和需求。 務必先檢閱該文中的移動資源前的檢查清單。
- 來源叢集必須有一或多個已連結 Azure 磁碟的持久性磁碟區。
- 您必須在目標訂用帳戶中具有 AKS 叢集。
驗證磁碟的磁碟區狀態
使用永續性磁碟區時,務必避免資料損毀、不一致或資料遺失的風險。 若要在移轉或移動程序期間降低這些風險,您必須先執行下列步驟來確認磁碟的磁碟區是否未連結。
用指令
az aks show識別承載 Azure 管理磁碟的節點資源群組,並加入參數--query nodeResourceGroup。az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv此命令的輸出與下列範例類似:
MC_myResourceGroup_myAKSCluster_eastus使用
az 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 入口網站、Azure PowerShell,或使用 Azure CLI 來執行移轉。
在此程序期間,您會參考:
- 承載 Azure 管理磁碟的來源節點資源群組名稱或資源 ID。 您可以在 Azure 入口網站中瀏覽至 [磁碟] 儀表板,並記下磁碟的相關資源群組,以尋找節點資源群組的名稱。
- 受控磁碟要移至的目標資源群組的名稱或資源識別碼。
- 受控磁碟資源的名稱或資源識別碼。
注意
由於資源提供者之間的相依性,此作業最多可能需要四個小時才能完成。
確認磁碟區已被移動
將磁碟磁碟區移至目標叢集資源群組之後,請使用 az disk list 命令來驗證資源群組清單中的資源。 參考移動資源的目的地資源群組。 在此範例中,磁碟已移至名為 MC_myResourceGroup_myAKSCluster_eastus 的資源群組。
az disk list --resource-group MC_myResourceGroup_myAKSCluster_eastus
將已移動的磁碟掛接為磁碟區
若要掛接已移動的磁碟磁碟區,請建立靜態持續性磁碟區 (使用前述步驟複製的資源識別碼)、持續性磁碟區宣告,並在此範例中建立簡單的 Pod。
建立包含持續性磁碟區的 pv-azuredisk.yaml 檔案。 使用前一個步驟中的磁碟資源識別碼,更新 volumeHandle 欄位。
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: ext4建立包含 PersistentVolumeClaim 的 pvc-azuredisk.yaml 檔案,該宣告會使用 PersistentVolume。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-azuredisk spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi volumeName: pv-azuredisk storageClassName: managed-csi使用命令並參考已建立的兩個 YAML 檔案來建立PersistentVolume 和
kubectl apply。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 5s若要參考 PersistentVolumeClaim,請建立 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檢查 Pod 狀態,以及將磁碟區掛接在 Pod 檔案系統
/mnt/azure內的已移轉資料。 首先,使用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 中的儲存體和備份最佳做法。