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 on AWS, puedes crear un objeto PersistentVolume (PV) y reservarlo para una PersistentVolumeClaim (PVC) específica.

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

Antes de comenzar

  • Desde tu directorio de anthos-aws, usa anthos-gke para cambiar el contexto a tu clúster de usuario.
    cd anthos-aws
    env HTTPS_PROXY=http://localhost:8118 \
      anthos-gke aws clusters get-credentials CLUSTER_NAME
    Reemplaza CLUSTER_NAME por el nombre de tu clúster de usuario.

Crea un PersistentVolume para un volumen de EBS preexistente

Puedes importar un volumen de EBS existente especificando un nuevo PV.

  1. Copia el siguiente YAML a un archivo llamado existing-volume.yaml y completa la configuración con el reemplazo de los siguientes valores:

    • volume-capacity: El tamaño del volumen. Por ejemplo, 30Gi. 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, puedes usar el standard-rwo predeterminado.

    • ebs-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.

    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. 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.

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 y reemplaza los siguientes valores para completar la configuración:

  • storage-class: El nombre de la StorageClass del PersistentVolume que creaste antes. Por ejemplo, standard-rwo.
  • volume-name: El nombre del volumen que creaste antes.
  • volume-capacity: El tamaño del volumen. Por ejemplo, 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. Aplica el YAML al clúster.

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

    kubectl describe pod web-server
    

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 obtener el nombre del rol de IAM de AWS, realiza los pasos que se indican a continuación:

  1. Cambia al directorio con la configuración de GKE en AWS. Creaste este directorio cuando instalaste el servicio de administración.

    cd anthos-aws

  2. Elige si creaste tus entorno de GKE en AWS con la herramienta de anthos-gke o si creaste tus perfiles de IAM de AWS de forma manual.

    Herramienta anthos-gke

    Usa el comando terraform output y busca el valor de iamInstanceProfile.

    terraform output | grep iamInstanceProfile
    

    Si creaste tu entorno de GKE en AWS con la herramienta de anthos- gke, el resultado será como el siguiente:

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

    Donde CLUSTER_ID es el ID de tu clúster. Copia el valor de gke-CLUSTER_ID-controlplane para el siguiente paso.

    Creación manual

    Examina el resultado de terraform output con el siguiente comando:

    terraform output | less
    

    Desplázate por el resultado y busca el iamInstanceProfile después de la definición de AWSCluster.

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

    Copia el valor de INSTANCE_PROFILE_NAME para el siguiente paso.

  3. Para otorgar acceso al plano de control a tus volúmenes de EBS, agrega el perfil de IAM de AWS gke-xxxxxx-controlplane como un usuario de claves a la clave de KMS de AWS que se usa para encriptar tu volumen de EBS.

¿Qué sigue?