

 **Ayude a mejorar esta página** 

Para contribuir a esta guía del usuario, elija el enlace **Edit this page on GitHub** que se encuentra en el panel derecho de cada página.

# Implementación del controlador de FSx para Lustre
<a name="fsx-csi-create"></a>

Este tema muestra cómo implementar el [controlador CSI de FSx para Lustre](fsx-csi.md) en el clúster de Amazon EKS y verificar que funcione correctamente. Siempre recomendamos usar la versión más reciente del controlador. Para ver las versiones disponibles, consulte [CSI Specification Compatibility Matrix](https://github.com/kubernetes-sigs/aws-fsx-csi-driver/blob/master/docs/README.md#csi-specification-compatibility-matrix) (Matriz de compatibilidad de especificaciones de CSI) en GitHub.

**nota**  
El controlador no es compatible en Fargate ni en los Nodos híbridos de Amazon EKS.

Para obtener descripciones detalladas de los parámetros disponibles y ejemplos completos que demuestran las características del controlador, consulte el proyecto [FSx for Lustre Container Storage Interface (CSI) driver](https://github.com/kubernetes-sigs/aws-fsx-csi-driver) en GitHub.

## Requisitos previos
<a name="fsx-csi-prereqs"></a>
+ Un clúster existente.
+ El complemento de EKS del controlador de CSI de Amazon FSx requiere el agente de EKS Pod Identity para la autenticación. Sin este componente, se producirá el error `Amazon EKS Pod Identity agent is not installed in the cluster` en el complemento, que impedirá las operaciones de volumen. Instale el agente de Pod Identity antes o después de implementar el complemento del controlador de CSI de FSx. Para obtener más información, consulte [Configuración del agente de Pod Identity de Amazon EKS](pod-id-agent-setup.md).
+ La versión `2.12.3` o posterior, o bien, la versión `1.27.160` o posterior de la AWS interfaz de la línea de comandos (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, 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 [Instalación](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) y [Configuración rápida con aws configure](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config) en la *Guía del usuario de la interfaz de la línea de comandos de AWS*. 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 AWS CLI en su directorio de usuarios principal](https://docs.aws.amazon.com/cloudshell/latest/userguide/vm-specs.html#install-cli-software) en la *Guía del usuario de AWS CloudShell*.
+ La versión `0.215.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](https://eksctl.io/installation) 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 [Configuración de `kubectl` y `eksctl`](install-kubectl.md).

## Paso 1: creación de un rol de IAM
<a name="fsx-create-iam-role"></a>

El complemento de CSI de Amazon FSx requiere permisos de IAM para hacer llamadas a las API de AWS en su nombre.

**nota**  
Los pods tendrán acceso a los permisos asignados al rol de IAM, a menos que bloquee el acceso al IMDS. Para obtener más información, consulte [Protección de los clústeres de Amazon EKS con las prácticas recomendadas](security-best-practices.md).

El siguiente procedimiento muestra cómo crear un rol de IAM y asociarle la política administrada de AWS.

1. Cree un rol de IAM y adjunte la política administrada de AWS con el siguiente comando. Sustituya `my-cluster` por el nombre del clúster que desea utilizar. El comando implementa una pila de AWS CloudFormation que crea un rol de IAM y le adjunta la política de IAM.

   ```
   eksctl create iamserviceaccount \
       --name fsx-csi-controller-sa \
       --namespace kube-system \
       --cluster my-cluster \
       --role-name AmazonEKS_FSx_CSI_DriverRole \
       --role-only \
       --attach-policy-arn arn:aws:iam::aws:policy/AmazonFSxFullAccess \
       --approve
   ```

   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-cluster-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa"
   [ℹ]  deploying stack "eksctl-my-cluster-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa"
   [ℹ]  waiting for CloudFormation stack "eksctl-my-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-cluster-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa`.

Ahora que ha creado el rol de IAM del controlador de CSI de Amazon FSx, puede continuar con la siguiente sección. Cuando implementa el complemento con este rol de IAM, se crea y se configura para utilizar una cuenta de servicio que se llama `fsx-csi-controller-sa`. La cuenta de servicio está vinculada a un `clusterrole` de Kubernetes al que se le asignan los permisos de Kubernetes necesarios.

## Paso 2: instalación del controlador de CSI de Amazon FSx
<a name="fsx-csi-deploy-driver"></a>

Le recomendamos que instale el controlador de CSI de Amazon FSx a través del complemento de Amazon EKS para mejorar la seguridad y reducir la cantidad de trabajo. Para agregar un complemento de Amazon EKS al clúster, consulte [Cómo crear un complemento de Amazon EKS](creating-an-add-on.md). Para obtener más información sobre los complementos, consulte [Complementos de Amazon EKS](eks-add-ons.md).

**importante**  
Las instalaciones preexistentes del controlador de CSI de Amazon FSx en el clúster pueden provocar errores en la instalación de los complementos. Si intenta instalar la versión del complemento de Amazon EKS mientras existe un controlador de CSI de FSx que no es de EKS, se producirá un error en la instalación debido a conflictos de recursos. Utilice la marca `OVERWRITE` durante la instalación para resolver este problema.  

```
aws eks create-addon --addon-name aws-fsx-csi-driver --cluster-name my-cluster --resolve-conflicts OVERWRITE
```

Como alternativa, si desea una instalación autoadministrada del controlador de CSI de Amazon FSx, consulte [Installation](https://github.com/kubernetes-sigs/aws-fsx-csi-driver/blob/master/docs/install.md) en GitHub.

## Paso 3: implementación de una clase de almacenamiento, una solicitud de volumen persistente y una aplicación de ejemplo
<a name="fsx-csi-deploy-storage-class"></a>

Este procedimiento utiliza el repositorio GitHub del [controlador de Container Storage Interface (CSI) de FSx para Lustre](https://github.com/kubernetes-sigs/aws-fsx-csi-driver) para utilizar un volumen de FSx for Lustre aprovisionado dinámicamente.

1. Anote el grupo de seguridad del clúster. Puede verlo en la Consola de administración de AWS en la sección **Redes** o utilizando el siguiente comando de AWS CLI. Sustituya `my-cluster` por el nombre del clúster que desea utilizar.

   ```
   aws eks describe-cluster --name my-cluster --query cluster.resourcesVpcConfig.clusterSecurityGroupId
   ```

1. 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](https://docs.aws.amazon.com/fsx/latest/LustreGuide/limit-access-security-groups.html#fsx-vpc-security-groups) 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).

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

1. Edite la sección de parámetros del archivo `storageclass.yaml`. Reemplace todos los valores de ejemplo por sus propios valores.

   ```
   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 Consola de administración de AWS 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](https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/amazon-vpc-to-amazon-vpc-connectivity-options.html) 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](https://docs.aws.amazon.com/fsx/latest/LustreGuide/getting-started-step1.html).
   +  **otros parámetros (opcionales)**: para obtener información acerca del resto de parámetros, consulte [Edit StorageClass](https://github.com/kubernetes-sigs/aws-fsx-csi-driver/tree/master/examples/kubernetes/dynamic_provisioning#edit-storageclass) (Editar StorageClass) en GitHub.

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

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

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

1. Cree la notificación de volumen persistente.

   ```
   kubectl apply -f claim.yaml
   ```

   Un ejemplo de salida sería el siguiente.

   ```
   persistentvolumeclaim/fsx-claim created
   ```

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

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

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

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

1. 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](https://docs.aws.amazon.com/fsx/latest/LustreGuide/getting-started-step4.html) en la *Guía de usuario de FSx para Lustre*.

## Ajuste del rendimiento para FSx para Lustre
<a name="_performance_tuning_for_fsx_for_lustre"></a>

Al utilizar FSx para Lustre con Amazon EKS, puede optimizar el rendimiento mediante la aplicación de ajustes de Lustre durante la inicialización del nodo. El enfoque recomendado consiste en utilizar los datos del usuario de la plantilla de lanzamiento para garantizar una configuración coherente en todos los nodos.

Estos ajustes incluyen lo siguiente:
+ Optimizaciones de red y RPC
+ Administración de módulos de Lustre
+ Ajustes de LRU (unidad de recurso de bloqueo)
+ Configuración de control de caché del cliente
+ Controles de RPC para OST y MDC

Para obtener instrucciones detalladas sobre cómo implementar estos ajustes de rendimiento:
+ Para optimizar el rendimiento de los nodos estándar (que no son EFA), consulte [Optimización del rendimiento de Amazon FSx para Lustre en nodos (sin EFA)](fsx-csi-tuning-non-efa.md) para obtener un script completo que puede agregarse a los datos de usuario de la plantilla de lanzamiento.
+ Para optimizar el rendimiento de los nodos compatibles con EFA, consulte [Optimización del rendimiento de Amazon FSx para Lustre en nodos (EFA)](fsx-csi-tuning-efa.md).