¿Cómo se resuelven los problemas relacionados con los montajes de volúmenes de Amazon EFS en Amazon EKS?

Última actualización: 27/12/2022

Quiero solucionar errores al montar volúmenes de Amazon Elastic File System (Amazon EFS) en mi clúster de Amazon Elastic Kubernetes Service (Amazon EKS).

Resolución

Es posible que aparezca uno de los siguientes errores en sus pods al montar el volumen de Amazon EFS en su clúster de Amazon EKS:

  • “Output: mount.nfs4: mounting fs-18xxxxxx.efs.us-east-1.amazonaws.com:/path-in-dir:/ failed, reason given by server: No such file or directory” (Salida: mount.nfs4: se produjo un error al montar fs-18xxxxxx.efs.us-east-1.amazonaws.com:/path-in-dir:/, motivo dado por el servidor: no existe tal archivo o directorio)
  • “Output: Failed to resolve "fs-xxxxxx.efs.us-west-2.amazonaws.com" - check that your file system ID is correct” (Salida: no se pudo resolver “fs-xxxxxx.efs.us-west-2.amazonaws.com”; verifique que el ID del sistema de archivos sea correcto)
  • “mount.nfs4: access denied by server while mounting 127.0.0.1:/” (mount.nfs4: acceso denegado por el servidor al montar 127.0.0.1:/)
  • “mount.nfs: Connection timed out” (mount.nfs: se agotó el tiempo de espera de la conexión)
  • “Unable to attach or mount volumes: timed out waiting for the condition” (No se pueden adjuntar ni montar volúmenes: se agotó el tiempo de espera de la condición)

Antes de comenzar con los pasos de solución de problemas, compruebe que cuenta con lo siguiente:

Verificar que los destinos de montaje están configurados correctamente

Asegúrese de crear los destinos de montaje de EFS en cada zona de disponibilidad donde se ejecuten los nodos de EKS. Por ejemplo, si los nodos de trabajo se encuentran distribuidos entre us-east-1a y us-east-1b, cree destinos de montaje en ambas zonas de disponibilidad para el sistema de archivos de EFS que intenta montar. Si no se crean correctamente los destinos de montaje, los pods que se montan en el sistema de archivos de EFS muestran un error similar al siguiente:

Output: Failed to resolve "fs-xxxxxx.efs.us-west-2.amazonaws.com" - check that your file system ID is correct.

Verificar que el grupo de seguridad asociado al sistema de archivos y nodos de trabajo de EFS permite el tráfico NFS

El grupo de seguridad asociado al sistema de archivos de EFS debe contar con una regla de entrada que permita el tráfico NFS (puerto 2049) desde el CIDR para la VPC del clúster.

El grupo de seguridad asociado a los nodos de trabajo en los que los pods no pueden montar el volumen de EFS debe tener una regla de salida que permita el tráfico NFS (puerto 2049) al sistema de archivos de EFS.

Si el grupo de seguridad de los destinos de montaje o los nodos de trabajo de EFS no permite el tráfico NFS, los pods que montan el sistema de archivos de EFS generan los errores siguientes:

"mount.nfs: Connection timed out"
"Unable to attach or mount volumes: timed out waiting for the condition"

Verificar que el subdirectorio se cree en el sistema de archivos de EFS en caso de que monte el pod en un subdirectorio

Cuando se agregan subrutas en volúmenes persistentes, el controlador CSI de EFS no crea la ruta del subdirectorio en el sistema de archivos de EFS como parte de la operación de montaje. Los directorios deben estar ya presentes para que la operación de montaje se realice correctamente. Si la subruta no está presente en el sistema de archivos, se produce el siguiente error en los pods:

Output: mount.nfs4: mounting fs-18xxxxxx.efs.us-east-1.amazonaws.com:/path-in-dir:/ failed, reason given by server: No such file or directory

Confirme que la VPC del clúster utiliza el servidor DNS de Amazon

Cuando se utiliza el controlador CSI de EFS para montar el EFS, el ayudante de montaje de EFS en el controlador CSI de EFS requiere que la VPC utilice el servidor DNS de Amazon para la VPC.

Nota: El DNS del sistema de archivos del servicio de EFS tiene una limitación de arquitectura de AWS. Únicamente el DNS proporcionado por Amazon puede resolver el DNS del sistema de archivos del servicio de EFS.

Inicie sesión en el nodo de trabajo y ejecute el siguiente comando para verificar el servidor de DNS:

nslookup fs-4fxxxxxx.efs.region.amazonaws.com <amazon provided DNS IP>
<amazon provided DNS IP = VPC network(10.0.0.0) range plus two>

Nota: Sustituya región por su región de AWS.

Si la VPC del clúster utiliza un servidor de DNS personalizado, es necesario configurar el servidor de DNS personalizado para que reenvíe todas las solicitudes de *.amazonaws.com al servidor de DNS de Amazon. Si estas solicitudes no se reenvían, se produce un error en los pods similar al siguiente:

Output: Failed to resolve "fs-4 fxxxxxx.efs.us-west-2.amazonaws.com" - check that your file system ID is correct.

Verifique que tiene las opciones de montaje “iam” en la definición del volumen persistente al utilizar una política de sistema de archivos restrictiva

En algunos casos, la política del sistema de archivos EFS está configurada para restringir los permisos de montaje a determinados roles de IAM. Si este es el caso, entonces el ayudante de montaje de EFS en el controlador CSI de EFS requiere que la opción de montaje -o iam pase durante la operación de montaje. Incluya la propiedad spec.mountOptions de modo que el controlador CSI pueda agregar la opción de montaje iam (desde el sitio web de GitHub).

Ejemplo de especificación de PersistentVolume:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: efs-pv1
spec:
  mountOptions:
    - iam
. . . . . .

Si no se agrega la opción de montaje iam cuando se utiliza una política de sistema de archivos restrictiva, se produce un error en los pods similar al siguiente:

mount.nfs4: access denied by server while mounting 127.0.0.1:/

Verificar que la cuenta de servicio del controlador CSI de Amazon EFS se encuentra anotada con el rol de IAM correcto y que el rol de IAM cuenta con los permisos requeridos

Ejecute el siguiente comando para verificar que la cuenta de servicio utilizada por los pods efs-csi-controller tiene la anotación correcta:

kubectl describe sa efs-csi-controller-sa -n kube-system

Compruebe que esté presente la siguiente anotación:

eks\.amazonaws\.com/role-arn"="arn:aws:iam::111122223333:role/AmazonEKS_EFS_CSI_Driver_Policy

Compruebe lo siguiente:

  • Que se haya creado el proveedor OIDC de IAM para el clúster.
  • Que el rol de IAM asociado a la cuenta de servicio efs-csi-controller-sa tiene los permisos necesarios (del sitio web de GitHub) para realizar llamadas a la API de EFS.
  • Que la política de confianza del rol de IAM confía en la cuenta de servicio efs-csi-controller-sa. La política de confianza del rol de IAM debe tener el siguiente aspecto:
{
 "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-controller-sa"
   }
  }
 }]
}

Verificar que los pods del controlador CSI de EFS se encuentren en ejecución

El controlador CSI de EFS está compuesto por pods de controladores que se ejecutan como implementación y pods de nodos que se ejecutan como DaemonSet. Ejecute los siguientes comandos para verificar que estos pods se ejecutan en el clúster:

kubectl get all -l app.kubernetes.io/name=aws-efs-csi-driver -n kube-system

Verifique la operación de montaje de EFS desde el nodo de trabajo de EC2 en el que el pod no puede montar el sistema de archivos

Inicie sesión en el nodo de trabajo de Amazon EKS en el que está programado el pod. A continuación, utilice el ayudante de montaje de EFS para intentar montar manualmente el sistema de archivos de EFS en el nodo de trabajo. Puede ejecutar el siguiente comando para realizar una prueba:

sudo mount -t -efs -o tls file-system-dns-name efs-mount-point/

Si el nodo de trabajo puede montar el sistema de archivos, entonces revise los registros de efs-plugin del controlador de CSI y de los pods de nodos de CSI.

Comprobar los registros del pod del controlador CSI de EFS

Compruebe los registros del pod del controlador de CSI para determinar la causa de los errores que se presentan en el montaje. Si el volumen no se puede montar, revise los registros de efs-plugin. Ejecute los siguientes comandos para recuperar los registros del contenedor efs-plugin:

kubectl logs deployment/efs-csi-controller -n kube-system -c efs-plugin
kubectl logs daemonset/efs-csi-node -n kube-system -c efs-plugin

¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?