Flytta beständiga Azure Disk-volymer till ett annat AKS-kluster i samma eller en annan prenumeration

Den här artikeln beskriver hur du på ett säkert sätt flyttar beständiga Azure Disk-volymer från ett AKS-kluster (Azure Kubernetes Service) till ett annat i samma prenumeration eller i en annan prenumeration. Målprenumerationen måste finnas i samma region.

Sekvensen med steg för att slutföra den här flytten är:

  • Kontrollera att Azure Disk-resurstillståndet i AKS-källklustret inte är i anslutet tillstånd för att undvika dataförlust.
  • Flytta Azure Disk-resursen till målresursgruppen i samma prenumeration eller en annan prenumeration.
  • Kontrollera att Azure Disk-resursflytten lyckades.
  • Skapa den beständiga volymen (PV) och det beständiga volymkravet (PVC) och montera sedan den flyttade disken som en volym i en pod på målklustret.

Innan du börjar

Verifiera diskvolymtillstånd

Det är viktigt att undvika risken för skadade data, inkonsekvenser eller dataförluster när du arbetar med beständiga volymer. För att minska dessa risker under migrerings- eller flyttprocessen måste du först kontrollera att diskvolymen är oanvänd genom att utföra följande steg.

  1. Identifiera den nodresursgrupp som är värd för Azure-hanterade diskar med hjälp av az aks show kommandot och lägg till parametern --query nodeResourceGroup .

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

    Kommandots utdata liknar följande exempel:

    MC_myResourceGroup_myAKSCluster_eastus
    
  2. Visa en lista över hanterade diskar med kommandot az disk list . Referera till resursgruppen som returnerades i föregående steg.

    az disk list --resource-group MC_myResourceGroup_myAKSCluster_eastus
    

    Granska listan och notera vilka diskvolymer du planerar att flytta till det andra klustret. Verifiera även disktillståndet genom att leta efter diskState-egenskapen. Kommandots utdata är ett komprimerat exempel.

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

    Anteckning

    Observera värdet för fältet resourceGroup för varje disk som du vill flytta från utdata ovan. Den här resursgruppen är nodresursgruppen, inte klusterresursgruppen. Du behöver namnet på den här resursgruppen för att kunna flytta diskarna.

  3. Om diskState visar Attached, avgör först om några arbetslaster fortfarande har åtkomst till volymen och stoppa dem. Efter en tidsperiod returnerar disktillståndet tillstånd Unattached och kan sedan flyttas.

Flytta den beständiga volymen

Om du vill flytta den beständiga volymen eller volymerna till ett annat AKS-kluster följer du stegen som beskrivs i Flytta Azure-resurser till en ny resursgrupp eller prenumeration. Du kan använda Azure Portal, Azure PowerShell eller använda Azure CLI för att utföra migreringen.

Under den här processen refererar du till:

  • Namnet eller resurs-ID:t för källnodresursgruppen som är värd för Azure-hanterade diskar. Du hittar namnet på nodresursgruppen genom att gå till instrumentpanelen Diskar i Azure Portal och notera den associerade resursgruppen för disken.
  • Namn eller resurs-ID för målresursgruppen som de hanterade diskarna ska flyttas till.
  • Namn eller resurs-ID för de hanterade diskresurserna.

Anteckning

På grund av beroendena mellan resursprovidrar kan den här åtgärden ta upp till fyra timmar att slutföra.

Kontrollera att diskvolymen har flyttats

När du har flyttat diskvolymen till målklustrets resursgrupp verifierar du resursen i resursgruppslistan med hjälp av az disk list kommandot . Referera till målresursgruppen där resurserna flyttades. I det här exemplet flyttades diskarna till en resursgrupp med namnet MC_myResourceGroup_myAKSCluster_eastus.

  az disk list --resource-group MC_myResourceGroup_myAKSCluster_eastus

Montera den flyttade disken som en volym

För att montera den flyttade diskvolymen skapar du en statisk persistent volym med resurs-ID:t som kopierades i föregående steg, det beständiga volymanspråket och i det här exemplet en enkel podd.

  1. Skapa en pv-azuredisk.yaml-fil med en beständig volym. Uppdatera fältet volumeHandle med diskresurs-ID från föregående steg.

    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. Skapa en pvc-azuredisk.yaml-fil med en PersistentVolumeClaim som använder PersistentVolume.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-azuredisk
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi
      volumeName: pv-azuredisk
      storageClassName: managed-csi
    
  3. Skapa PersistentVolume och PersistentVolumeClaim med kommandot kubectl apply och referera till de två YAML-filer som du skapade.

    kubectl apply -f pv-azuredisk.yaml
    kubectl apply -f pvc-azuredisk.yaml
    
  4. Kontrollera att PersistentVolumeClaim har skapats och bundits till PersistentVolume med hjälp av kubectl get kommandot .

    kubectl get pvc pvc-azuredisk
    

    Kommandots utdata liknar följande exempel:

    NAME            STATUS   VOLUME         CAPACITY    ACCESS MODES   STORAGECLASS   AGE
    pvc-azuredisk   Bound    pv-azuredisk   20Gi        RWO                           5s
    
  5. Om du vill referera till din PersistentVolumeClaim skapar du en azure-disk-pod.yaml-fil . I exempelmanifestet är poddens namn 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. Använd konfigurationen och montera volymen med kommandot kubectl apply .

    kubectl apply -f azure-disk-pod.yaml
    
  7. Kontrollera statusen för podden och data som har migrerats med volymen monterad i poddfilsystemet på /mnt/azure. Hämta poddstatusen först med kommandot kubectl get.

    kubectl get pods
    

    Kommandots utdata liknar följande exempel:

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

    Kontrollera data i den monterade volymen /mnt/azure med hjälp av kubectl exec kommandot .

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

    Kommandots utdata liknar följande exempel:

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

Nästa steg