Transferir volumes persistentes do Azure Disk para outro cluster AKS na mesma subscrição ou noutra subscrição.

Este artigo descreve como mover com segurança os volumes persistentes do Disco do Azure de um cluster do Serviço Kubernetes do Azure (AKS) para outro na mesma assinatura ou em uma assinatura diferente. A assinatura de destino deve estar na mesma região.

A sequência de etapas para concluir essa movimentação são:

  • Para evitar a perda de dados, confirme que o estado do recurso do Disco do Azure no cluster AKS de origem não está num estado Anexado.
  • Mova o recurso de disco do Azure para o grupo de recursos de destino na mesma assinatura ou em uma assinatura diferente.
  • Valide se a movimentação de recursos do Disco do Azure foi bem-sucedida.
  • Crie o volume persistente (PV) e a declaração de volume persistente (PVC) e, em seguida, monte o disco movido como um volume em um pod no cluster de destino.

Antes de começar

Validar o estado do volume do disco

É importante evitar o risco de corrupção de dados, inconsistências ou perda de dados ao trabalhar com volumes persistentes. Para reduzir esses riscos durante o processo de migração ou movimentação, você deve primeiro verificar se o volume do disco está desanexado executando as etapas a seguir.

  1. Identifique o grupo de recursos de nós que aloja os discos geridos do Azure usando o az aks show comando e adicione o --query nodeResourceGroup parâmetro.

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

    A saída do comando é semelhante ao seguinte exemplo:

    MC_myResourceGroup_myAKSCluster_eastus
    
  2. Liste os discos gerenciados usando o az disk list comando. Faça referência ao grupo de recursos retornado na etapa anterior.

    az disk list --resource-group MC_myResourceGroup_myAKSCluster_eastus
    

    Revise a lista e observe quais volumes de disco você planeja mover para o outro cluster. Valide também o estado do disco procurando a diskState propriedade. A saída do comando é um exemplo condensado.

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

    Observe o valor do campo resourceGroup de cada disco que pretendes mover da saída acima. Este grupo de recursos é o grupo de recursos do nó, não o grupo de recursos do cluster. Você precisará do nome desse grupo de recursos para mover os discos.

  3. Se diskState mostrar Attached, primeiro determine se alguma carga de trabalho ainda está acessando o volume e interrompa-as. Após um período de tempo, o estado do disco retorna o estado Unattached e pode ser movido.

Mover o volume persistente

Para mover o volume ou volumes persistentes para outro cluster AKS, siga as etapas descritas em Mover recursos do Azure para um novo grupo de recursos ou assinatura. Você pode usar o portal do Azure, o Azure PowerShell ou a CLI do Azure para executar a migração.

Durante esse processo, você faz referência:

  • O nome ou ID de recurso do grupo de recursos da origem que hospeda os discos geridos do Azure. Você pode encontrar o nome do grupo de recursos do nó navegando até o painel Discos no portal do Azure e anotando o grupo de recursos associado ao seu disco.
  • O nome ou ID do recurso do grupo de recursos de destino para o qual mover os discos gerenciados.
  • O nome ou ID do recurso dos discos geridos.

Nota

Devido às dependências entre provedores de recursos, essa operação pode levar até quatro horas para ser concluída.

Verifique se o volume do disco foi movido

Depois de mover o volume do disco para o grupo de recursos de cluster de destino, valide o recurso na lista de grupos de recursos usando o az disk list comando. Faça referência ao grupo de recursos de destino para onde os recursos foram movidos. Neste exemplo, os discos foram movidos para um grupo de recursos chamado MC_myResourceGroup_myAKSCluster_eastus.

  az disk list --resource-group MC_myResourceGroup_myAKSCluster_eastus

Monte o disco transferido num volume

Para montar o volume de disco movido, crie um volume persistente estático com o ID do recurso copiado nas etapas anteriores, a declaração de volume persistente e, neste exemplo, um pod simples.

  1. Crie um arquivo pv-azuredisk.yaml com um volume persistente. Atualize o campo volumeHandle com o ID do recurso de disco da etapa anterior.

    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. Crie um arquivo pvc-azuredisk.yaml com um PersistentVolumeClaim que usa o PersistentVolume.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-azuredisk
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi
      volumeName: pv-azuredisk
      storageClassName: managed-csi
    
  3. Crie o PersistentVolume e o PersistentVolumeClaim usando o comando kubectl apply e faça referência aos dois ficheiros YAML que criou.

    kubectl apply -f pv-azuredisk.yaml
    kubectl apply -f pvc-azuredisk.yaml
    
  4. Verifique se seu PersistentVolumeClaim foi criado e vinculado ao PersistentVolume usando o kubectl get comando.

    kubectl get pvc pvc-azuredisk
    

    A saída do comando é semelhante ao seguinte exemplo:

    NAME            STATUS   VOLUME         CAPACITY    ACCESS MODES   STORAGECLASS   AGE
    pvc-azuredisk   Bound    pv-azuredisk   20Gi        RWO                           5s
    
  5. Para fazer referência ao seu PersistentVolumeClaim, crie um ficheiro azure-disk-pod.yaml. No exemplo de manifest, o nome do 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. Aplique a configuração e monte o volume usando o comando kubectl apply .

    kubectl apply -f azure-disk-pod.yaml
    
  7. Verifique o status do pod e os dados migrados com o volume montado dentro do sistema de arquivos pod no /mnt/azure. Primeiro, obtenha o status do pod usando o kubectl get comando.

    kubectl get pods
    

    A saída do comando é semelhante ao seguinte exemplo:

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

    Verifique os dados dentro do volume /mnt/azure montado usando o kubectl exec comando.

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

    A saída do comando é semelhante ao seguinte exemplo:

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

Próximos passos