Passer au contenu

Comment migrer un volume EBS de gp2 vers gp3 dans Amazon EKS ?

Lecture de 6 minute(s)
0

Je souhaite migrer mon type de volume Amazon Elastic Block Store (Amazon EBS) d'un disque SSD à usage général (gp2) vers un disque SSD à usage général (gp3) dans Amazon Elastic Kubernetes Service (Amazon EKS).

Brève description

Vous pouvez utiliser le pilote Container Storage Interface (CSI) d’Amazon EBS pour modifier les volumes Amazon EBS avec des annotations dans PersistentVolumeClaims (PVC). Cette fonctionnalité est disponible dans la version aws-ebs-csi-driver v1.19.0-eksbuild.2 ou version ultérieure. Vous pouvez modifier les paramètres type, iops et débit dans PVC :

Pour migrer votre volume EBS de gp2 à gp3 dans votre cluster Amazon EKS, procédez comme suit :

  1. Installez le pilote CSI Amazon EBS dans votre cluster Amazon EKS.
  2. Activez la fonctionnalité de modification du volume dans le pilote Amazon CSI EBS.
  3. Modifiez le type de volume EBS.

Résolution

Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l'AWS CLI.

Installer la fonctionnalité de modification du volume dans le pilote CSI Amazon EBS

La fonctionnalité de modification du volume est disponible dans la version 1.19.0 du pilote CSI Amazon EBS. Elle est utilisée par le chart de Helm 2.19.0 ou par le module complémentaire géré par Amazon EKS v1.19.0-eksbuild.2. Cette fonctionnalité est implémentée sous la forme d'un sidecar supplémentaire appelé volumemodifier. Vous devez l'activer manuellement dans le pilote CSI Amazon EBS. Pour plus d'informations, consultez la page Modification du volume sur le site Web de GitHub.

Pour activer la fonctionnalité de modification du volume dans Amazon EKS, configurez l'une des méthodes suivantes :

  • Configuration de modules complémentaires autogérés avec Helm
  • Configuration de modules complémentaires gérés par Amazon EKS

Configuration de modules complémentaires autogérés avec Helm

  1. Installez le pilote Amazon EBS CSI autogéré via le chart de Helm, puis définissez controller.volumeModificationFeature.enabled sur vrai.
    Exemple de modèle YAML :

    cat values.yaml  
    controller:
      volumeModificationFeature:
        enabled: true
  2. Mettez à niveau la configuration. Exécutez la commande suivante :

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

Configuration de modules complémentaires gérés par Amazon EKS

  1. Créez un fichier de configuration. Exécutez la commande suivante :

    cat eks-addon-ebs-csi-driver-config.json
    {
      "controller": {
        "volumeModificationFeature": {
           "enabled": true
        }
      }
    }
  2. Mettez à jour le module complémentaire du pilote CSI Amazon EBS avec le fichier de configuration. Exécutez la commande suivante :

    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. Vérifiez que le sidecar volumemodifier supplémentaire est actif. Exécutez la commande suivante :

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

    Exemple de sortie :

    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. Vérifiez les noms des conteneurs. Exécutez la commande suivante :

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

    Exemple de sortie :

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

Modifier le type de volume EBS

  1. Examinez l'état actuel du PVC et de PersistentVolume (PV). Exécutez les commandes suivantes :

    kubectl get sc

    Exemple de sortie :

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

    Exemple de sortie :

    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                                                

    Exemple de sortie :

    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. Consultez les détails de PV. Exécutez la commande suivante :

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

    Exemple de sortie :

    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. Consultez les détails d’Amazon EBS. Exécutez la commande suivante :

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

    Exemple de sortie :

    {
        "Volumes": [
            {
                "AvailabilityZone": "us-east-1a",
                "Size": 4,
                "State": "in-use",
                "VolumeId": "vol-0296e8e6fa4b27670",
                "Iops": 100,
                "VolumeType": "gp2"
                ...
            }
        ]
    }
  4. Ajoutez l'annotation gp3-type. Exécutez la commande suivante :

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

    Exemple de sortie :

    persistentvolumeclaim/ebs-demo-claim annotated
  5. Vérifiez les annotations. Exécutez les commandes suivantes :

    kubectl get pvc ebs-demo-claim -o yaml                              

    Exemple de sortie :

    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
    

    Exemple de sortie :

    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. Surveillez la modification. Exécutez la commande suivante :

    kubectl describe pvc ebs-demo-claim   

    Exemple de sortie :

    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. Vérifiez que le type de volume est passé à gp3. Exécutez la commande suivante :

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

    Exemple de sortie :

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

Utiliser des instantanés de volume pour migrer des volumes

Le pilote CSI Amazon EBS fournit une fonctionnalité d’instantanés de volume CSI. Vous pouvez utiliser des instantanés pour migrer des volumes persistants de la classe de stockage gp2 « in-tree » vers la classe de stockage CSI gp3 Amazon EBS. Pour plus d'informations, consultez la page Instantanés de volume sur le site Web de GitHub.

Pour utiliser des instantanés de volume, procédez comme suit :

  1. Installez le pilote CSI Amazon EBS.
  2. Installez les objets VolumeSnapshotClass, VolumeSnapshotContent et VolumeSnapshot. Pour plus d'informations, consultez les pages snapshotclass.yaml, volume-snapshot-content.yaml et snapshot.yaml sur le site Web de GitHub.
  3. Utilisez les objets pour créer un nouveau volume persistant gp3-type à partir de l'instantané. Pour plus d'informations, consultez la section Migration de clusters Amazon EKS de volumes EBS gp2 vers gp3.

Informations connexes

Simplification de la migration et de la modification de volumes Amazon EBS sur Kubernetes à l'aide du pilote CSI EBS