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 Anthos en 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 mediante un volumen de EBS existente propagado con datos y cómo usarlo en un Pod.

Antes de comenzar

  • Desde el directorio anthos-aws, usa anthos-gke para cambiar el contexto al 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 si especificas un nuevo PV.

  1. Copia el siguiente YAML a un archivo llamado existing-volume.yaml y completa la configuración mediante 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 a la función de IAM de AWS del plano de control de AWS de los clústeres de Anthos.

Para obtener el nombre de la función IAM de AWS, realiza los pasos que se indican a continuación:

  1. Cambia al directorio con tus clústeres de Anthos en la configuración de AWS. Creaste este directorio cuando instalaste el servicio de administración.

    cd anthos-aws

  2. Elige si creaste tus clústeres de Anthos en el entorno de 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 tus clústeres de Anthos en el entorno de AWS con la herramienta de anthos- gke, el resultado será 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. A fin de 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?