Déplacer des volumes persistants de disque Azure vers un autre cluster AKS dans le même abonnement ou dans un autre

Cet article explique comment déplacer en toute sécurité des volumes persistants de disque Azure d’un cluster Azure Kubernetes Service (AKS) vers un autre dans le même abonnement ou dans un autre. L’abonnement cible doit se trouver dans la même région.

La série d’étapes pour effectuer ce déplacement est la suivante :

  • Pour éviter toute perte de données, vérifiez que l’état de la ressource de disque Azure sur le cluster AKS source n’est pas dans un état Attaché.
  • Déplacez la ressource de disque Azure vers le groupe de ressources cible dans le même abonnement ou dans un autre.
  • Vérifiez que le déplacement de la ressource de disque Azure Disk a réussi.
  • Créez le volume persistant (PV) ainsi que la revendication de volume persistant (PVC), puis montez le disque déplacé comme volume sur un pod du cluster cible.

Avant de commencer

Valider l’état du volume du disque

Il est important d’éviter les risques d’altération des données, d’incohérences ou de perte de données lors de l’utilisation de volumes persistants. Pour atténuer ces risques pendant le processus de migration ou de déplacement, vous devez d’abord vérifier que le volume du disque n’est pas attaché en effectuant les étapes suivantes.

  1. Identifiez le groupe de ressources de nœud hébergeant les disques managés Azure à l’aide de la az aks show commande et ajoutez le --query nodeResourceGroup paramètre.

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

    La sortie de la commande ressemble à l’exemple suivant :

    MC_myResourceGroup_myAKSCluster_eastus
    
  2. Listez les disques managés à l’aide de la commande az disk list. Faites référence au groupe de ressources retourné à l'étape précédente.

    az disk list --resource-group MC_myResourceGroup_myAKSCluster_eastus
    

    Passez en revue la liste et notez les volumes de disque que vous envisagez de déplacer vers l’autre cluster. Validez également l’état du disque en recherchant la propriété diskState. La sortie de la commande est un exemple condensé.

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

    Remarque

    Notez la valeur du champ resourceGroup pour chaque disque que vous désirez déplacer à partir de la sortie ci-dessus. Ce groupe de ressources est le groupe de ressources de nœud, et non le groupe de ressources de cluster. Vous aurez besoin du nom de ce groupe de ressources pour déplacer les disques.

  3. Si diskState affiche Attached, commencez par vérifier si des charges de travail utilisent encore le volume et interrompez-les le cas échéant. Après une période, l’état du disque retourne l’état Unattached et peut ensuite être déplacé.

Déplacer le volume persistant

Pour déplacer le ou les volumes persistants vers un autre cluster AKS, suivez les étapes décrites dans Déplacer des ressources Azure vers un nouveau groupe de ressources ou un nouvel abonnement. Vous pouvez utiliser le portail Azure, Azure PowerShell ou Azure CLI pour effectuer la migration.

Pendant ce processus, vous référencez :

  • Nom ou ID de ressource du groupe de ressources de nœud source hébergeant les disques managés Azure. Vous trouverez le nom du groupe de ressources de nœud en accédant au tableau de bord Disques dans le portail Azure et en notant le groupe de ressources associé pour votre disque.
  • Le nom ou l’ID de ressource du groupe de ressources de destination vers lequel déplacer les disques managés.
  • Le nom ou l’ID de ressource des ressources des disques managés.

Remarque

En raison des dépendances entre les fournisseurs de ressources, cette opération peut prendre jusqu’à quatre heures.

Vérifier que le volume de disque a été déplacé

Après avoir déplacé le volume de disque vers le groupe de ressources de cluster cible, validez la ressource dans la liste des groupes de ressources à l’aide de la commande az disk list. Référencez le groupe de ressources de destination où les ressources ont été déplacées. Dans cet exemple, les disques ont été déplacés vers un groupe de ressources appelé MC_myResourceGroup_myAKSCluster_eastus.

  az disk list --resource-group MC_myResourceGroup_myAKSCluster_eastus

Monter le disque déplacé en tant que volume

Pour monter le volume de disque déplacé, créez un volume persistant statique avec l’ID de ressource copié dans les étapes précédentes, la revendication de volume persistant et, dans cet exemple, un pod simple.

  1. Créez un fichier pv-azuredisk.yaml avec un volume persistant. Mettez à jour le champ volumeHandle avec l’ID de ressource de disque de l’étape précédente.

    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. Créez un fichier pvc-azuredisk.yaml avec un objet PersistentVolumeClaim qui utilise PersistentVolume.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-azuredisk
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi
      volumeName: pv-azuredisk
      storageClassName: managed-csi
    
  3. Créez PersistentVolume et PersistentVolumeClaim à l’aide de la commande kubectl apply et référencez les deux fichiers YAML créés.

    kubectl apply -f pv-azuredisk.yaml
    kubectl apply -f pvc-azuredisk.yaml
    
  4. Vérifiez que la revendication PersistentVolumeClaim est créée et liée à PersistentVolume à l’aide de la commande kubectl get.

    kubectl get pvc pvc-azuredisk
    

    La sortie de la commande ressemble à l’exemple suivant :

    NAME            STATUS   VOLUME         CAPACITY    ACCESS MODES   STORAGECLASS   AGE
    pvc-azuredisk   Bound    pv-azuredisk   20Gi        RWO                           5s
    
  5. Pour référencer votre PersistentVolumeClaim, créez un fichier azure-disk-pod.yaml. Dans l’exemple de manifeste, le nom du pod est 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. Appliquez la configuration et montez le volume à l’aide de la commande kubectl apply.

    kubectl apply -f azure-disk-pod.yaml
    
  7. Contrôlez l’état du pod ainsi que les données migrées avec le volume monté dans le système de fichiers du pod sur /mnt/azure. Tout d’abord, obtenez l’état du pod à l’aide de la commande kubectl get.

    kubectl get pods
    

    La sortie de la commande ressemble à l’exemple suivant :

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

    Vérifiez les données dans le volume monté /mnt/azure à l’aide de la commande kubectl exec.

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

    La sortie de la commande ressemble à l’exemple suivant :

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

Étapes suivantes