¿Cómo puedo utilizar el almacenamiento persistente en Amazon EKS?
Quiero utilizar el almacenamiento persistente en Amazon Elastic Kubernetes Service (Amazon EKS).
Breve descripción
Para usar el almacenamiento persistente en Amazon EKS, siga los pasos de una de las siguientes opciones:
- Despliegue y pruebe el controlador de la interfaz de almacenamiento de contenedores (CSI) de Amazon Elastic Block Store (Amazon EBS).
- Despliegue y pruebe el controlador de la interfaz de almacenamiento de contenedores (CSI) de Amazon Elastic File System (Amazon EFS).
Nota: Se recomienda instalar la versión más reciente de los controladores. Para ver los pasos para instalar los controladores más recientes, consulte aws-ebs-csi-driver y 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), consulte Troubleshoot AWS CLI errors. Además, asegúrese de utilizar la versión más reciente de la AWS CLI.
Requisitos previos:
- Instale la AWS CLI.
- Utilice la versión 1.14 o posterior de kubectl para los comandos. Para obtener más información, consulte Configuración de kubectl y eksctl.
- Configure los permisos de AWS Identity and Access Management (IAM) como Crear. A continuación, asocie una política al rol de nodo de trabajo de Amazon EKS Rol de controlador CSI.
- Cree su clúster de Amazon EKS y una sus nodos de trabajo al clúster.
Nota: Ejecute el comando para obtener nodos de kubectl con el fin de comprobar si los nodos de trabajo están asociados al clúster. - Ejecute el siguiente comando para comprobar si su proveedor de OpenID Connect (OIDC) de AWS IAM existe para su clúster:
Nota: Sustituya your_cluster_name por el nombre de su clúster.aws eks describe-cluster --name your_cluster_name --query "cluster.identity.oidc.issuer" --output text
- Ejecute el siguiente comando para comprobar que su proveedor de OIDC de IAM está configurado:
Nota: Reemplace el ID del proveedor de OIDC por su ID de OIDC. Si se muestra el error «No OpenIDConnect provider found in your account», cree un proveedor de OIDC de IAM.aws iam list-open-id-connect-providers | grep <ID of the oidc provider>
- Instale o actualice eksctl. Para obtener instrucciones, consulte Installation en el sitio web de eksctl.
- Ejecute el siguiente comando para crear un proveedor de OIDC de IAM:
Nota: Sustituya my-cluster por el nombre de su clúster.eksctl utils associate-iam-oidc-provider --cluster my-cluster --approve
Controlador CSI de Amazon EBS
Despliegue el controlador CSI de Amazon EBS
Siga estos pasos:
-
Cree 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/<your OIDC ID>" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/<XXXXXXXXXX45D83924220DC4815XXXXX>:aud": "sts.amazonaws.com", "oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/<XXXXXXXXXX45D83924220DC4815XXXXX>:sub": "system:serviceaccount:kube-system:ebs-csi-controller-sa" } } } ] } EOF
Nota: Sustituya YOUR_AWS_ACCOUNT_ID por su ID de cuenta de AWS, YOUR_AWS_REGION por su región de AWS y your OIDC ID por su ID de OIDC.
-
Cree un rol de IAM denominado AmazonEKS_EBS_CSI_DriverRole:
aws iam create-role --role-name AmazonEKS_EBS_CSI_DriverRole --assume-role-policy-document file://"trust-policy.json"
-
Asocie la política de IAM administrada por AWS del controlador al rol de IAM:
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy --role-name AmazonEKS_EBS_CSI_DriverRole
-
Despliegue el controlador CSI de Amazon EBS.
Nota: Para desplegar el controlador CSI de EBS, puede usar Kustomize, Helm o un complemento administrado por Amazon EKS. Para obtener instrucciones sobre cómo desplegar el controlador CSI de EBS, consulte Installation en el sitio web de GitHub.
Pruebe el controlador CSI de Amazon EBS
Pruebe su controlador CSI de Amazon EBS con una aplicación de ejemplo que utilice el aprovisionamiento dinámico para los pods. El volumen de Amazon EBS se aprovisiona bajo demanda.
Controlador CSI de Amazon EFS
Cree un rol de IAM para el controlador CSI
Siga estos pasos:
-
Descargue el documento de la política de IAM de GitHub:
curl -o iam-policy-example.json https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/master/docs/iam-policy-example.json
-
Cree una política de IAM:
aws iam create-policy --policy-name AmazonEKS_EFS_CSI_Driver_Policy --policy-document file://iam-policy-example.json
-
Ejecute el siguiente comando para determinar el ID del proveedor de OIDC de su clúster:
aws eks describe-cluster --name your_cluster_name --query "cluster.identity.oidc.issuer" --output text
Nota: Sustituya your_cluster_name por el nombre de su clúster.
-
Cree la siguiente política de confianza de IAM y, a continuación, conceda la acción AssumeRoleWithWebIdentity a su 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/<XXXXXXXXXX45D83924220DC4815XXXXX>" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/<XXXXXXXXXX45D83924220DC4815XXXXX>:sub": "system:serviceaccount:kube-system:efs-csi-controller-sa" } } } ] } EOF
Nota: Sustituya YOUR_AWS_ACCOUNT_ID por el ID de su cuenta, YOUR_AWS_REGION por su región de AWS y XXXXXXXXXX45D83924220DC4815XXXXX por el ID de proveedor de OIDC de su clúster.
-
Cree un rol de IAM:
aws iam create-role --role-name AmazonEKS_EFS_CSI_DriverRole --assume-role-policy-document file://"trust-policy.json"
-
Asocie su nueva política de IAM al rol:
aws iam attach-role-policy --policy-arn arn:aws:iam::<AWS_ACCOUNT_ID>:policy/AmazonEKS_EFS_CSI_Driver_Policy --role-name AmazonEKS_EFS_CSI_DriverRole
-
Guarde el siguiente contenido en un archivo 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_DriverRole
-
Cree la cuenta de servicio de Kubernetes en su clúster:
kubectl apply -f efs-service-account.yaml
Nota: La cuenta de servicio de Kubernetes denominada efs-csi-controller-sa está anotada con el rol de IAM que ha creado.
-
Descargue el manifiesto del registro público de Amazon ECR y utilice las imágenes para instalar el controlador:
$ kubectl kustomize "github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/?ref=release-1.5" > public-ecr-driver.yaml
Nota: Para instalar el controlador CSI de EFS, puede usar Helm y Kustomize con registro público o privado de AWS. Para obtener instrucciones sobre cómo instalar el controlador CSI de EFS, consulte AWS EFS CSI driver en el sitio web de GitHub.
-
Edite el archivo public-ecr-driver.yaml y anote la sección de cuenta de servicio de Kubernetes efs-csi-controller-sa con el ARN del rol de IAM:
apiVersion: v1 kind: ServiceAccount metadata: labels: app.kubernetes.io/name: aws-efs-csi-driver annotations: eks.amazonaws.com/role-arn: arn:aws:iam::<accountid>:role/AmazonEKS\_EFS\_CSI\_DriverRole name: efs-csi-controller-sa namespace: kube-system
Despliegue el controlador CSI de Amazon EFS
Siga estos pasos:
-
Aplique el manifiesto:
$ kubectl apply -f public-ecr-driver.yaml
-
Si su clúster solo contiene pods de AWS Fargate (sin nodos), ejecute 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
Cree un sistema de archivos de Amazon EFS
Siga estos pasos:
- Para obtener el ID de nube privada virtual (VPC) de su clúster de Amazon EKS, ejecute el siguiente comando:
Nota: Sustituya your_cluster_name por el nombre de su clúster.aws eks describe-cluster --name your_cluster_name --query "cluster.resourcesVpcConfig.vpcId" --output text
- Para obtener el rango de CIDR de su clúster de VPC, ejecute el siguiente comando:
Nota: Sustituya YOUR_VPC_ID por su ID de VPC.aws ec2 describe-vpcs --vpc-ids YOUR_VPC_ID --query "Vpcs[].CidrBlock" --output text
- Cree un grupo de seguridad que permita el tráfico entrante del sistema de archivos de red (NFS) para sus puntos de montaje de Amazon EFS:
Nota: Sustituya YOUR_VPC_ID por su ID de VPC. Anote GroupId para usarlo más adelante.aws ec2 create-security-group --description efs-test-sg --group-name efs-sg --vpc-id YOUR_VPC_ID
- Añada una regla de entrada de NFS para que los recursos de la VPC puedan comunicarse con el sistema de archivos de Amazon EFS:
Nota: Sustituya YOUR_VPC_CIDR por su CIDR de VPC y sg-xxx por su ID de grupo de seguridad.aws ec2 authorize-security-group-ingress --group-id sg-xxx --protocol tcp --port 2049 --cidr YOUR_VPC_CIDR
- Cree un sistema de archivos de Amazon EFS para su clúster de Amazon EKS:
Nota: Anote FileSystemId para usarlo más adelante.aws efs create-file-system --creation-token eks-efs
- Para crear un destino de montaje para Amazon EFS, ejecute el siguiente comando:
Importante: Ejecute el comando anterior para todas las zonas de disponibilidad con el SubnetID en la zona de disponibilidad en la que se ejecutan los nodos de trabajo. Sustituya FileSystemId por el ID de su sistema de archivos EFS, sg-xxx por el ID de su grupo de seguridad y SubnetID por el ID de subred de su nodo de trabajo. Para crear destinos de montaje en varias subredes, ejecute el comando para cada ID de subred. Se recomienda crear un destino de montaje en cada zona de disponibilidad en la que se ejecuten los nodos de trabajo. Puede crear destinos de montaje para todas las zonas de disponibilidad en las que se lanzan los nodos de trabajo. A continuación, todas las instancias de Amazon Elastic Compute Cloud (Amazon EC2) de estas zonas de disponibilidad pueden utilizar el sistema de archivos.aws efs create-mount-target --file-system-id FileSystemId --subnet-id SubnetID --security-group sg-xxx
Pruebe el controlador CSI de Amazon EFS
Para desplegar dos pods que escriban en el mismo archivo, consulte Multiple Pods Read Write Many en el sitio web de GitHub.
Información relacionada
Vídeos relacionados
Contenido relevante
- OFICIAL DE AWSActualizada hace 3 años
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 10 meses