Al usar AWS re:Post, aceptas las AWS re:Post Términos de uso

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

8 minutos de lectura
0

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:

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:
    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.
  • Ejecute el siguiente comando para comprobar que su proveedor de OIDC de IAM está configurado:
    aws iam list-open-id-connect-providers | grep <ID of the oidc provider>
    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.
  • 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:
    eksctl utils associate-iam-oidc-provider --cluster my-cluster --approve
    Nota: Sustituya my-cluster por el nombre de su clúster.

Controlador CSI de Amazon EBS

Despliegue el controlador CSI de Amazon EBS

Siga estos pasos:

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

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

  1. 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
  2. Cree una política de IAM:

    aws iam create-policy
        --policy-name AmazonEKS_EFS_CSI_Driver_Policy
        --policy-document file://iam-policy-example.json
  3. 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.

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

  5. Cree un rol de IAM:

    aws iam create-role
      --role-name AmazonEKS_EFS_CSI_DriverRole
      --assume-role-policy-document file://"trust-policy.json"
  6. 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
  7. 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
  8. 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.

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

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

  1. Aplique el manifiesto:

    $ kubectl apply -f public-ecr-driver.yaml
  2. 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:

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

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

Troubleshooting Amazon EFS

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 8 meses