Memindahkan volume persisten Azure Disk ke kluster AKS lain dalam langganan yang sama atau berbeda

Artikel ini menjelaskan cara memindahkan volume persisten Azure Disk dengan aman dari satu kluster Azure Kubernetes Service (AKS) ke kluster lain dalam langganan yang sama atau dalam langganan yang berbeda. Langganan target harus berada di wilayah yang sama.

Urutan langkah-langkah untuk menyelesaikan pemindahan ini adalah:

  • Untuk menghindari kehilangan data, konfirmasikan bahwa status sumber daya Azure Disk pada kluster AKS sumber tidak dalam status Terlampir .
  • Pindahkan sumber daya Azure Disk ke grup sumber daya target dalam langganan yang sama atau langganan yang berbeda.
  • Validasi bahwa pemindahan sumber daya Azure Disk berhasil.
  • Buat volume persisten (PV) dan klaim volume persisten (PVC) lalu pasang disk yang dipindahkan sebagai volume pada pod pada kluster target.

Sebelum Anda mulai

  • Pastikan Anda memiliki Azure CLI versi 2.0.59 atau yang lebih baru yang diinstal dan dikonfigurasi. Jalankan az --version untuk mencari tahu versinya. Jika Anda perlu memasang atau meningkatkan, lihat Memasang Azure CLI.
  • Tinjau detail dan persyaratan tentang memindahkan sumber daya antar wilayah yang berbeda di Memindahkan sumber daya ke grup sumber daya atau langganan baru. Pastikan untuk meninjau daftar periksa sebelum memindahkan sumber daya di artikel tersebut.
  • Kluster sumber harus memiliki satu atau beberapa volume persisten dengan Azure Disk yang terpasang.
  • Anda harus memiliki kluster AKS pada langganan yang ditargetkan.

Memeriksa status volume disk

Penting untuk menghindari risiko kerusakan data, inkonsistensi, atau kehilangan data saat bekerja dengan volume persisten. Untuk mengurangi risiko ini selama proses migrasi atau pemindahan, Anda harus terlebih dahulu memverifikasi bahwa volume disk tidak terpasang dengan melakukan langkah-langkah berikut.

  1. Identifikasi grup sumber daya simpul tersebut yang menghosting disk terkelola Azure menggunakan perintah az aks show dan tambahkan parameter --query nodeResourceGroup.

    az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv
    

    Output perintah menyerupai contoh berikut:

    MC_myResourceGroup_myAKSCluster_eastus
    
  2. Cantumkan disk terkelola menggunakan az disk list perintah . Referensikan grup sumber daya yang dikembalikan di langkah sebelumnya.

    az disk list --resource-group MC_myResourceGroup_myAKSCluster_eastus
    

    Tinjau daftar dan catat volume disk mana yang Anda rencanakan untuk dipindahkan ke kluster lain. Validasi juga status disk dengan mencari properti diskState. Hasil perintah merupakan contoh ringkas.

    {
    "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",
    

    Catatan

    Perhatikan nilai resourceGroup bidang untuk setiap disk yang ingin Anda pindahkan dari output di atas. Grup sumber daya ini adalah grup sumber daya simpul, bukan grup sumber daya kluster. Anda akan memerlukan nama grup sumber daya ini untuk memindahkan disk.

  3. Jika diskState menunjukkan Attached, pertama-tama tentukan apakah ada beban kerja yang masih mengakses volume dan menghentikannya. Setelah jangka waktu tertentu, status disk mengembalikan status Unattached dan kemudian dapat dipindahkan.

Memindahkan volume penyimpanan persisten

Untuk memindahkan volume atau volume persisten ke kluster AKS lain, ikuti langkah-langkah yang dijelaskan dalam Memindahkan sumber daya Azure ke grup sumber daya atau langganan baru. Anda dapat menggunakan portal Azure, Azure PowerShell, atau menggunakan Azure CLI untuk melakukan migrasi.

Selama proses ini, Anda mereferensikan:

  • Nama atau ID sumber daya dari grup sumber daya node asal yang menghosting disk terkelola Azure. Anda dapat menemukan nama grup sumber daya node dengan menavigasi ke dasbor Disk di portal Azure dan mencatat grup sumber daya yang terkait untuk disk Anda.
  • Nama atau ID sumber daya dari grup sumber daya tujuan untuk memindahkan disk terkelola.
  • Nama atau ID sumber daya dari disk terkelola.

Catatan

Karena dependensi antara penyedia sumber daya, operasi ini dapat memakan waktu hingga empat jam untuk diselesaikan.

Verifikasi bahwa volume disk telah dipindahkan

Setelah memindahkan volume disk ke grup sumber daya kluster target, validasi sumber daya dalam daftar grup sumber daya menggunakan az disk list perintah . Referensikan grup sumber daya tujuan tempat sumber daya dipindahkan. Dalam contoh ini, disk dipindahkan ke grup sumber daya bernama MC_myResourceGroup_myAKSCluster_eastus.

  az disk list --resource-group MC_myResourceGroup_myAKSCluster_eastus

Memasang disk yang dipindahkan sebagai volume

Untuk memasang volume disk yang dipindahkan, buat volume persisten statis dengan ID sumber daya yang disalin di langkah-langkah sebelumnya, klaim volume persisten, dan dalam contoh ini, sebuah pod sederhana.

  1. Buat file pv-azuredisk.yaml dengan volume persisten. Perbarui bidang volumeHandle dengan ID sumber daya disk dari langkah sebelumnya.

    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
    
  2. Buat file pvc-azuredisk.yaml dengan PersistentVolumeClaim yang menggunakan PersistentVolume.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-azuredisk
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi
      volumeName: pv-azuredisk
      storageClassName: managed-csi
    
  3. Buat PersistentVolume dan PersistentVolumeClaim menggunakan perintah kubectl apply dan referensikan dua file YAML yang Anda buat.

    kubectl apply -f pv-azuredisk.yaml
    kubectl apply -f pvc-azuredisk.yaml
    
  4. Verifikasi bahwa PersistentVolumeClaim Anda dibuat dan terikat ke PersistentVolume menggunakan perintah kubectl get.

    kubectl get pvc pvc-azuredisk
    

    Output perintah menyerupai contoh berikut:

    NAME            STATUS   VOLUME         CAPACITY    ACCESS MODES   STORAGECLASS   AGE
    pvc-azuredisk   Bound    pv-azuredisk   20Gi        RWO                           5s
    
  5. Untuk mereferensikan PersistentVolumeClaim Anda, buat file azure-disk-pod.yaml. Dalam contoh manifes, nama pod adalah 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
    
  6. Terapkan konfigurasi dan pasang volume dengan menggunakan perintah kubectl apply.

    kubectl apply -f azure-disk-pod.yaml
    
  7. Periksa status pod dan data yang dimigrasikan dengan volume yang dipasang di dalam sistem file pod pada /mnt/azure. Pertama, dapatkan status pod menggunakan kubectl get perintah .

    kubectl get pods
    

    Output perintah menyerupai contoh berikut:

    NAME    READY   STATUS    RESTARTS   AGE
    mypod   1/1     Running   0          4m1s
    

    Verifikasi data di dalam volume yang dipasang /mnt/azure menggunakan perintah kubectl exec.

    kubectl exec -it mypod -- ls -l /mnt/azure/
    

    Output perintah menyerupai contoh berikut:

    total 28
    -rw-r--r--    1 root     root       0 Jan 11 10:09 file-created-in-source-aks
    

Langkah berikutnya