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

8 minutos de lectura
0

Quiero montar los volúmenes de Amazon Elastic Block Store (Amazon EBS) en el clúster de Amazon Elastic Kubernetes Service (Amazon EKS). Sin embargo, aparece el mensaje de error «Timeout expired waiting for volumes to attach or mount for pod» (Se ha agotado el tiempo de espera para que los volúmenes se adjunten o monten para el pod).

Resolución de problemas

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

  • Los permisos de AWS Identity and Access Management (IAM) necesarios para el rol de IAM de la cuenta de servicio ebs-csi-controller-sa.
    Nota: Para resolver los problemas de la cuenta de servicio, consulte la sección Comprobar el rol de IAM de la cuenta de servicio de controlador del driver de la CSI de Amazon EBS y los permisos del rol.
  • Una PersistentVolumeClaim (reclamación de volúmenes persistente) (PVC) válida (en el sitio web de GitHub) en el mismo espacio para nombres que el pod.
  • Una definición de clase de almacenamiento de EBS válida que utilice el aprovisionador integrado en árbol kubernetes.io/aws-ebs (en el sitio web de Kubernetes). O bien, una definición de clase de almacenamiento que utilice el aprovisionador ebs.csi.aws.com (en el sitio web de GitHub) del driver de la interfaz de almacenamiento de contenedores (CSI) de EBS.

Comprobar que el controlador del driver de la CSI de Amazon EBS y los pods de nodos están ejecutándose

El driver de la CSI de EBS consta de pods de controlador que se ejecutan como un despliegue y de pods de nodos que se ejecutan como un conjunto de daemon. Para comprobar si el clúster ejecuta estos pods, ejecute el siguiente comando:

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

Nota: Los nodos de trabajo de Windows y AWS Fargate no admiten el driver de la CSI de EBS.

Asegúrese de que la versión instalada del driver de la CSI de EBS sea compatible con la versión de Kubernetes del clúster (en el sitio web de GitHub).

Comprobar si la PVC ha tenido problemas al vincularse al volumen persistente de EBS

Para comprobar si la PVC tiene problemas, ejecute el siguiente comando para visualizar los eventos. En el siguiente comando de ejemplo, sustituya PVC_NAME y NAMESPACE por los valores correctos del entorno:

kubectl describe pvc PVC_NAME -n NAMESPACE

Si utiliza el aprovisionamiento dinámico de volúmenes, revise los eventos devueltos para determinar si el aprovisionamiento de los volúmenes se ha realizado correctamente o incorrectamente. También se puede ver el nombre del volumen persistente correspondiente al que está enlazada la PVC, como se muestra en el siguiente ejemplo:

Name:          ebs-claim
Namespace:     default
StorageClass:  ebs-sc
Status:        Bound
Volume:        pvc-5cbd76de-6f15-41e4-9948-2bba2574e205
Annotations:   pv.kubernetes.io/bind-completed: yes
               pv.kubernetes.io/bound-by-controller: yes
               volume.beta.kubernetes.io/storage-provisioner: ebs.csi.aws.com
               volume.kubernetes.io/selected-node: ip-10-0-2-57.ec2.internal
. . . . .
. . . . .
Events:
  Type    Reason                 Age                    From                                                                                      Message
  ----    ------                 ----                   ----                                                                                      -------
. . . . .
  Normal  Provisioning           5m22s                  ebs.csi.aws.com_ebs-csi-controller-57d4cbb9cc-dr9cd_8f0373e8-4e58-4dd0-b83c-da6f9ad5d5ce  External provisioner is provisioning volume for claim "default/ebs-claim"
  Normal  ProvisioningSucceeded  5m18s                  ebs.csi.aws.com_ebs-csi-controller-57d4cbb9cc-dr9cd_8f0373e8-4e58-4dd0-b83c-da6f9ad5d5ce  Successfully provisioned volume pvc-5cbd76de-6f15-41e4-9948-2bba2574e205

Si el aprovisionamiento se ha realizado incorrectamente, busque el mensaje de error en los eventos.

Revisar los registros de los pods del driver de la CSI de Amazon EBS

Para ver la causa de los errores de montaje, compruebe los registros del pod del controlador. Si el volumen falla durante la creación, consulte los registros de ebs-plugin y csi-provisioner. Para recuperar los registros del contenedor de efs-plugin, ejecute los siguientes comandos:

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

Para recuperar los registros del contenedor de csi-provisioner, ejecute el siguiente comando:

kubectl logs deployment/ebs-csi-controller -n kube-system -c csi-provisioner

Si los volúmenes de EBS no se adjuntan al pod, revise los registros de csi-attacher. Para recuperar los registros del contenedor de csi-attacher, ejecute el siguiente comando:

kubectl logs deployment/ebs-csi-controller -n kube-system -c csi-attacher

Comprobación del rol de IAM de la cuenta de servicio de controlador del driver de la CSI de Amazon EBS y los permisos del rol

Nota: Para aumentar la eficiencia de la depuración del driver de la CSI de EBS, configure las opciones de registro de depuración (en el sitio web de GitHub).

Asegúrese de que la cuenta de servicio del driver de la CSI de EBS esté anotada con el rol de IAM correcto. Además, asegúrese de que el rol de IAM tenga los permisos necesarios.

Los siguientes problemas provocan errores no autorizados en los eventos de la PVC o en los registros de ebs-csi-controller:

  1. Para determinar si la cuenta de servicio de los pods de ebs-csi-controller tiene la anotación correcta, ejecute el siguiente comando:
kubectl describe sa ebs-csi-controller-sa -n kube-system
  1. Compruebe que esté presente la siguiente anotación:
eks.amazonaws.com/role-arn: arn:aws:iam::111122223333:role/AmazonEKS_EBS_CSI_DriverRole
  1. Compruebe que ha creado el proveedor IAM OpenID Connect (OIDC) para el clúster. Además, compruebe que el rol de IAM tenga los permisos necesarios para realizar llamadas a la API de EBS. Asegúrese de que la política de confianza del rol de IAM confíe en la cuenta de servicio ebs-csi-controller-sa.

  2. Compruebe que AWS CloudTrail realice las llamadas: CreateVolume, AttachVolume y DetachVolume. Para ello, revise los registros de CloudTrail. Además, revise los registros para determinar qué entidad principal realiza las llamadas. Esto le ayudará a determinar si el rol de IAM del controlador o del nodo de trabajo utiliza el rol de IAM de la cuenta de servicio.

Verificar la afinidad de los nodos del volumen persistente

Cada volumen persistente tiene una afinidad de nodos que limita la conexión de los volúmenes persistentes a los nodos de una única zona de disponibilidad. Esto se debe a que solamente se pueden adjuntar volúmenes de EBS a los pods o nodos que se ejecuten en la misma zona de disponibilidad en la que se crearon. Si los pods programados para los nodos de una zona de disponibilidad utilizan el volumen persistente de EBS en una zona de disponibilidad diferente, recibirá este error:

«FailedScheduling: 1 nodo(s) tuvo conflicto de afinidad de nodo de volumen»

Para evitarlo, utilice StatefulSets (en el sitio web de Kubernetes) en lugar de despliegue. Esto creará un volumen de EBS único para cada pod de StatefulSets en la misma zona de disponibilidad que el pod.

Para comprobar la afinidad de los nodos del volumen persistente, ejecute el siguiente comando. Sustituya PERSISTENT_VOLUME_NAME por el nombre del volumen:

kubectl describe pv PERSISTENT_VOLUME_NAME

Nota: No puede montar un volumen de EBS en dos pods diferentes que se ejecuten en dos nodos de trabajo diferentes. Se puede adjuntar el volumen de EBS a los pods que se ejecutan en un solo nodo, pero no se puede adjuntar a otro nodo al mismo tiempo. Si intenta adjuntar el volumen de EBS a dos pods de nodos de trabajo diferentes, el pod fallará y recibirá este error:

«Warning FailedAttachVolume 2m38s attachdetach-controller Multi-Attach error for volume «pvc-1cccsdfdc8-fsdf6-43d6-a1a9-ea837hf7h57fa» El volumen ya está adjuntado exclusivamente a un nodo y no se puede adjuntar a otro»

Asegúrese de que los pods de los controladores de EBS estén conectados a la API de Amazon Elastic Compute Cloud (Amazon EC2)

Si ve errores relacionados con los tiempos de espera de la conexión en los registros de ebs-csi-controller, es posible que el controlador de la CSI de EBS no esté conectado a la API de Amazon EC2. Si los módulos del controlador tienen problemas de conectividad al crear la PVC, aparecerá este error:

«Warning ProvisioningFailed persistentvolumeclaim/storage-volume-1 failed to provision volume with StorageClass «ebs-sc»: rpc error: code = DeadlineExceeded desc = context deadline exceeded»

Para resolver este error, compruebe que las subredes de los pods del controlador de EBS estén conectadas a la API de EC2. Si ejecuta un clúster privado con un proxy HTTP/HTTPS, compruebe que los pods del controlador de la CSI de EBS puedan utilizar el proxy HTTP/HTTPS. La instalación del helm (gestor de paquetes) del driver de la CSI de EBS admite la configuración de un proxy HTTP/HTTPS (en el sitio web de Kubernetes).

Este mensaje también podría estar relacionado con un problema existente en el OIDC. Para solucionar los problemas del OIDC, consulte ¿Cómo puedo solucionar los problemas de un proveedor de OIDC y una función IRSA en Amazon EKS?

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año