Verschieben persistenter Azure Disk-Volumes in einen anderen AKS-Cluster im selben oder einem anderen Abonnement

In diesem Artikel wird beschrieben, wie Sie persistente Azure Disk-Volumes sicher von einem Azure Kubernetes Service (AKS)-Cluster in einen anderen Cluster im selben Abonnement oder in ein anderes Abonnement verschieben. Das Zielabonnement muss sich in derselben Region befinden.

Die Abfolge der Schritte zum Ausführen dieser Verschiebung:

  • Um Datenverluste zu vermeiden, stellen Sie sicher, dass sich der Azure Disk-Ressourcenstatus im Quell-AKS-Cluster in keinem angefügten Zustand befindet.
  • Verschieben Sie die Azure Disk-Ressource in die Zielressourcengruppe im selben Abonnement oder in ein anderes Abonnement.
  • Überprüfen Sie, ob die Azure Disk-Ressourcenverschiebung erfolgreich war.
  • Erstellen Sie das persistente Volume (PV) und den persistenten Volumenanspruch (PVC), und binden Sie dann den verschobenen Datenträger als Volume auf einem Pod auf dem Zielcluster ein.

Bevor Sie beginnen

  • Stellen Sie sicher, dass Version 2.0.59 oder höher der Azure-Befehlszeilenschnittstelle (Azure CLI) installiert und konfiguriert ist. Führen Sie az --version aus, um die Version zu finden. Informationen zum Durchführen einer Installation oder eines Upgrades finden Sie bei Bedarf unter Installieren der Azure CLI.
  • Details und Anforderungen zum Verschieben von Ressourcen zwischen verschiedenen Regionen finden Sie unter Verschieben von Ressourcen in eine neue Ressourcengruppe oder ein neues Abonnement. Überprüfen Sie unbedingt die Checkliste, bevor Sie Ressourcen in diesem Artikel verschieben.
  • Der Quellcluster muss über ein oder mehrere persistente Volumes verfügen, an die ein Azure-Datenträger angeschlossen ist.
  • Sie müssen über einen AKS-Cluster im Zielabonnement verfügen.

Überprüfen des Datenträgervolumestatus

Es ist wichtig, das Risiko von Datenbeschädigungen, Inkonsistenzen oder Datenverlusten beim Arbeiten mit persistenten Volumes zu vermeiden. Um diese Risiken während des Migrations- oder Verschiebungsprozesses zu minimieren, müssen Sie zuerst sicherstellen, dass das Datenträgervolume nicht verbunden ist, indem Sie die folgenden Schritte ausführen.

  1. Identifizieren Sie die Knotenressourcengruppe, die die von Azure verwalteten Datenträger mithilfe des az aks show Befehls hostet, und fügen Sie den --query nodeResourceGroup Parameter hinzu.

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

    Die Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:

    MC_myResourceGroup_myAKSCluster_eastus
    
  2. Listen Sie die verwalteten Datenträger mithilfe des Befehls az disk list auf. Verweisen Sie auf die Ressourcengruppe, die im vorherigen Schritt zurückgegeben wurde.

    az disk list --resource-group MC_myResourceGroup_myAKSCluster_eastus
    

    Überprüfen Sie die Liste und notieren Sie, welche Datenträgervolumes Sie in den anderen Cluster verschieben möchten. Überprüfen Sie auch den Datenträgerstatus, indem Sie nach der diskState-Eigenschaft suchen. Die Ausgabe des Befehls ist ein komprimiertes Beispiel.

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

    Hinweis

    Notieren Sie sich den Wert des Felds resourceGroup für jeden Datenträger, den Sie aus der obigen Ausgabe verschieben möchten. Diese Ressourcengruppe ist die Knotenressourcengruppe, nicht die Clusterressourcengruppe. Sie benötigen den Namen dieser Ressourcengruppe, um die Datenträger zu verschieben.

  3. Wenn diskStateAttached anzeigt, bestimmen Sie zunächst, ob noch Workloads auf das Volume zugreifen, und stoppen Sie diese. Nach einem bestimmten Zeitraum gibt der Datenträgerstatus den Status Unattached zurück und kann dann verschoben werden.

Verschieben des persistenten Volumes

Um persistente Volumes in einen anderen AKS-Cluster zu verschieben, führen Sie die unter Verschieben von Azure-Ressourcen in eine neue Ressourcengruppe oder ein neues Abonnement beschriebenen Schritte aus. Sie können das Azure-Portal, Azure PowerShell oder die Azure CLI zum Durchführen der Migration verwenden.

Während dieses Prozesses verweisen Sie auf:

  • Der Name oder die Ressourcen-ID der Ressourcengruppe des Quellknotens, die die von Azure verwalteten Datenträger hostet. Sie finden den Namen der Knotenressourcengruppe, indem Sie im Azure-Portal zum Dashboard Datenträger navigieren und die zugeordnete Ressourcengruppe für Ihren Datenträger notieren.
  • Name oder Ressourcen-ID der Zielressourcengruppe, in die die verwalteten Datenträger verschoben werden sollen.
  • Name oder Ressourcen-ID der verwalteten Datenträgerressourcen.

Hinweis

Aufgrund der Abhängigkeiten zwischen Ressourcenanbietern kann dieser Vorgang bis zu vier Stunden dauern.

Überprüfen, ob das Datenträgervolume verschoben wurde

Nachdem Sie das Datenträgervolume in die Zielclusterressourcengruppe verschoben haben, überprüfen Sie die Ressource in der Ressourcengruppenliste mithilfe des Befehls az disk list. Verweisen Sie auf die Zielressourcengruppe, in die die Ressourcen verschoben wurden. In diesem Beispiel wurden die Datenträger in eine Ressourcengruppe mit dem Namen MC_myResourceGroup_myAKSCluster_eastus verschoben.

  az disk list --resource-group MC_myResourceGroup_myAKSCluster_eastus

Binden Sie den verschobenen Datenträger als Volume ein

Wenn Sie das verschobene Datenträgervolume einbinden möchten, erstellen Sie ein statisches persistentes Volume mit der Ressourcen-ID, die in den vorherigen Schritten kopiert wurde, mit den persistenten Volumeansprüchen und in diesem Beispiel mit einem einfachen Pod.

  1. Erstellen Sie eine Datei pv-azuredisk.yaml mit einem persistenten Volume. Aktualisieren Sie das volumeHandle-Feld mit der Datenträgerressourcen-ID aus dem vorherigen Schritt.

    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. Erstellen Sie eine Datei pvc-azuredisk.yaml mit einem PersistentVolumeClaim-Objekt, das PersistentVolume verwendet.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-azuredisk
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi
      volumeName: pv-azuredisk
      storageClassName: managed-csi
    
  3. Erstellen Sie PersistentVolume und PersistentVolumeClaim mithilfe des Befehls kubectl apply. Verweisen Sie dabei auf die beiden erstellten YAML-Dateien.

    kubectl apply -f pv-azuredisk.yaml
    kubectl apply -f pvc-azuredisk.yaml
    
  4. Vergewissern Sie sich, dass Ihr PersistentVolumeClaim erstellt und an den PersistentVolume gebunden ist, indem Sie den kubectl get Befehl verwenden.

    kubectl get pvc pvc-azuredisk
    

    Die Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:

    NAME            STATUS   VOLUME         CAPACITY    ACCESS MODES   STORAGECLASS   AGE
    pvc-azuredisk   Bound    pv-azuredisk   20Gi        RWO                           5s
    
  5. Erstellen Sie eine Datei azure-disk-pod.yaml, um auf PersistentVolumeClaim zu verweisen. Im Beispielmanifest ist der Name des Pods 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. Wenden Sie die Konfiguration an, und binden Sie das Volume mithilfe des Befehls kubectl apply ein.

    kubectl apply -f azure-disk-pod.yaml
    
  7. Überprüfen Sie den Podstatus und die Daten, die mit dem Volume migriert wurden, das im Pod-Dateisystem auf /mnt/azure eingebunden wurde. Rufen Sie zuerst den Pod-Status mithilfe des Befehls kubectl get ab.

    kubectl get pods
    

    Die Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:

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

    Überprüfen Sie die Daten im eingebundenen Volume /mnt/azure mithilfe des Befehls kubectl exec.

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

    Die Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:

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

Nächste Schritte