Ir para o conteúdo

Como faço para migrar um volume do EBS de gp2 para gp3 no Amazon EKS?

6 minuto de leitura
0

Quero migrar meu tipo de volume do Amazon Elastic Block Store (Amazon EBS) do SSD de uso geral (gp2) para o SSD de uso geral (gp3) no Amazon Elastic Kubernetes Service (Amazon EKS).

Breve descrição

É possível usar o driver da Interface de armazenamento de contêiner (Container Storage Interface, CSI) do Amazon EBS para modificar volumes do Amazon EBS com anotações em PersistentVolumeClaims (PVC). Esse atributo está disponível na versão aws-ebs-csi-driver v1.19.0-eksbuild.2 ou posterior. É possível modificar os parâmetros type, iops e throughput no PVC:

Para migrar seu volume do EBS de gp2 para gp3 em seu cluster do Amazon EKS, conclua as seguintes etapas:

  1. Instale o driver da CSI do Amazon EBS em seu cluster do Amazon EKS.
  2. Ative o atributo de modificação de volume no driver da CSI do Amazon EBS.
  3. Altere o tipo de volume do EBS.

Resolução

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

Instale o atributo de modificação de volume no driver da CSI do Amazon EBS

O atributo de modificação de volume está disponível na versão 1.19.0 do driver da CSI do Amazon EBS. Ele é usado pelo chart do Helm 2.19.0 ou pelo complemento gerenciado do Amazon EKS v1.19.0-eksbuild.2. Esse atributo é implementado como um sidecar extra chamado volumemodifier. Você deve ativá-lo manualmente no driver da CSI do Amazon EBS. Para obter mais informações, consulte Volume modification (Modificação de volume) no site do GitHub.

Para ativar o atributo de modificação de volume no Amazon EKS, configure um dos seguintes métodos:

  • Configuração de complemento autogerenciada com o Helm
  • Configuração de complemento gerenciado do Amazon EKS

Configuração de complemento autogerenciada com o Helm

  1. Instale o driver autogerenciado da CSI do Amazon EBS por meio do chart do Helm e defina controller.volumeModificationFeature.enabled como verdadeiro.
    Exemplo de YAML:

    cat values.yaml  
    controller:
      volumeModificationFeature:
        enabled: true
  2. Atualize a configuração. Execute o seguinte comando:

    helm upgrade aws-ebs-csi-driver --namespace kube-system \
        aws-ebs-csi-driver/aws-ebs-csi-driver -f values.yaml

Configuração de complemento gerenciado do Amazon EKS

  1. Crie um arquivo de configuração. Execute o seguinte comando:

    cat eks-addon-ebs-csi-driver-config.json
    {
      "controller": {
        "volumeModificationFeature": {
           "enabled": true
        }
      }
    }
  2. Atualize o complemento do driver da CSI do Amazon EBS com o arquivo de configuração. Execute o seguinte comando:

    aws eks update-addon --cluster-name eks-demo \
        --addon-name aws-ebs-csi-driver \
        --service-account-role-arn arn:aws:iam::{AWS_ACCOUNT_ID}:role/AmazonEKS-EBS-CSI-DriverRole \
        --configuration-values 'file://eks-addon-ebs-csi-driver-config.json'
    
    {
        "update": {
             ...
            "status": "InProgress",
            "type": "AddonUpdate",
            "params": [
                ...
                {
                    "type": "ConfigurationValues",
                    "value": "{\n  \"controller\": {\n    \"volumeModificationFeature\": {\n       \"enabled\": true\n    }\n  }\n}"
                }
            ],
            ...
        }
    }
  3. Verifique se o sidecar extra volumemodifier está ativo. Execute o seguinte comando:

    kubectl get pod -n kube-system -l=app=ebs-csi-controller

    Exemplo de saída:

    NAME                                  READY   STATUS    RESTARTS   AGE
    ebs-csi-controller-5f985b94f4-lk7lv   7/7     Running   0          2m29s
    ebs-csi-controller-5f985b94f4-m5nn8   7/7     Running   0          2m29s
  4. Verifique os nomes dos contêineres. Execute o seguinte comando:

    kubectl get pod -n kube-system ebs-csi-controller-5f985b94f4-lk7lv -o jsonpath='{.spec.containers[*].name}{"\n"}'

    Exemplo de saída:

    ebs-plugin csi-provisioner csi-attacher csi-snapshotter volumemodifier csi-resizer liveness-probe

Altere o tipo de volume do EBS

  1. Analise o status atual do PVC e do PersistentVolume (PV). Execute os seguintes comandos:

    kubectl get sc

    Exemplo de saída:

    NAME   PROVISIONER             RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
    gp2    kubernetes.io/aws-ebs   Delete          WaitForFirstConsumer   false                  6h23m
    
    kubectl get pvc ebs-demo-claim        

    Exemplo de saída:

    NAME             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
    ebs-demo-claim   Bound    pvc-10d1d621-22f4-4fb6-a64a-51cdf03a9e30   4Gi        RWO            gp2            <unset>                 18s
    kubectl get pv pvc-10d1d621-22f4-4fb6-a64a-51cdf03a9e30                                                

    Exemplo de saída:

    NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                    STORAGECLASS   VOLUMEATTRIBUTESCLASS   REASON   AGE
    pvc-10d1d621-22f4-4fb6-a64a-51cdf03a9e30   4Gi        RWO            Delete           Bound    default/ebs-demo-claim   gp2            <unset>                          36s
  2. Veja os detalhes do PV. Execute o seguinte comando:

    kubectl get pv pvc-10d1d621-22f4-4fb6-a64a-51cdf03a9e30 -o yaml

    Exemplo de saída:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      annotations:
        pv.kubernetes.io/migrated-to: ebs.csi.aws.com
        pv.kubernetes.io/provisioned-by: kubernetes.io/aws-ebs
        ...
      ...
    spec:
      awsElasticBlockStore:
        fsType: ext4
        volumeID: vol-0296e8e6fa4b27670
      claimRef:
        apiVersion: v1
        kind: PersistentVolumeClaim
        name: ebs-demo-claim
        namespace: default
        ...
      persistentVolumeReclaimPolicy: Delete
      storageClassName: gp2
      volumeMode: Filesystem
    status:
      phase: Bound
      ...
  3. Confira os detalhes do Amazon EBS. Execute o seguinte comando:

    aws ec2 describe-volumes --volume-ids vol-0296e8e6fa4b27670

    Exemplo de saída:

    {
        "Volumes": [
            {
                "AvailabilityZone": "us-east-1a",
                "Size": 4,
                "State": "in-use",
                "VolumeId": "vol-0296e8e6fa4b27670",
                "Iops": 100,
                "VolumeType": "gp2"
                ...
            }
        ]
    }
  4. Adicione a anotação do tipo gp3. Execute o seguinte comando:

    kubectl annotate pvc ebs-demo-claim ebs.csi.aws.com/volumeType="gp3"

    Exemplo de saída:

    persistentvolumeclaim/ebs-demo-claim annotated
  5. Verifique as anotações. Execute os seguintes comandos:

    kubectl get pvc ebs-demo-claim -o yaml                              

    Exemplo de saída:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      annotations:
        ebs.csi.aws.com/volumeType: gp3
        ...
      ...
      name: ebs-demo-claim
      namespace: default
    kubectl get pv pvc-10d1d621-22f4-4fb6-a64a-51cdf03a9e30 -o yaml
    

    Exemplo de saída:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      annotations:
        ebs.csi.aws.com/volumeType: gp3
        ...
    spec:
      awsElasticBlockStore:
        fsType: ext4
        volumeID: vol-0296e8e6fa4b27670
      claimRef:
        apiVersion: v1
        kind: PersistentVolumeClaim
        name: ebs-demo-claim
        namespace: default
      ...
  6. Monitore a modificação. Execute o seguinte comando:

    kubectl describe pvc ebs-demo-claim   

    Exemplo de saída:

    Name:          ebs-demo-claim
    ...
    Events:
      Type    Reason                        Age    From                                                                                      Message
      ----    ------                        ----   ----                                                                                      -------
      ...
      Normal  ProvisioningSucceeded         5m20s  ebs.csi.aws.com_ebs-csi-controller-676f998966-bh79n_ec5572b3-c1ec-4b3a-838a-d4b21b8c668f  Successfully provisioned volume pvc-10d1d621-22f4-4fb6-a64a-51cdf03a9e30
      Normal  VolumeModificationStarted     64s    volume-modifier-for-k8s-ebs.csi.aws.com                                                   External modifier is modifying volume pvc-10d1d621-22f4-4fb6-a64a-51cdf03a9e30
      Normal  VolumeModificationSuccessful  57s    volume-modifier-for-k8s-ebs.csi.aws.com  
  7. Confirme se o tipo de volume mudou para gp3. Execute o seguinte comando:

    aws ec2 describe-volumes --volume-ids vol-0296e8e6fa4b27670

    Exemplo de saída:

    {
        "Volumes": [
            {
                "AvailabilityZone": "us-east-1a",
                "Size": 4,
                "State": "in-use",
                "VolumeId": "vol-0296e8e6fa4b27670",
                "Iops": 3000,
                "VolumeType": "gp3",
                "Throughput": 125
                ...
            }
        ]
    }

Use snapshots de volume para migrar volumes

O driver da CSI do Amazon EBS fornece um atributo de snapshots de volume da CSI. É possível usar snapshots para migrar volumes persistentes da StorageClass gp2 incorporada para a StorageClass gp3 da CSI do Amazon EBS. Para obter mais informações, consulte Volume snapshots (Snapshots de volume) no site do GitHub.

Para usar snapshots de volume, conclua as seguintes etapas:

  1. Instale o driver da CSI do Amazon EBS.
  2. Instale os objetos VolumeSnapshotClass, VolumeSnapshotContent e VolumeSnapshot. Para obter mais informações, consulte snapshotclass.yaml, volume-snapshot-content.yaml e snapshot.yaml no site do GitHub.
  3. Use os objetos para criar um novo volume persistente do tipo gp3 a partir do snapshot. Para obter mais informações, consulte Migrating Amazon EKS clusters from gp2 to gp3 EBS volumes (Migrando clusters do Amazon EKS de volumes EBS gp2 para gp3).

Informações relacionadas

Simplifying Amazon EBS volume migration and modification on Kubernetes using the EBS CSI Driver (Simplificando a migração e modificação de volumes do Amazon EBS no Kubernetes usando o driver da CSI do EBS)