Spostare volumi permanenti di Azure Disk a un altro cluster del servizio Azure Kubernetes nella stessa sottoscrizione o in una diversa.

Questo articolo descrive come spostare in modo sicuro i volumi permanenti del disco di Azure da un cluster del servizio Azure Kubernetes a un altro nella stessa sottoscrizione o in una diversa. La sottoscrizione di destinazione deve trovarsi nella stessa area.

La sequenza di passaggi per completare questo spostamento è:

  • Per evitare la perdita di dati, verificare che lo stato della risorsa disco di Azure nel cluster AKS di origine non sia in uno stato Assegnato.
  • Spostare la risorsa disco di Azure nel gruppo di risorse di destinazione nella stessa sottoscrizione o in una diversa.
  • Verificare che lo spostamento della risorsa disco di Azure sia riuscito.
  • Creare il volume persistente (PV) e il reclamo di volume persistente (PVC) e quindi montare il disco trasferito come volume su un pod nel cluster di destinazione.

Operazioni preliminari

Convalidare lo stato del volume del disco

È importante evitare il rischio di danneggiamento dei dati, incoerenze o perdite di dati durante l'utilizzo di volumi permanenti. Per attenuare questi rischi durante il processo di migrazione o spostamento, è prima necessario eseguire i passaggi seguenti per verificare che il volume del disco non sia scollegato.

  1. Identificare il gruppo di risorse del nodo che ospita i dischi gestiti di Azure usando il az aks show comando e aggiungere il --query nodeResourceGroup parametro .

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

    L'output del comando è simile all'esempio seguente:

    MC_myResourceGroup_myAKSCluster_eastus
    
  2. Elencare i dischi gestiti usando il comando az disk list. Fare riferimento al gruppo di risorse restituito nel passaggio precedente.

    az disk list --resource-group MC_myResourceGroup_myAKSCluster_eastus
    

    Esaminare l'elenco e notare quali volumi di disco si prevede di spostare nell'altro cluster. Convalidare anche lo stato del disco cercando la proprietà diskState. Il risultato del comando è un esempio sintetico.

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

    Nota

    Si noti il valore del campo resourceGroup per ogni disco da spostare dall'output precedente. Questo gruppo di risorse è il gruppo di risorse del nodo, non il gruppo di risorse del cluster. Per spostare i dischi, è necessario il nome di questo gruppo di risorse.

  3. Se diskState mostra Attached, determinare prima se un carico di lavoro continua ad accedere al volume e arrestarlo. Dopo un periodo di tempo, lo stato del disco restituisce lo stato Unattached e può quindi essere spostato.

Spostare il volume permanente

Per spostare il volume o i volumi permanenti in un altro cluster del servizio Azure Kubernetes, seguire la procedura descritta in Spostare le risorse di Azure in un nuovo gruppo di risorse o in una nuova sottoscrizione. Per eseguire la migrazione, è possibile usare il portale di Azure, Azure PowerShell o l'interfaccia della riga di comando di Azure.

Durante questo processo, si fa riferimento a:

  • Nome o ID risorsa del gruppo di risorse del nodo di origine che ospita i dischi gestiti di Azure. È possibile trovare il nome del gruppo di risorse del nodo passando al dashboard Dischi nel portale di Azure e notando il gruppo di risorse associato per il disco.
  • Nome o ID risorsa del gruppo di risorse di destinazione in cui spostare i dischi gestiti.
  • Nome o ID risorsa delle risorse dei dischi gestiti.

Nota

A causa delle dipendenze tra provider di risorse, il completamento di questa operazione può richiedere fino a quattro ore.

Verificare che il volume del disco sia stato spostato

Dopo aver spostato il volume del disco nel gruppo di risorse cluster di destinazione, convalidare la risorsa nell'elenco dei gruppi di risorse usando il comando az disk list. Fare riferimento al gruppo di risorse di destinazione in cui sono state spostate le risorse. In questo esempio, i dischi sono stati spostati in un gruppo di risorse denominato MC_myResourceGroup_myAKSCluster_eastus.

  az disk list --resource-group MC_myResourceGroup_myAKSCluster_eastus

Montare il disco spostato come volume

Per montare il volume del disco spostato, creare un volume persistente statico utilizzando l'ID risorsa copiato nei passaggi precedenti, la richiesta di volume persistente e, in questo esempio, un semplice pod.

  1. Creare un file pv-azuredisk.yaml con un volume permanente. Aggiornare il campo volumeHandle con l'ID risorsa disco del passaggio precedente.

    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. Creare un file pvc-azuredisk.yaml con PersistentVolumeClaim che usa PersistentVolume.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-azuredisk
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi
      volumeName: pv-azuredisk
      storageClassName: managed-csi
    
  3. Creare PersistentVolume e PersistentVolumeClaim usando il comando kubectl apply e fare riferimento ai due file YAML creati.

    kubectl apply -f pv-azuredisk.yaml
    kubectl apply -f pvc-azuredisk.yaml
    
  4. Verificare che PersistentVolumeClaim sia stato creato e associato a PersistentVolume usando il comando kubectl get.

    kubectl get pvc pvc-azuredisk
    

    L'output del comando è simile all'esempio seguente:

    NAME            STATUS   VOLUME         CAPACITY    ACCESS MODES   STORAGECLASS   AGE
    pvc-azuredisk   Bound    pv-azuredisk   20Gi        RWO                           5s
    
  5. Per fare riferimento al PersistentVolumeClaim, creare un file azure-disk-pod.yaml. Nel manifesto di esempio, il nome del 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
    
  6. Applicare la configurazione e montare il volume usando il comando kubectl apply.

    kubectl apply -f azure-disk-pod.yaml
    
  7. Controllare lo stato del pod e i dati migrati con il volume montato all'interno del file system del pod in /mnt/azure. Prima di tutto, ottenere lo stato del pod usando il comando kubectl get.

    kubectl get pods
    

    L'output del comando è simile all'esempio seguente:

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

    Verificare i dati all'interno del volume /mnt/azure montato usando il comando kubectl exec.

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

    L'output del comando è simile all'esempio seguente:

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

Passaggi successivi