¿Cómo soluciono los problemas con el montaje de mis volúmenes de Amazon EFS en Amazon EKS?

8 minutos de lectura
0

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

Solución

Al montar el volumen de Amazon EFS en el clúster de Amazon EKS, es posible que aparezca uno de los siguientes errores en los pods:

  • "Output: mount.nfs4: mounting fs-18xxxxxx.efs.us-east-1.amazonaws.com:/path-in-dir:/ failed, reason given by server: No existe ese archivo o directorio"

  • "Output: Failed to resolve “fs-xxxxxx.efs.us-west-2.amazonaws.com” - check that your file system ID is correct” (Salida: error al resolver “fs-xxxxxx.efs.us-west-2.amazonaws.com”: compruebe que el ID de su sistema de archivos sea correcto)

  • “mount.nfs4: access denied by server while mounting 127.0.0.1:/” (mount.nfs4: acceso denegado por el servidor durante el montaje de 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 del estado)

Antes de comenzar los pasos de solución de problemas, compruebe que cumple los siguientes requisitos previos:

Compruebe que los destinos de montaje estén configurados correctamente

Asegúrese de crear los destinos de montaje de EFS en cada zona de disponibilidad en la que se ejecuten los nodos de EKS. Por ejemplo, suponga que los nodos de trabajo están repartidos entre us-east-1a y us-east-1b. En este caso, cree destinos de montaje en ambas zonas de disponibilidad para el sistema de archivos EFS que desee montar. Si no crea correctamente los destinos de montaje, los pods que monten el sistema de archivos EFS devolverán un error similar al siguiente mensaje:

"Output: Failed to resolve “fs-xxxxxx.efs.us-west-2.amazonaws.com” - check that your file system ID is correct” (Salida: error al resolver “fs-xxxxxx.efs.us-west-2.amazonaws.com”: compruebe que el ID de su sistema de archivos sea correcto).

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

El grupo de seguridad del sistema de archivos de EFS tiene que tener una regla de entrada que permita el tráfico NFS del CIDR a la VPC del clúster. Permita el puerto 2049 para el tráfico entrante.

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. Específicamente, esta regla de salida debe permitir el tráfico NFS (puerto 2049) al sistema de archivos de EFS.

Si el grupo de seguridad no permite el tráfico NFS, los pods que montan el sistema de archivos devuelven los siguientes errores:

  • “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 del estado)

Si va a montar el pod en un subdirectorio, compruebe que este esté creado en el sistema de archivos de EFS

Al añadir subrutas en volúmenes persistentes, el controlador CSI de EFS no crea la ruta del subdirectorio en el sistema de archivos. Los directorios ya deben estar presentes para que la operación de montaje se lleve a cabo de manera correcta. Si la subruta no está presente en el sistema de archivos, los pods producirán el siguiente error:

"Output: mount.nfs4: mounting fs-18xxxxxx.efs.us-east-1.amazonaws.com:/path-in-dir:/ failed, reason given by server: No existe ese archivo o directorio"

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

Al montar el EFS con el controlador CSI de EFS, el asistente de montaje necesita que utilice el servidor DNS de Amazon para la VPC.

**Nota:**El DNS del sistema de archivos del servicio EFS tiene una limitación arquitectónica de AWS. Solo el DNS proporcionado por Amazon puede resolver el DNS del sistema de archivos del servicio EFS.

Para comprobar el servidor DNS, inicie sesión en el nodo de trabajo y ejecute el siguiente comando:

nslookup fs-4fxxxxxx.efs.region.amazonaws.com AMAZON\_PROVIDED\_DNS\_IP

**Nota:**Sustituya la región por su región de AWS. Sustituya AMAZON_PROVIDED_DNS_IP por su dirección IP de DNS. De forma predeterminada, este es el rango de redes de VPC (10.0.0.0) más dos.

Si la VPC del clúster usa un servidor DNS personalizado, configure este último para reenviar todas las solicitudes de *.amazonaws.com al servidor DNS de Amazon. Si estas solicitudes no se reenvían, los pods producirán un error y muestran un mensaje similar al siguiente:

"Output: Failed to resolve “fs-4 fxxxxxx.efs.us-west-2.amazonaws.com” - check that your file system ID is correct” (Salida: error al resolver “fs-4 fxxxxxx.efs.us-west-2.amazonaws.com”: compruebe que el ID de su sistema de archivos sea correcto).

Compruebe que dispone de las opciones de montaje “iam” en la definición de volumen persistente cuando utilice una política de sistema de archivos restrictiva.

En algunos casos, la política del sistema de archivos de EFS está configurada para restringir los permisos de montaje a roles de IAM específicos. En este caso, el asistente de montaje de EFS requiere que la opción de montaje -o iam pase durante la operación. Incluya la propiedad spec.mountOptions para permitir que el controlador CSI añada la opción de montaje de iam (del sitio web de GitHub).

El siguiente ejemplo es una especificación de PersistentVolume:

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

Si no añade la opción de montaje de iam con una política de sistema de archivos restrictiva, los pods tendrán errores y mostrarán un mensaje similar al siguiente:

“mount.nfs4: access denied by server while mounting 127.0.0.1:/” (mount.nfs4: acceso denegado por el servidor durante el montaje de 127.0.0.1:/)

Compruebe que la cuenta de servicio del controlador CSI de Amazon EFS esté anotada con el rol de IAM correcto y que este tenga los permisos necesarios

Para comprobar que la cuenta de servicio que utilizan los pods de efs-csi-controller tiene la anotación correcta, ejecute el siguiente comando:

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

Compruebe que hizo los pasos siguientes:

  • Creó el proveedor OIDC de IAM del clúster.
  • 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.
  • 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 un aspecto similar al siguiente ejemplo:
{
	"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"
			}
		}
	}\]
}

Compruebe que los pods del controlador CSI de EFS estén en ejecución

El controlador CSI de EFS se compone de pods de controlador que se ejecutan como un despliegue y pods de nodos que se ejecutan como DaemonSet. Para comprobar que estos pods están en ejecución en el clúster, ejecute el siguiente comando:

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

Compruebe 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 donde está programado el pod. A continuación, utilice el asistente de montaje de EFS para intentar montar de forma manual el sistema de archivos de EFS en el nodo de trabajo. Para probar la operación de montaje, ejecute el siguiente comando:

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

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

Compruebe los registros del pod del controlador CSI de EFS

Consulte los registros del pod del controlador CSI para determinar la causa de los errores de montaje. Si el volumen no se monta, revise los registros de efs-plugin. Para recuperar los registros del contenedor de efs-plugin, ejecute los siguientes comandos:

kubectl logs deployment/efs-csi-controller -n kube-system -c efs-plugin
kubectl logs daemonset/efs-csi-node -n kube-system -c efs-plugin
OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año