Importa un volumen de EBS preexistente

Descripción general

Si ya tienes un volumen de AWS Elastic Block Store (EBS)

para importar a clústeres de GKE en AWS, puedes crear un objeto PersistentVolume (PV) y reservarlo para un PersistentVolumeClaim (PVC) específico.

En esta página, se explica cómo crear un PV mediante un volumen de EBS existente propagado con datos y cómo usarlo en un Pod.

Antes de comenzar

Antes de completar estos pasos, debes hacer lo siguiente:

Usa volúmenes de EBS encriptados

Si tu volumen de EBS está encriptado con el servicio de administración de claves (KMS) de AWS, debes otorgar acceso a tu clave de KMS al rol de IAM de AWS del plano de control de AWS de GKE en AWS.

Para otorgar al rol del plano de control acceso a tu clave, sigue estos pasos:

  1. Busca el nombre del rol del plano de control de tu clúster.

  2. Elige la clave de KMS de AWS que se usa para encriptar el volumen de EBS y agrega el rol del plano de control como un usuario de clave. Para ello, sigue las instrucciones en Permite que los usuarios de clave usen la clave de KMS.

Crea un PersistentVolume para un volumen de EBS preexistente

Puedes importar un volumen de EBS existente si especificas un nuevo PV y lo agregas a tu clúster.

  1. Copia el siguiente YAML en un archivo llamado existing-volume.yaml:

    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
    
    Replace the following:
    
    • VOLUME_NAME: El nombre del volumen
    • VOLUME_CAPACITY: El tamaño del volumen, por ejemplo, 30G Para obtener más información sobre cómo especificar la capacidad de volumen en Kubernetes, consulta el Significado de memoria.
    • STORAGE_CLASS_NAME: El nombre de la StorageClass que aprovisiona el volumen, por ejemplo, standard-rwo

    • EBS_VOLUME_ID: El ID de volumen de EBS Por ejemplo, vol-05786ec9ec9526b67.

    • FS_TYPE: El sistema de archivos del volumen, por ejemplo, ext4

    • ZONE: La zona de disponibilidad de AWS que aloja el volumen de EBS, por ejemplo, us-east-1c

  2. Aplica el YAML al clúster.

    kubectl apply -f existing-volume.yaml
    
  3. Confirma la creación del PV.

    kubectl describe pv volume-name
    

    El resultado de este comando contiene el estado del PV.

Usa el volumen con un PersistentVolumeClaim y un Pod

Después de importar el volumen, puedes crear un PVC y un Pod que conecte el PVC.

  1. Mediante el YAML a continuación, se crea un PVC y se lo conecta a un Pod que ejecuta el servidor web Nginx. Cópialo en un archivo llamado nginx.yaml:

    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: PVC_NAME
    

    Reemplaza lo siguiente:

    • STORAGE_CLASS: El nombre de la StorageClass del PersistentVolume que creaste antes, por ejemplo, standard-rwo
    • VOLUME_NAME
    • VOLUME_CAPACITY
    • PVC_NAME: Nombre del PVC, por ejemplo, my-pvc
  2. Aplica el YAML al clúster.

    kubectl apply -f nginx.yaml
    
  3. Verifica el estado de la instancia Nginx con kubectl describe. El resultado debería tener un STATUS de Running.

    kubectl describe pod web-server
    

¿Qué sigue?