Controlador CSI de Amazon FSx para Lustre - Amazon EKS

Ayude a mejorar esta página

¿Quiere contribuir a esta guía del usuario? Desplácese hasta el final de esta página y seleccione Editar esta página en GitHub. Sus contribuciones ayudarán a que nuestra guía del usuario sea mejor para todos.

Controlador CSI de Amazon FSx para Lustre

El controlador de la interfaz de almacenamiento de contenedores (CSI) de FSx para Lustre proporciona una interfaz CSI que permite a los clústeres de Amazon EKS administrar el ciclo de vida de los sistemas de archivos de FSx para Lustre. Para obtener más información, consulte la Guía del usuario de FSx para Lustre.

En este tema se muestra cómo implementar el controlador de CSI de FSx for Lustre en el clúster de Amazon EKS y verificar que funcione. Siempre recomendamos usar la versión más reciente del controlador. Para ver las versiones disponibles, consulte CSI Specification Compatibility Matrix (Matriz de compatibilidad de especificaciones de CSI) en GitHub.

nota

El controlador no es compatible con Fargate.

Para obtener descripciones detalladas de los parámetros disponibles y ejemplos completos que demuestran las características del controlador, consulte el proyecto Controlador de la interfaz de almacenamiento de contenedores (CSI) de FSx para Lustre en GitHub.

Requisitos previos

Debe tener:

  • La versión 2.12.3 o posterior, o bien, la versión 1.27.160 o posterior de la AWS Command Line Interface (AWS CLI) instalada y configurada en su dispositivo o AWS CloudShell. Para comprobar su versión actual, utilice aws --version | cut -d / -f2 | cut -d ' ' -f1. Los administradores de paquetes tales como yum, apt-get o Homebrew para macOS suelen estar atrasados varias versiones respecto de la versión de la AWS CLI más reciente. Para instalar la versión más reciente, consulte Instalar, actualizar y desinstalar la AWS CLI y Configuración rápida con aws configure en la Guía del usuario de AWS Command Line Interface. La versión de AWS CLI instalada en AWS CloudShell también puede estar atrasada varias versiones respecto de la versión más reciente. Para actualizarla, consulte Instalación de la AWS CLI en el directorio de inicio en la Guía del usuario de AWS CloudShell.

  • La versión 0.183.0 o posterior de la herramienta de línea de comandos eksctl instalada en su dispositivo o AWS CloudShell. Para Instalar o actualizar eksctl, consulte la sección de Instalación en la documentación de eksctl.

  • La herramienta de línea de comandos de kubectl está instalada en su dispositivo o AWS CloudShell. La versión puede ser la misma o hasta una versión secundaria anterior o posterior a la versión de Kubernetes de su clúster. Por ejemplo, si la versión del clúster es 1.29, puede usar la versión 1.28, 1.29 o 1.30 de kubectl con él. Para instalar o actualizar kubectl, consulte Instalación o actualización del kubectl.

Los siguientes procedimientos ayudan a crear un clúster de prueba sencillo con el controlador de CSI de FSx para Lustre para que pueda ver cómo funciona. No recomendamos utilizar el clúster de pruebas para cargas de trabajo de producción. Para este tutorial, le recomendamos utilizar el example values, excepto en los casos en que se indique que los reemplace. Puede reemplazar cualquier example value al completar los pasos del clúster de producción. Recomendamos completar todos los pasos del mismo terminal, ya que las variables se establecen y utilizan en todos los pasos y no existirán en terminales diferentes.

Para implementar el controlador de CSI de FSx para Lustre en un clúster de Amazon EKS
  1. Establezca algunas variables para utilizarlas en los pasos restantes. Reemplace my-csi-fsx-cluster con el nombre del clúster de pruebas que desea crear y region-code con la Región de AWS en el que desea crear su clúster de pruebas.

    export cluster_name=my-csi-fsx-cluster export region_code=region-code
  2. Cree un clúster de pruebas.

    eksctl create cluster \ --name $cluster_name \ --region $region_code \ --with-oidc \ --ssh-access \ --ssh-public-key my-key

    El aprovisionamiento de clústeres tarda varios minutos. Durante la creación del clúster, verá varias líneas de salida. La última línea de salida es similar a la siguiente línea de ejemplo.

    [✓]  EKS cluster "my-csi-fsx-cluster" in "region-code" region is ready
  3. Cree una cuenta de servicio de Kubernetes para el controlador y asigne la política administrada de AWS AmazonFSxFullAccess a la cuenta de servicio con el siguiente comando. Si su clúster está en las Regiones de AWS AWS GovCloud (Este de EE. UU.) o AWS GovCloud (Oeste de EE. UU.), reemplace arn:aws: con arn:aws-us-gov:.

    eksctl create iamserviceaccount \ --name fsx-csi-controller-sa \ --namespace kube-system \ --cluster $cluster_name \ --attach-policy-arn arn:aws:iam::aws:policy/AmazonFSxFullAccess \ --approve \ --role-name AmazonEKSFSxLustreCSIDriverFullAccess \ --region $region_code

    Verá varias líneas de salida a medida que se crea la cuenta de servicio. Las últimas líneas de salida es similar a la siguiente línea de ejemplo.

    [ℹ]  1 task: { 
        2 sequential sub-tasks: { 
            create IAM role for serviceaccount "kube-system/fsx-csi-controller-sa",
            create serviceaccount "kube-system/fsx-csi-controller-sa",
        } }
    [ℹ]  building iamserviceaccount stack "eksctl-my-csi-fsx-cluster-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa"
    [ℹ]  deploying stack "eksctl-my-csi-fsx-cluster-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa"
    [ℹ]  waiting for CloudFormation stack "eksctl-my-csi-fsx-cluster-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa"
    [ℹ]  created serviceaccount "kube-system/fsx-csi-controller-sa"

    Apunte el nombre de la pila de AWS CloudFormation que se implementó. En la salida de ejemplo anterior, la pila se denomina eksctl-my-csi-fsx-cluster-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa.

  4. Implemente el controlador con el siguiente comando. Sustituya release-X.XX por la rama que desee. La rama maestra no es compatible porque puede contener características futuras que no sean compatibles con la versión estable del controlador publicada actualmente. Le recomendamos que utilice la versión lanzada más reciente. Para obtener una lista de las ramas activas, consulte aws-fsx-csi-driver en GitHub.

    nota

    Puede ver el contenido que se está aplicando en aws-fsx-csi-driver en GitHub.

    kubectl apply -k "github.com/kubernetes-sigs/aws-fsx-csi-driver/deploy/kubernetes/overlays/stable/?ref=release-X.XX"

    Un ejemplo de salida sería el siguiente.

    serviceaccount/fsx-csi-controller-sa created
    serviceaccount/fsx-csi-node-sa created
    clusterrole.rbac.authorization.k8s.io/fsx-csi-external-provisioner-role created
    clusterrole.rbac.authorization.k8s.io/fsx-external-resizer-role created
    clusterrolebinding.rbac.authorization.k8s.io/fsx-csi-external-provisioner-binding created
    clusterrolebinding.rbac.authorization.k8s.io/fsx-csi-resizer-binding created
    deployment.apps/fsx-csi-controller created
    daemonset.apps/fsx-csi-node created
    csidriver.storage.k8s.io/fsx.csi.aws.com created
  5. Apunte el ARN para el rol que se creó. Si no lo anotó antes y ya no lo tiene disponible en la salida AWS CLI, puede realizar lo siguiente para verlo en la AWS Management Console.

    1. Abra la consola de AWS CloudFormation en https://console.aws.amazon.com/cloudformation.

    2. Asegúrese de que la consola esté configurada en la Región de AWS en la que creó el rol de IAM y, a continuación, seleccione Stacks (Pilas).

    3. Seleccione la pila denominada eksctl-my-csi-fsx-cluster-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa.

    4. Seleccione la pestaña Salidas. El ARN de Role1 aparece en la página Outputs (1) (Salida)(1).

  6. Revise la implementación del controlador a fin de agregar la cuenta de servicio que creó anteriormente con el siguiente comando. Reemplace el ARN por el ARN que anotó. Reemplace 111122223333 por su ID de cuenta. Si su clúster está en las Regiones de AWS AWS GovCloud (Este de EE. UU.) o AWS GovCloud (Oeste de EE. UU.), reemplace arn:aws: con arn:aws-us-gov:.

    kubectl annotate serviceaccount -n kube-system fsx-csi-controller-sa \ eks.amazonaws.com/role-arn=arn:aws:iam::111122223333:role/AmazonEKSFSxLustreCSIDriverFullAccess --overwrite=true

    Un ejemplo de salida sería el siguiente.

    serviceaccount/fsx-csi-controller-sa annotated
Para implementar un tipo de almacenamiento de Kubernetes, una notificación de volumen persistente y una aplicación de muestra para verificar que el controlador CSI está funcionando

Este procedimiento utiliza el repositorio GitHub del controlador de la interfaz de almacenamiento de contenedores (CSI) de FSx para Lustre para utilizar un volumen de FSx para Lustre aprovisionado dinámicamente.

  1. Anote el grupo de seguridad del clúster. Puede verlo en la AWS Management Console en la sección Redes o utilizando el siguiente comando AWS CLI.

    aws eks describe-cluster --name $cluster_name --query cluster.resourcesVpcConfig.clusterSecurityGroupId
  2. Cree un grupo de seguridad para su sistema de archivos Amazon FSx de acuerdo con los criterios que se muestran en Grupos de seguridad de Amazon VPC en la Guía del usuario de Amazon FSx para Lustre. Para la VPC, seleccione la VPC de su clúster tal como se muestra en la sección Networking (Redes). Para “los grupos de seguridad asociados a los clientes de Lustre”, utilice el grupo de seguridad de clúster. Puede dejar solo las reglas de salida para permitir All traffic (Todo el tráfico).

  3. Descargue el manifiesto de con el siguiente comando.

    curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-fsx-csi-driver/master/examples/kubernetes/dynamic_provisioning/specs/storageclass.yaml
  4. Edite la sección de parámetros del archivo storageclass.yaml. Reemplace cada example value con valores propios.

    parameters: subnetId: subnet-0eabfaa81fb22bcaf securityGroupIds: sg-068000ccf82dfba88 deploymentType: PERSISTENT_1 automaticBackupRetentionDays: "1" dailyAutomaticBackupStartTime: "00:00" copyTagsToBackups: "true" perUnitStorageThroughput: "200" dataCompressionType: "NONE" weeklyMaintenanceStartTime: "7:09:00" fileSystemTypeVersion: "2.12"
    • subnetId: el ID de subred en el que se debe crear el sistema de archivos de Amazon FSx para Lustre. Amazon FSx para Lustre no se admite en todas las zonas de disponibilidad. Abra la consola de Amazon FSx para Lustre en https://console.aws.amazon.com/fsx/ para confirmar que la subred que desea utilizar se encuentra en una zona de disponibilidad compatible. La subred puede incluir sus nodos o puede ser una subred o VPC diferente:

      • Puede comprobar si hay subredes de nodos en la AWS Management Console seleccionando el grupo de nodos en la sección Compute (Informática).

      • Si la subred que especifica no es la misma en la que tiene los nodos, las VPC deben estar conectadas y debe asegurarse de que tiene abiertos los puertos necesarios en los grupos de seguridad.

    • securityGroupIds: el ID del grupo de seguridad que ha creado para el sistema de archivos.

    • deploymentType (opcional): el tipo de implementación del sistema de archivos. Los valores válidos son SCRATCH_1, SCRATCH_2, PERSISTENT_1 y PERSISTENT_2. Para obtener más información sobre los tipos de implementación, consulte cómo crear su sistema de archivos de Amazon FSx para Lustre.

    • Otros parámetros (opcionales): para obtener información acerca del resto de parámetros, consulte Edit StorageClass (Editar StorageClass) en GitHub.

  5. Cree el manifiesto de clase de almacenamiento.

    kubectl apply -f storageclass.yaml

    Un ejemplo de salida sería el siguiente.

    storageclass.storage.k8s.io/fsx-sc created
  6. Descargue el manifiesto de notificación de volumen persistente.

    curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-fsx-csi-driver/master/examples/kubernetes/dynamic_provisioning/specs/claim.yaml
  7. (Opcional) Edite el archivo claim.yaml. Cambie 1200Gi por uno de los valores de incremento que se indican a continuación, en función de los requisitos de almacenamiento y del deploymentType que seleccionó en los pasos anteriores.

    storage: 1200Gi
    • SCRATCH_2 y PERSISTENT: 1.2 TiB, 2.4 TiB o incrementos de 2.4 TiB sobre 2.4 TiB.

    • SCRATCH_1: 1.2 TiB, 2.4 TiB, 3.6 TiB o incrementos de 3.6 TiB sobre 3.6 TiB.

  8. Cree la notificación de volumen persistente.

    kubectl apply -f claim.yaml

    Un ejemplo de salida sería el siguiente.

    persistentvolumeclaim/fsx-claim created
  9. Confirme que el sistema de archivos está aprovisionado.

    kubectl describe pvc

    Un ejemplo de salida sería el siguiente.

    Name:          fsx-claim
    Namespace:     default
    StorageClass:  fsx-sc
    Status:        Bound
    [...]
    nota

    El Status puede aparecer como Pending durante 5-10 minutos, antes de cambiar a Bound. No continúe con el siguiente paso hasta que el Status sea Bound. Si el Status muestra Pending durante más de 10 minutos, utilice los mensajes de advertencia en los Events como referencia para abordar cualquier problema.

  10. Implemente la aplicación de muestra.

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-fsx-csi-driver/master/examples/kubernetes/dynamic_provisioning/specs/pod.yaml
  11. Verifique que la aplicación de muestra se está ejecutando.

    kubectl get pods

    Un ejemplo de salida sería el siguiente.

    NAME READY STATUS RESTARTS AGE fsx-app 1/1 Running 0 8s
  12. Verifique que la aplicación haya montado correctamente el sistema de archivos.

    kubectl exec -ti fsx-app -- df -h

    Un ejemplo de salida sería el siguiente.

    Filesystem                   Size  Used Avail Use% Mounted on
    overlay                       80G  4.0G   77G   5% /
    tmpfs                         64M     0   64M   0% /dev
    tmpfs                        3.8G     0  3.8G   0% /sys/fs/cgroup
    192.0.2.0@tcp:/abcdef01      1.1T  7.8M  1.1T   1% /data
    /dev/nvme0n1p1                80G  4.0G   77G   5% /etc/hosts
    shm                           64M     0   64M   0% /dev/shm
    tmpfs                        6.9G   12K  6.9G   1% /run/secrets/kubernetes.io/serviceaccount
    tmpfs                        3.8G     0  3.8G   0% /proc/acpi
    tmpfs                        3.8G     0  3.8G   0% /sys/firmware
  13. Verifique que la aplicación de muestra haya escrito los datos en el sistema de archivos de FSx para Lustre.

    kubectl exec -it fsx-app -- ls /data

    Un ejemplo de salida sería el siguiente.

    out.txt

    En este resultado de ejemplo se muestra que la aplicación de ejemplo escribió correctamente el archivo out.txt en el sistema de archivos.

nota

Antes de eliminar el clúster, asegúrese de eliminar el sistema de archivos de FSx para Lustre. Para obtener más información, consulte Limpiar recursos en la Guía de usuario de FSx para Lustre.