Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
¿Cómo puedo utilizar el almacenamiento persistente en Amazon EKS?
Quiero utilizar el almacenamiento persistente en Amazon Elastic Kubernetes Service (Amazon EKS).
Descripción corta
Para usar el almacenamiento persistente en Amazon EKS, sigue los pasos de una de las siguientes opciones:
- Despliega y prueba el controlador de la interfaz de almacenamiento de contenedores (CSI) de Amazon Elastic Block Store (Amazon EBS).
- Despliega y prueba el controlador de CSI de Amazon Elastic File System (Amazon EFS).
Nota: Por motivos de seguridad y eficiencia, se recomienda instalar el controlador de CSI mediante un complemento de Amazon EKS. También se recomienda instalar la versión más reciente de los controladores. Para ver los pasos de instalación y la versión más reciente del controlador, consulta aws-ebs-csi-driver o aws-efs-csi-driver en el sitio web de GitHub.
Resolución
Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.
Requisitos previos:
-
Configura una versión de kubectl que se alinee con tu versión de Kubernetes. Para obtener información sobre los requisitos de sesgo de versión, consulta kubectl en el sitio web de Kubernetes.
-
Instala o actualiza eksctl. Para obtener instrucciones, consulta Installation (Instalación) en el sitio web de eksctl.
-
Configura los permisos de creación de AWS Identity and Access Management (IAM). A continuación, asocia una política al rol de controlador de CSI o al rol de nodo de trabajo de Amazon EKS.
-
Crea tu clúster de Amazon EKS y, a continuación, une tus nodos de trabajo al clúster. Para comprobar que has conectado los nodos de trabajo a tu clúster, ejecuta el siguiente comando:
kubectl get nodes -
Para comprobar que existe un proveedor de OpenID Connect (OIDC) de IAM para tu clúster, ejecuta el siguiente comando describe-cluster de la AWS CLI:
aws eks describe-cluster --name your_cluster_name --query "cluster.identity.oidc.issuer" --output textNota: Sustituye your_cluster_name por el nombre de tu clúster.
-
Para comprobar si has configurado un proveedor de OIDC de IAM, ejecuta el siguiente comando list-open-id-connect-providers:
aws iam list-open-id-connect-providers | grep OIDC-IDNota: Sustituye OIDC-ID por el ID de tu proveedor de OIDC. Si recibes un mensaje de error , crea un proveedor de OIDC de IAM"No OpenIDConnect provider found in your account".
Controlador de CSI de Amazon EBS
Para desplegar el controlador de CSI de Amazon EBS, sigue estos pasos:
-
Crea un archivo de política de confianza de IAM similar al del siguiente ejemplo:
cat <<EOF > trust-policy.json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::YOUR_AWS_ACCOUNT_ID:oidc-provider/oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/OIDC-ID" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/OIDC-ID:aud": "sts.amazonaws.com", "oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/OIDC-ID:sub": "system:serviceaccount:kube-system:ebs-csi-controller-sa" } } } ] } EOFNota: Sustituye YOUR_AWS_ACCOUNT_ID por el ID de tu cuenta de AWS, YOUR_AWS_REGION por tu región de AWS y OIDC-ID por el ID de tu proveedor de OIDC.
-
Para crear un rol de IAM denominado AmazonEKS_EBS_CSI_DriverRole, ejecuta el siguiente comando create-role:
aws iam create-role --role-name AmazonEKS_EBS_CSI_DriverRole --assume-role-policy-document file://"trust-policy.json" -
Para adjuntar la política de IAM administrada de AWS del controlador de CSI al rol de IAM, ejecuta el siguiente comando attach-role-policy:
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy --role-name AmazonEKS_EBS_CSI_DriverRole -
Para desplegar el controlador de CSI de Amazon EBS, usa Kustomize, Helm o un complemento administrado por Amazon EKS. Para obtener instrucciones de despliegue, consulta Installation (Instalación) en el sitio web de GitHub.
-
Prueba tu controlador de CSI de Amazon EBS con una aplicación de ejemplo que utilice el aprovisionamiento dinámico para los pods. El controlador de CSI de Amazon EBS aprovisiona volúmenes de EBS a pedido.
Controlador de CSI de Amazon EFS
Creación de un rol de IAM para el controlador de CSI
Completa los siguientes pasos para un clúster con nodos de trabajo:
-
Para usar la política AmazonEFSCSIDriverPolicy, consulta Si se utilizan roles de IAM para las cuentas de servicio. A continuación, continúa con el paso 7.
O bien, ejecuta el siguiente comando para descargar el documento de política de IAM desde GitHub:curl -o iam-policy-example.json https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/master/docs/iam-policy-example.json -
Para crear una política de IAM, ejecuta el siguiente comando create-policy:
aws iam create-policy --policy-name AmazonEKS_EFS_CSI_Driver_Policy --policy-document file://iam-policy-example.json -
Para determinar el ID del proveedor de OIDC de tu clúster, ejecuta el siguiente comando describe-cluster:
aws eks describe-cluster --name your_cluster_name --query "cluster.identity.oidc.issuer" --output textNota: Sustituye your_cluster_name por el nombre de tu clúster.
-
Crea la siguiente política de confianza de IAM y, a continuación, concede la acción AssumeRoleWithWebIdentity a tu cuenta de servicio de Kubernetes:
cat <<EOF > trust-policy.json{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::YOUR_AWS_ACCOUNT_ID:oidc-provider/oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/OIDC-ID" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/OIDC-ID:sub": "system:serviceaccount:kube-system:efs-csi-controller-sa" } } } ] } EOFNota: Sustituye YOUR_AWS_ACCOUNT_ID por el ID de tu cuenta, YOUR_AWS_REGION por tu región y OIDC-ID por el ID del proveedor de OIDC de tu clúster.
-
Para crear un rol de IAM, ejecuta el siguiente comando create-role:
aws iam create-role --role-name AmazonEKS_EFS_CSI_DriverRole --assume-role-policy-document file://"trust-policy.json" -
Para adjuntar tu nueva política de IAM al rol, ejecuta el siguiente comando attach-role-policy:
aws iam attach-role-policy --policy-arn arn:aws:iam::AWS_ACCOUNT_ID:policy/AmazonEKS_EFS_CSI_Driver_Policy --role-name AmazonEKS_EFS_CSI_DriverRoleNota: Sustituye YOUR_AWS_ACCOUNT_ID por el ID de tu cuenta.
-
Si utilizas un complemento administrado, continúa con el despliegue del controlador de CSI de Amazon EFS. Para instalar un controlador autoadministrado, completa los pasos 7 a 10. Guarda el siguiente contenido en un archivo YAML denominado efs-service-account.yaml:
apiVersion: v1 kind: ServiceAccount metadata: labels: app.kubernetes.io/name: aws-efs-csi-driver name: efs-csi-controller-sa namespace: kube-system annotations: eks.amazonaws.com/role-arn: arn:aws:iam::AWS_ACCOUNT_ID:role/AmazonEKS_EFS_CSI_DriverRoleNota: Sustituye YOUR_AWS_ACCOUNT_ID por el ID de tu cuenta.
-
Para crear la cuenta de servicio de Kubernetes en tu clúster, ejecuta el siguiente comando:
kubectl apply -f efs-service-account.yamlNota: La cuenta de servicio de Kubernetes efs-csi-controller-sa tiene la anotación del rol de IAM que has creado.
-
Para descargar el manifiesto del registro público de Amazon Elastic Container Registry (Amazon ECR), ejecuta el siguiente comando:
kubectl kustomize "github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/?ref=release-VERSION" > public-ecr-driver.yamlNota: Sustituye VERSION por tu número de versión. Se recomienda utilizar la última versión publicada. Para obtener una lista de las ramificaciones activas, consulta Branches (Ramificaciones) en el sitio web de GitHub. Puedes usar Helm en lugar de Kustomize para instalar el controlador. Para ver los pasos, consulta Deploy the driver (Despliegue del controlador) en el sitio web de GitHub.
-
Edita el archivo descargado para eliminar las siguientes líneas:
apiVersion: v1 kind: ServiceAccount metadata: labels: app.kubernetes.io/name: aws-efs-csi-driver name: efs-csi-controller-sa namespace: kube-system
Nota: No necesitas incluir las líneas anteriores porque ya creaste una cuenta de servicio en el paso 7.
Despliegue del controlador de CSI de Amazon EFS
Para aplicar el manifiesto, ejecuta el siguiente comando:
kubectl apply -f public-ecr-driver.yaml
Si tu clúster no contiene nodos y solo contiene pods de AWS Fargate, ejecuta el siguiente comando para desplegar el controlador en todas las regiones:
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/master/deploy/kubernetes/base/csidriver.yaml
Creación de un sistema de archivos de EFS
Sigue estos pasos:
- Para obtener el ID de nube virtual privada (VPC) de tu clúster de Amazon EKS, ejecuta el siguiente comando describe-cluster:
Nota: Sustituye your_cluster_name por el nombre de tu clúster.aws eks describe-cluster --name your_cluster_name --query "cluster.resourcesVpcConfig.vpcId" --output text - Para obtener el intervalo de CIDR de tu clúster de VPC, ejecuta el siguiente comando describe-vpcs:
Nota: Sustituye YOUR_VPC_ID por tu ID de VPC.aws ec2 describe-vpcs --vpc-ids YOUR_VPC_ID --query "Vpcs[].CidrBlock" --output text - Para crear un grupo de seguridad que permita el tráfico entrante del sistema de archivos de red (NFS) a tus puntos de montaje de Amazon EFS, ejecuta el siguiente comando create-security-group:
Nota: Sustituye YOUR_VPC_ID por tu ID de VPC. En el resultado, anota el valor de GroupId.aws ec2 create-security-group --description efs-test-sg --group-name efs-sg --vpc-id YOUR_VPC_ID - Para permitir que los recursos de la VPC se comuniquen con el sistema de archivos de EFS, ejecuta el siguiente comando authorize-security-group-ingress para agregar una regla de entrada de NFS:
Nota: Sustituye YOUR_VPC_CIDR por tu CIDR de VPC y sg-abc por el ID de tu grupo de seguridad.aws ec2 authorize-security-group-ingress --group-id sg-abc --protocol tcp --port 2049 --cidr YOUR_VPC_CIDR - Para crear un sistema de archivos de EFS para tu clúster de Amazon EKS, ejecuta el siguiente comando create-file-system:
Nota: Anota el FileSystemId.aws efs create-file-system --creation-token eks-efs - Para crear un destino de montaje para Amazon EFS, ejecuta el siguiente comando create-mount-target:
Nota: Sustituye FileSystemId por el ID de tu sistema de archivos de EFS, sg-abc por el ID de tu grupo de seguridad y SubnetID por el ID de subred de tu nodo de trabajo. Se recomienda ejecutar el comando anterior para cada zona de disponibilidad en la que se ejecuten los nodos de trabajo. Todas las instancias de Amazon Elastic Compute Cloud (Amazon EC2) de estas zonas de disponibilidad pueden utilizar el sistema de archivos. Para crear destinos de montaje en varias subredes, ejecuta el comando para cada ID de subred.aws efs create-mount-target --file-system-id FileSystemId --subnet-id SubnetID --security-group sg-abc
Prueba del controlador de CSI de Amazon EFS
Para desplegar dos pods que escriban en el mismo archivo, consulta Multiple Pods Read Write Many (Varios pods leen y escriben muchos) en el sitio web de GitHub.
Información relacionada
Solución de errores de operación de archivos relacionados con las cuotas
Amazon EFS CSI driver (Controlador de CSI de Amazon EFS) en el sitio web de GitHub
¿Cómo soluciono los problemas de montaje de los volúmenes de Amazon EFS en Amazon EKS?
¿Cómo soluciono los problemas con el montaje de mis volúmenes de Amazon EFS en Amazon EKS?
- Temas
- Containers
- Etiquetas
- Amazon Elastic Kubernetes Service
- Idioma
- Español
Vídeos relacionados


Contenido relevante
- preguntada hace 6 meses
- preguntada hace 3 meses
- Respuesta aceptadapreguntada hace 10 meses
OFICIAL DE AWSActualizada hace 8 meses