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.
Utilice el almacenamiento del sistema de archivos de Amazon S3 con el controlador de CSI de Amazon EFS
S3 Files es un sistema de archivos compartidos que conecta cualquier proceso de AWS directamente con los datos de Amazon S3. Proporciona un acceso rápido y directo a todos sus datos de S3 en forma de archivos con una semántica completa del sistema de archivos y un rendimiento de baja latencia, sin que sus datos salgan nunca de S3. Esto significa que las aplicaciones, los agentes y los equipos basados en archivos pueden acceder a los datos de S3 y trabajar con ellos como un sistema de archivos mediante las herramientas de las que ya dependen. El controlador de Container Storage Interface (CSI) de Amazon EFS
Consideraciones
-
El controlador CSI de Amazon EFS no es compatible con imágenes de contenedores basadas en Windows.
-
EKS Fargate no admite archivos de S3.
-
El controlador CSI de Amazon EFS no es compatible con los nodos híbridos de Amazon EKS.
-
La compatibilidad con Amazon S3 Files en el controlador de CSI de Amazon EFS comienza a partir de la versión 3.0.0
.
Requisitos previos
-
El controlador CSI de Amazon EFS necesita los permisos de AWS Identity and Access Management (IAM).
-
AWS sugiere usar Pod Identities de EKS. Para obtener más información, consulte Información general de configuración de las Pod Identities de EKS.
-
Para obtener más información sobre los roles de IAM para las cuentas de servicio y la configuración de un proveedor de OpenID Connect (OIDC) de IAM para el clúster, consulte Crear un proveedor de OIDC de IAM para su clúster.
-
-
La versión
2.12.3o posterior, o bien, la versión1.27.160o 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, utiliceaws --version | cut -d / -f2 | cut -d ' ' -f1. Los administradores de paquetes, comoyum,apt-geto 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 y Configuración rápida con aws configure 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 la CLI de AWS en su directorio principal en la Guía del usuario de AWS CloudShell. -
La herramienta de línea de comandos de
kubectlestá 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 es1.29, puede usar la versión1.28,1.29o1.30dekubectlcon él. Para instalar o actualizarkubectl, consulte Configuración de kubectl y eksctl.
Paso 1: crear roles de IAM
El controlador CSI de Amazon EFS requiere permisos de IAM para interactuar con el sistema de archivos. El controlador de CSI de EFS utiliza dos cuentas de servicio con roles de IAM independientes:
-
efs-csi-controller-sa: utilizado por el controlador, requiereAmazonS3FilesCSIDriverPolicy. -
efs-csi-node-sa: utilizado por el nodo daemonset, requiere:-
AmazonS3ReadOnlyAccess: permite transmitir las lecturas directamente desde su bucket de S3 para lograr un mayor rendimiento. -
AmazonElasticFileSystemsUtils: permite publicar los registros de efs-utils en Amazon CloudWatch para obtener visibilidad de las operaciones de montaje y facilitar la solución de problemas.
-
nota
Si desea utilizar tanto el sistema de archivos de Amazon S3 como el almacenamiento de Amazon EFS, debe adjuntar las políticas administradas AmazonS3FilesCSIDriverPolicy y AmazonEFSCSIDriverPolicy al rol de controlador. Para obtener más información sobre el almacenamiento de Amazon EFS, consulte Uso del almacenamiento del sistema de archivos elástico con Amazon EFS.
Para implementar este procedimiento, puede utilizar una de las siguientes herramientas:
nota
Los pasos específicos de este procedimiento están diseñados para usar el controlador como complemento de Amazon EKS. Para obtener más información sobre las instalaciones autoadministradas, consulte Set up driver permission
eksctl
Si se utiliza Pod Identities
Ejecute los siguientes comandos para crear roles de IAM y asociaciones de Pod Identity con eksctl. Reemplace my-cluster por su valor.
export cluster_name=my-cluster # Create the controller role eksctl create podidentityassociation \ --service-account-name efs-csi-controller-sa \ --namespace kube-system \ --cluster $cluster_name \ --role-name AmazonEKS_EFS_CSI_ControllerRole \ --permission-policy-arns arn:aws:iam::aws:policy/service-role/AmazonS3FilesCSIDriverPolicy # Create the node role eksctl create podidentityassociation \ --service-account-name efs-csi-node-sa \ --namespace kube-system \ --cluster $cluster_name \ --role-name AmazonEKS_EFS_CSI_NodeRole \ --permission-policy-arns arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess,arn:aws:iam::aws:policy/AmazonElasticFileSystemsUtils
Si se utilizan roles de IAM para cuentas de servicio
Ejecute los siguientes comandos para crear roles de IAM con eksctl. Reemplace my-cluster por el nombre de su clúster y region-code por su código de región de AWS.
export cluster_name=my-cluster export region_code=region-code # Create the controller role export controller_role_name=AmazonEKS_EFS_CSI_ControllerRole eksctl create iamserviceaccount \ --name efs-csi-controller-sa \ --namespace kube-system \ --cluster $cluster_name \ --role-name $controller_role_name \ --attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonS3FilesCSIDriverPolicy \ --approve \ --region $region_code # Create the node role export node_role_name=AmazonEKS_EFS_CSI_NodeRole eksctl create iamserviceaccount \ --name efs-csi-node-sa \ --namespace kube-system \ --cluster $cluster_name \ --role-name $node_role_name \ --attach-policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess \ --attach-policy-arn arn:aws:iam::aws:policy/AmazonElasticFileSystemsUtils \ --approve \ --region $region_code
Consola de administración de AWS
Ejecute lo siguiente para crear un rol de IAM con la Consola de administración de AWS.
-
Abra la consola de IAM en https://console.aws.amazon.com/iam/.
-
En el panel de navegación izquierdo, elija Roles.
-
En la página Roles, elija Crear rol.
-
En la página Seleccionar entidad de confianza, haga lo siguiente:
-
Si se utiliza Pod Identities de EKS:
-
En la sección Tipo de entidad de confianza, elija Servicio de AWS.
-
En el menú desplegable Servicio o caso de uso, seleccione EKS.
-
En la sección Caso de uso, seleccione EKS: Pod Identity.
-
Elija Siguiente.
-
-
Si se utilizan roles de IAM para cuentas de servicio:
-
En la sección Tipo de entidad de confianza, elija Identidad web.
-
Para Identity provider (Proveedor de identidades), elija OpenID Connect provider URL (URL del proveedor de OpenID Connect) para el clúster, como se muestra en Overview (Resumen) en Amazon EKS.
-
En Audiencia, elija
sts.amazonaws.com. -
Elija Siguiente.
-
-
-
En la página Agregar permisos, haga lo siguiente:
-
En el cuadro Filtrar políticas, escriba
AmazonS3FilesCSIDriverPolicy. -
Marque la casilla situada a la izquierda del nombre de la política que obtuvo en la búsqueda.
-
Elija Siguiente.
-
-
En la página Nombrar, revisar y crear, haga lo siguiente:
-
En Nombre del rol, ingrese un nombre único para su rol, por ejemplo,
AmazonEKS_EFS_CSI_ControllerRole. -
En Agregar etiquetas (Opcional), de manera opcional, agregue metadatos al rol asociando etiquetas como pares de clave-valor. Para obtener más información sobre el uso de etiquetas en IAM, consulte Etiquetado de recursos de IAM en la Guía de usuario de IAM.
-
Elija Creación de rol.
-
-
Una vez creado el rol:
-
Si se utiliza Pod Identities de EKS:
-
Abra la consola de Amazon EKS
. -
En el panel de navegación izquierdo, seleccione Clústeres y, a continuación, seleccione el nombre del clúster para el que desea configurar la asociación de Pod Identity de EKS.
-
Elija la pestaña Acceso.
-
En Asociaciones de Pod Identity, elija Crear.
-
Elija el menú desplegable Rol de IAM y seleccione el rol recién creado.
-
Elija el campo del espacio de nombres de Kubernetes e introduzca
kube-system. -
Elija el campo de la cuenta de servicio de Kubernetes e introduzca
efs-csi-controller-sa. -
Seleccione Crear.
-
Para obtener más información sobre la creación de asociaciones de Pod Identity, consulte Creación de una asociación de Pod Identity (consola de AWS).
-
Repita los pasos anteriores para crear un segundo rol para la cuenta de servicio del nodo. En la página Agregar permisos, adjunte
AmazonS3ReadOnlyAccessyAmazonElasticFileSystemsUtilsen su lugar. A continuación, cree una asociación de Pod Identity conefs-csi-node-sapara el campo cuenta de servicio de Kubernetes.
-
-
Si se utilizan roles de IAM para cuentas de servicio:
-
Elija el rol para abrirlo y editarlo.
-
Elija la pestaña Relaciones de confianza y, a continuación, Editar política de confianza.
-
Busque la línea que se parezca a la siguiente:
"oidc.eks.region-code.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:aud": "sts.amazonaws.com"Añada la siguiente línea por encima de la línea anterior. Reemplace
<region-code>con la región de AWS en la que se encuentra el clúster. Reemplace<EXAMPLED539D4633E53DE1B71EXAMPLE>con el ID del proveedor OIDC del clúster."oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:sub": "system:serviceaccount:kube-system:efs-csi-controller-sa", -
Elija Actualizar política para terminar.
-
Repita los pasos anteriores para crear un segundo rol para la cuenta de servicio del nodo. En la página Agregar permisos, adjunte
AmazonS3ReadOnlyAccessyAmazonElasticFileSystemsUtilsen su lugar. En la política de confianza, utiliceefs-csi-node-sacomo valor de condición:sub.
-
-
AWS CLI
Ejecute los siguientes comandos para crear roles de IAM con la CLI de AWS.
Si se utiliza Pod Identities
-
Cree el rol de IAM que otorga las acciones
AssumeRoleyTagSessional serviciopods.eks.amazonaws.com.-
Copie el siguiente contenido en un archivo denominado
aws-efs-csi-driver-trust-policy-pod-identity.json.{ "Version":"2012-10-17", "Statement": [ { "Sid": "AllowEksAuthToAssumeRoleForPodIdentity", "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] } ] } -
Cree el rol. Sustituya
my-clusterpor el nombre del clúster.export cluster_name=my-cluster export controller_role_name=AmazonEKS_EFS_CSI_ControllerRole aws iam create-role \ --role-name $controller_role_name \ --assume-role-policy-document file://"aws-efs-csi-driver-trust-policy-pod-identity.json"
-
-
Adjunte las políticas administradas por AWS necesarias al rol del controlador.
aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonS3FilesCSIDriverPolicy \ --role-name $controller_role_name -
Cree el rol de IAM del nodo mediante la política de confianza.
export node_role_name=AmazonEKS_EFS_CSI_NodeRole aws iam create-role \ --role-name $node_role_name \ --assume-role-policy-document file://"aws-efs-csi-driver-trust-policy-pod-identity.json" -
Asocie las políticas administradas por AWS necesarias al rol.
aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess \ --role-name $node_role_name aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonElasticFileSystemsUtils \ --role-name $node_role_name -
Ejecute los siguientes comandos para crear la asociación de Pod Identity. Reemplace
<111122223333>por su ID de cuenta.aws eks create-pod-identity-association --cluster-name $cluster_name --role-arn {arn-aws}iam::<111122223333>:role/$controller_role_name --namespace kube-system --service-account efs-csi-controller-sa aws eks create-pod-identity-association --cluster-name $cluster_name --role-arn {arn-aws}iam::<111122223333>:role/$node_role_name --namespace kube-system --service-account efs-csi-node-sa
-
Para obtener más información sobre la creación de asociaciones de Pod Identity, consulte Creación de una asociación de Pod Identity (consola de AWS).
Si se utilizan roles de IAM para cuentas de servicio
-
Visualización de la URL del proveedor de OIDC de su clúster. Sustituya
my-clusterpor el nombre del clúster.export cluster_name=my-cluster aws eks describe-cluster --name $cluster_name --query "cluster.identity.oidc.issuer" --output textUn ejemplo de salida sería el siguiente.
https://oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>Si la salida del comando es
None, revise los Requisitos previos. -
Crear el rol de IAM para la cuenta de servicio del controlador.
-
Copie el siguiente contenido en un archivo denominado
controller-trust-policy.json. Reemplace<111122223333>por su ID de cuenta. Reemplace<EXAMPLED539D4633E53DE1B71EXAMPLE>y<region-code>por los valores que se devolvieron en el paso anterior.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::<111122223333>:oidc-provider/oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:aud": "sts.amazonaws.com", "oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:sub": "system:serviceaccount:kube-system:efs-csi-controller-sa" } } } ] } -
Creación del rol.
export controller_role_name=AmazonEKS_EFS_CSI_ControllerRole aws iam create-role \ --role-name $controller_role_name \ --assume-role-policy-document file://"controller-trust-policy.json"
-
-
Adjunte las políticas administradas por AWS necesarias al rol del controlador.
aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonS3FilesCSIDriverPolicy \ --role-name $controller_role_name -
Cree el rol de IAM para la cuenta de servicio del nodo.
-
Copie el siguiente contenido en un archivo denominado
node-trust-policy.json. Reemplace<111122223333>por su ID de cuenta. Reemplace<EXAMPLED539D4633E53DE1B71EXAMPLE>y<region-code>por los valores que se devolvieron en el paso 1.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::<111122223333>:oidc-provider/oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:sub": "system:serviceaccount:kube-system:efs-csi-node-sa", "oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:aud": "sts.amazonaws.com" } } } ] } -
Creación del rol.
export node_role_name=AmazonEKS_EFS_CSI_NodeRole aws iam create-role \ --role-name $node_role_name \ --assume-role-policy-document file://"node-trust-policy.json"
-
-
Asocie las políticas administradas por AWS necesarias al rol.
aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess \ --role-name $node_role_name aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonElasticFileSystemsUtils \ --role-name $node_role_name
nota
La política AmazonS3ReadOnlyAccess concede acceso de lectura a todos los buckets de S3. Para restringir el acceso a buckets específicos, puede separarlos y sustituirlos por una política en línea basada en etiquetas. Consulte la documentación de la política de IAM del controlador de CSI de Amazon EFS
Paso 2: obtención del controlador de CSI de Amazon EFS
Le recomendamos que instale el controlador CSI de Amazon EFS a través del complemento Amazon EKS. Para agregar un complemento de Amazon EKS al clúster, consulte Cómo crear un complemento de Amazon EKS. Para obtener más información sobre los complementos, consulte Complementos de Amazon EKS. Si no puede utilizar el complemento de Amazon EKS, le recomendamos que envíe una pregunta sobre los motivos por los que no puede hacerlo al repositorio de GitHub de la hoja de ruta de contenedores
importante
Antes de agregar el controlador de Amazon EBS como complemento de Amazon EKS, asegúrese de que no haya una versión autoadministrada del controlador instalada en el clúster. Si es así, consulte Desinstalar el controlador CSI de Amazon EFS
Como alternativa, si desea una instalación autoadministrada del controlador CSI de Amazon EFS, consulte Installation
Paso 3: creación de un sistema de archivos de Amazon S3
Para crear un sistema de archivos de Amazon S3, consulte Crear un sistema de archivos de Amazon S3 para Amazon EKS
Paso 4: implementación de una aplicación de muestra
Puede implementar una variedad de aplicaciones de muestra y modificarlas según sea necesario. Para obtener más información, consulte Ejemplos