Saltar al contenido

¿Cómo puedo migrar un volumen de EBS de gp2 a gp3 en Amazon EKS?

6 minutos de lectura
0

Quiero migrar el tipo de volumen de Amazon Elastic Block Store (Amazon EBS) de un SSD de uso general (gp2) a un SSD de uso general (gp3) en Amazon Elastic Kubernetes Service (Amazon EKS).

Descripción corta

Puedes usar el controlador de la interfaz de almacenamiento de contenedores (CSI) de Amazon EBS para modificar los volúmenes de Amazon EBS con anotaciones en PersistentVolumeClaims (PVC). Esta característica está disponible en la versión aws-ebs-csi-driver v1.19.0-eksbuild.2 o posterior. Puedes modificar los parámetros de tipo, iops y ** rendimiento** en PVC:

Para migrar el volumen de EBS de gp2 a gp3 en tu clúster de Amazon EKS, sigue estos pasos:

  1. Instala el controlador de CSI de Amazon EBS en tu clúster de Amazon EKS.
  2. Activa la característica de modificación del volumen en el controlador de CSI de Amazon EBS.
  3. Cambia el tipo de volumen de EBS.

Resolución

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulte Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.

Instala la característica de modificación de volumen en el controlador de CSI de Amazon EBS

La característica de modificación del volumen está disponible en la versión 1.19.0 del controlador de CSI de Amazon EBS. Lo utilizan el gráfico de Helm 2.19.0 o el complemento administrado de Amazon EKS v1.19.0-eksbuild.2. Esta característica se implementa como un sidecar adicional llamado volumemodifier. Debes activarlo manualmente en el controlador de CSI de Amazon EBS. Para obtener más información, consulta Volume modification (Modificación del volumen) en el sitio web de GitHub.

Para activar la característica de modificación de volumen en Amazon EKS, configura uno de los métodos siguientes:

  • Configuración de complementos autoadministrados con Helm
  • Configuración de complementos administrados de Amazon EKS

Configuración de complementos autoadministrados con Helm

  1. Instala el controlador de CSI autoadministrado de Amazon EBS a través del gráfico de Helm y, a continuación, establece controller.volumeModificationFeature.enabled en true.
    Ejemplo de YAML:

    cat values.yaml  
    controller:
      volumeModificationFeature:
        enabled: true
  2. Actualiza la configuración. Ejecuta el siguiente comando:

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

Configuración de complementos administrados de Amazon EKS

  1. Crea un archivo de configuración. Ejecuta el siguiente comando:

    cat eks-addon-ebs-csi-driver-config.json
    {
      "controller": {
        "volumeModificationFeature": {
           "enabled": true
        }
      }
    }
  2. Actualiza el complemento del controlador de CSI de Amazon EBS con el archivo de configuración. Ejecuta el siguiente 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. Comprueba que el volumemodifier del sidecar adicional esté activo. Ejecuta el siguiente comando:

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

    Resultado de ejemplo:

    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. Comprueba los nombres de los contenedores. Ejecuta el siguiente comando:

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

    Resultado de ejemplo:

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

Cambio de tipo de volumen de EBS

  1. Revisa el estado actual de PVC y PersistentVolume (PV). Ejecuta los siguientes comandos:

    kubectl get sc

    Resultado de ejemplo:

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

    Resultado de ejemplo:

    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                                                

    Resultado de ejemplo:

    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. Consulta los detalles de PV. Ejecuta el siguiente comando:

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

    Resultado de ejemplo:

    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. Consulta los detalles de Amazon EBS. Ejecuta el siguiente comando:

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

    Resultado de ejemplo:

    {
        "Volumes": [
            {
                "AvailabilityZone": "us-east-1a",
                "Size": 4,
                "State": "in-use",
                "VolumeId": "vol-0296e8e6fa4b27670",
                "Iops": 100,
                "VolumeType": "gp2"
                ...
            }
        ]
    }
  4. Agrega la anotación de tipo gp3. Ejecuta el siguiente comando:

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

    Resultado de ejemplo:

    persistentvolumeclaim/ebs-demo-claim annotated
  5. Verifica las anotaciones. Ejecuta los siguientes comandos:

    kubectl get pvc ebs-demo-claim -o yaml                              

    Resultado de ejemplo:

    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
    

    Resultado de ejemplo:

    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. Supervisa la modificación. Ejecuta el siguiente comando:

    kubectl describe pvc ebs-demo-claim   

    Resultado de ejemplo:

    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. Confirma que el tipo de volumen ha cambiado a gp3. Ejecuta el siguiente comando:

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

    Resultado de ejemplo:

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

Uso de instantáneas de volúmenes para migrar volúmenes

El controlador de CSI de Amazon EBS ofrece una característica de instantáneas de volumen de CSI. Puedes usar instantáneas para migrar volúmenes persistentes de la clase de almacenamiento gp2 en árbol a la clase de almacenamiento gp3 de CSI de Amazon EBS. Para obtener más información, consulta Volume snapshots (Instantáneas de volumen) en el sitio web de GitHub.

Para usar instantáneas de volumen, sigue estos pasos:

  1. Instala el controlador de CSI de Amazon EBS.
  2. Instala los objetos VolumeSnapshotClass, VolumeSnapshotContent y VolumeSnapshot. Para obtener más información, consulta snapshotclass.yaml, volume-snapshot-content.yaml y snapshot.yaml en el sitio web de GitHub.
  3. Usa los objetos para crear un nuevo volumen persistente de tipo gp3 a partir de la instantánea. Para obtener más información, consulta Migrating Amazon EKS clusters from gp2 to gp3 EBS volumes (Migración de clústeres de Amazon EKS de volúmenes de EBS gp2 a gp3).

Información relacionada

Simplifying Amazon EBS volume migration and modification on Kubernetes using the EBS CSI Driver (Simplificación de la modificación y migración de volúmenes de Amazon EBS en Kubernetes mediante el controlador de CSI de EBS)