Mover volumes persistentes do Disco do Azure para outro cluster do AKS na mesma assinatura ou em uma assinatura diferente

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

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

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

Antes de começar

Validar o estado do volume de disco

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

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

    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 comando az disk list. Faça referência ao grupo de recursos retornado na etapa anterior.

    az disk list --resource-group MC_myResourceGroup_myAKSCluster_eastus
    

    Examine a lista e observe quais volumes de disco você planeja mover para o outro cluster. Valide também o estado do disco procurando a propriedade diskState. 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",
    

    Observação

    Observe o valor do campo resourceGroup para cada disco que você deseja mover da saída acima. Esse 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-a. 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 do 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 realizar a migração.

Durante esse processo, você faz referência a:

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

Observação

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

Verifique se o volume de disco foi movido

Depois de mover o volume de disco para o grupo de recursos do cluster de destino, valide o recurso na lista de grupos de recursos usando o comando az disk list. 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

Montar o disco movido como um volume

Para montar o volume de disco movido, crie um volume persistente estático com a ID do recurso copiada 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 a 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 uma 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 PersistentVolume e PersistentVolumeClaim pode meio do comando kubectl apply e faça referência aos dois arquivos YAML que você criou.

    kubectl apply -f pv-azuredisk.yaml
    kubectl apply -f pvc-azuredisk.yaml
    
  4. Verifique se o PersistentVolumeClaim foi criado e associado ao PersistentVolume por meio do comando kubectl get.

    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 referenciar o PersistentVolumeClaim, crie um arquivo azure-disk-pod.yaml. No manifesto de exemplo, 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 de pod em /mnt/azure. Primeiro, obtenha o status do pod usando o comando kubectl get.

    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 comando kubectl exec.

    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óximas etapas