Saltar al contenido

¿Cómo puedo utilizar el almacenamiento persistente en Amazon EKS?

9 minutos de lectura
0

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:

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 text

    Nota: 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-ID

    Nota: 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:

  1. 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"
            }
          }
        }
      ]
    }
    EOF

    Nota: 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.

  2. 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"
  3. 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
  4. 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.

  5. 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:

  1. 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
  2. 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
  3. 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 text

    Nota: Sustituye your_cluster_name por el nombre de tu clúster.

  4. 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"
            }
          }
        }
      ]
    }
    EOF

    Nota: 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.

  5. 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"
  6. 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_DriverRole

    Nota: Sustituye YOUR_AWS_ACCOUNT_ID por el ID de tu cuenta.

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

    Nota: Sustituye YOUR_AWS_ACCOUNT_ID por el ID de tu cuenta.

  8. Para crear la cuenta de servicio de Kubernetes en tu clúster, ejecuta el siguiente comando:

    kubectl apply -f efs-service-account.yaml

    Nota: La cuenta de servicio de Kubernetes efs-csi-controller-sa tiene la anotación del rol de IAM que has creado.

  9. 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.yaml

    Nota: 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.

  10. 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:

  1. Para obtener el ID de nube virtual privada (VPC) de tu clúster de Amazon EKS, ejecuta el siguiente comando describe-cluster:
    aws eks describe-cluster
     --name your_cluster_name
     --query "cluster.resourcesVpcConfig.vpcId"
     --output text
    Nota: Sustituye your_cluster_name por el nombre de tu clúster.
  2. Para obtener el intervalo de CIDR de tu clúster de VPC, ejecuta el siguiente comando describe-vpcs:
    aws ec2 describe-vpcs
     --vpc-ids YOUR_VPC_ID
     --query "Vpcs[].CidrBlock"
     --output text
    Nota: Sustituye YOUR_VPC_ID por tu ID de VPC.
  3. 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:
    aws ec2 create-security-group
     --description efs-test-sg
     --group-name efs-sg
     --vpc-id YOUR_VPC_ID
    Nota: Sustituye YOUR_VPC_ID por tu ID de VPC. En el resultado, anota el valor de GroupId.
  4. 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:
    aws ec2 authorize-security-group-ingress --group-id sg-abc --protocol tcp --port 2049 --cidr YOUR_VPC_CIDR
    Nota: Sustituye YOUR_VPC_CIDR por tu CIDR de VPC y sg-abc por el ID de tu grupo de seguridad.
  5. Para crear un sistema de archivos de EFS para tu clúster de Amazon EKS, ejecuta el siguiente comando create-file-system:
    aws efs create-file-system --creation-token eks-efs
    Nota: Anota el FileSystemId.
  6. Para crear un destino de montaje para Amazon EFS, ejecuta el siguiente comando create-mount-target:
    aws efs create-mount-target --file-system-id FileSystemId --subnet-id SubnetID --security-group sg-abc
    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.

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?