Importer un volume EBS existant

Présentation

Si vous disposez déjà d'un volume AWS Elastic Block Store (EBS) à importer dans GKE sur AWS, vous pouvez créer un objet PersistentVolume (PV) et le réserver pour une ressource PersistentVolumeClaim (PVC) spécifique.

Cette page explique comment créer un PV à l'aide d'un volume EBS existant contenant des données et comment utiliser le PV dans un pod.

Avant de commencer

  • À partir de votre répertoire anthos-aws, utilisez anthos-gke pour basculer vers le contexte de votre cluster d'utilisateur.
    cd anthos-aws
    env HTTPS_PROXY=http://localhost:8118 \
      anthos-gke aws clusters get-credentials CLUSTER_NAME
    Remplacez CLUSTER_NAME par le nom de votre cluster d'utilisateur.

Créer un PersistentVolume pour un volume EBS existant

Vous pouvez importer un volume EBS existant en spécifiant un nouveau PV.

  1. Copiez le fichier YAML suivant dans un fichier nommé existing-volume.yaml, puis finalisez la configuration en remplaçant les valeurs suivantes :

    • volume-capacity : taille du volume. Par exemple, 30Gi. Pour en savoir plus sur la spécification de la capacité de volume dans Kubernetes, consultez la page Meaning of memory.
    • storage-class-name : nom de l'objet StorageClass qui provisionne le volume. Vous pouvez par exemple utiliser la valeur par défaut standard-rwo.

    • ebs-id : identifiant du volume EBS. Exemple :vol-05786ec9ec9526b67

    • fs-type : système de fichiers du volume. Exemple :ext4

    • zone : zone de disponibilité AWS qui héberge le volume EBS. Par exemple, us-east-1c.

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: volume-name
      annotations:
        pv.kubernetes.io/provisioned-by: ebs.csi.aws.com
    spec:
      capacity:
        storage: volume-capacity
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Retain
      storageClassName: storage-class-name
      claimRef:
        name: my-pvc
        namespace: default
      csi:
        driver: ebs.csi.aws.com
        volumeHandle: ebs-volume-id
        fsType: file-system-type
      nodeAffinity:
        required:
          nodeSelectorTerms:
          - matchExpressions:
            - key: topology.ebs.csi.aws.com/zone
              operator: In
              values:
              - zone
    
  2. Appliquez le code YAML à votre cluster :

    kubectl apply -f existing-volume.yaml
    
  3. Confirmez la création du PV :

    kubectl describe pv volume-name
    

    Le résultat de cette commande contient l'état du PV.

Utiliser le volume avec un PersistentVolumeClaim et un pod

Après avoir importé votre volume, vous pouvez créer un PVC et un pod auquel associer le PVC.

Le fichier YAML suivant crée un PVC et l'associe à un pod exécutant le serveur Web Nginx. Copiez-le dans un fichier nommé nginx.yaml et terminez la configuration en remplaçant les valeurs suivantes :

  • storage-class : nom de l'objet StorageClass du PersistentVolume que vous avez créé précédemment. Exemple : standard-rwo.
  • volume-name : nom du volume que vous avez créé précédemment.
  • volume-capacity : taille du volume. Par exemple, 30Gi.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  storageClassName: storage-class-name
  volumeName: volume-name
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: volume-capacity
---

apiVersion: v1
kind: Pod
metadata:
  name: web-server
spec:
  containers:
   - name: web-server
     image: nginx
     volumeMounts:
       - mountPath: /var/lib/www/html
         name: data
  volumes:
   - name: data
     persistentVolumeClaim:
       claimName: my-pvc
  1. Appliquez le code YAML à votre cluster :

    kubectl apply -f nginx.yaml
    
  2. Vérifiez l'état de votre instance Nginx avec kubectl describe. Dans le résultat, STATUS doit être à l'état Running.

    kubectl describe pod web-server
    

Utiliser des volumes EBS chiffrés

Si votre volume EBS est chiffré avec le service de gestion des clés AWS (KMS), vous devez accorder au rôle IAM AWS du plan de contrôle de GKE sur AWS l'accès à votre clé KMS.

Pour obtenir le nom du rôle IAM AWS, procédez comme suit :

  1. Accédez au répertoire contenant votre configuration GKE sur AWS. Vous avez créé ce répertoire lors de l'installation du service de gestion.

    cd anthos-aws

  2. Indiquez si vous avez créé votre environnement GKE sur AWS avec l'outil anthos-gke ou si vous avez créé vos profils IAM AWS manuellement.

    Outil anthos-gke

    Exécutez la commande terraform output et recherchez la valeur de iamInstanceProfile.

    terraform output | grep iamInstanceProfile
    

    Si vous avez créé votre environnement GKE sur AWS avec l'outil anthos- gke, le résultat se présente comme suit:

      iamInstanceProfile: gke-CLUSTER_ID-controlplane
      iamInstanceProfile: gke-CLUSTER_ID-nodepool
    

    CLUSTER_ID correspond à l'ID de votre cluster. Copiez la valeur de gke-CLUSTER_ID-controlplane pour l'étape suivante.

    Créé manuellement

    Examinez le résultat de terraform output à l'aide de la commande suivante :

    terraform output | less
    

    Faites défiler la page de résultats jusqu'à trouver le paramètre iamInstanceProfile après la définition AWSCluster.

    kind: AWSCluster
    metadata:
      name: cluster-0
    spec:
      ...
      controlPlane:
       ...
        iamInstanceProfile: INSTANCE_PROFILE_NAME
    

    Copiez la valeur de INSTANCE_PROFILE_NAME pour l'étape suivante.

  3. Pour permettre au plan de contrôle d'accéder à vos volumes EBS, ajoutez le profil IAM AWS gke-xxxxxx-controlplane en tant qu'utilisateur de clé à la clé KMS AWS utilisée pour chiffrer votre volume EBS.

Étapes suivantes