¿Cómo soluciono problemas de creación de un perfil de AWS Fargate?

Última actualización: 04/11/2021

Tengo preguntas sobre la creación de un perfil de AWS Fargate. O bien tengo problemas para crear un perfil de AWS Fargate. ¿Cómo puedo solucionar esto?

Descripción corta

Un perfil de Fargate es un mecanismo para especificar qué pods se deben programar en los nodos de Fargate de un clúster de Amazon Elastic Kubernetes Service (Amazon EKS).

Un perfil de Fargate tiene selectores que se hacen corresponder con cada archivo YAML de especificación de pod entrante. Si la correspondencia se realiza correctamente y se cumplen las consideraciones de AWS Fargate, el pod se programa en los nodos de Fargate mediante subredes y el rol de AWS Identity and Access Management (IAM) especificado en el perfil de Fargate.

Estas son algunas de las reglas de ubicación de los pods:

  • Si ha configurado tanto un espacio de nombres como etiquetas de correspondencia para los selectores del pod:
    El flujo de trabajo de Fargate considera que el pod se corresponde con un perfil de Fargate solo si ambas condiciones (espacio de nombres y etiquetas) se corresponden con la especificación del pod.
  • Si ha especificado varios selectores de pod dentro de un único perfil de Fargate:
    Cuando un pod se corresponde con cualquiera de esos selectores, fargate-scheduler lo programa en un nodo de Fargate mediante los datos del perfil de Fargate coincidente.
  • Si una especificación de pod se corresponde con varios perfiles Fargate:
    El pod se programa según un perfil de Fargate aleatorio, a menos que se haya especificado la siguiente anotación en la especificación del pod: eks.amazonaws.com/fargate-profile:<nombre_pf>.

Tenga en cuenta las siguientes limitaciones al crear un perfil de Fargate:

  • Puede crear hasta diez perfiles de Fargate por clúster.
  • Puede tener hasta cinco selectores por perfil de Fargate.
  • Puede tener hasta cinco pares de etiquetas por selector.

Resolución

Los siguientes son situaciones y problemas que suelen producirse cuando se crea un perfil de Fargate:

¿Cómo puedo crear un perfil de Fargate para programar pods en nodos de Fargate?

Puede utilizar la consola de Amazon EKS, la AWS Command Line Interface (AWS CLI), el SDK o la API (Cloudformation/eksctl, etc.) para crear un perfil de Fargate.

¿Cómo puedo crear un perfil de Fargate mediante AWS CloudFormation?

Puede utilizar el tipo de recurso de CloudFormation AWS::EKS::FargateProfile para crear un perfil de Fargate.

No obstante, si no va a crear grupos de nodos de Amazon Elastic Compute Cloud (Amazon EC2) junto con los nodos de Fargate, los complementos de coredns tienen la siguiente anotación de manera predeterminada:

eks.amazonaws.com/compute-type : ec2

Para cambiar las anotaciones de coredns, debe aplicar un parche a su implementación de manera externa. Puede hacerlo desde el terminal donde administre el clúster de EKS. También puede utilizar un recurso personalizado de CloudFormation para automatizar este proceso en función de su caso de uso.

Nota: Se recomienda utilizar eksctl para crear o actualizar clústeres de EKS, ya que simplifica la administración de los recursos de los clústeres.

¿Cuál es el rol de ejecución de pods que debe incluirse en el perfil de Fargate?

El rol de ejecución de pods es un rol de IAM que el nodo de Fargate utiliza para realizar llamadas a la API de AWS. Entre ellas, se incluyen las llamadas efectuadas para obtener imágenes de Amazon Elastic Container Registry (Amazon ECR), tales como VPC CNI, CoreDNS, etc. Se debe adjuntar la política administrada AmazonEKSFargatePodExecutionRolePolicy a este rol.

En el nodo de Fargate, kubelet utiliza este rol de IAM para comunicarse con el servidor de la API. Este rol debe incluirse en el configmap de aws-auth para que kubelet pueda autenticarse con el servidor de la API. Cuando se crea un perfil de Fargate, el flujo de trabajo de Fargate agrega automáticamente este rol al configmap de aws-auth del clúster.

Si los nodos de Fargate se muestran como no preparados (“Not Ready”), asegúrese de que el rol de ejecución de pods esté incluido en aws-auth.

A continuación se muestra un fragmento de ejemplo de mapRoles de aws-auth después de crear un perfil de Fargate con un rol de ejecución de pods:

mapRoles: |   
    - groups:
      - system:bootstrappers
      - system:nodes
      - system:node-proxier
      rolearn: <Pod_execution_role_ARN>
      username: system:node:{{SessionName}}

Si se modifica el configmap de aws-auth después de crear el perfil de Fargate, es posible que reciba la siguiente advertencia cuando programe pods en los nodos de Fargate:

Pod provisioning timed out (will retry) for pod: <pod_nginx>

Tengo previsto migrar cargas de trabajo a EKS Fargate. ¿Cómo creo subredes y grupos de seguridad para su uso?

Actualmente, EKS Fargate solo admite subredes privadas. Eso significa que no existe una ruta predeterminada a la gateway de Internet dentro de las tablas de enrutamiento adjuntadas a las subredes especificadas en el perfil de Fargate. Por lo tanto, puede configurar bien una gateway NAT o bien puntos de enlace de VPC para las subredes que pretenda utilizar para el perfil de Fargate.

El grupo de seguridad del clúster se adjunta de manera predeterminada a los nodos de Fargate. No es necesario aprovisionar un grupo de seguridad específicamente con este propósito. Además, si utilizar puntos de enlace de VPC para las subredes, asegúrese de que el clúster tenga activado el acceso a puntos de enlace privados.

Asegúrese de que el grupo de seguridad adjuntado a los puntos de enlace de VPC tenga una regla de entrada que permita tráfico en el puerto 443 HTTPS procedente del CIDR de la VPC del clúster.

Estoy creando perfiles de Fargate mediante un aprovisionador basado en API como Terraform o AWS CloudFormation. ¿Por qué mis perfiles de Fargate pasan al estado CREATE_FAILED?

Solo se puede crear o eliminar un perfil de Fargate a la vez. Por lo tanto, si va a eliminar un perfil de Fargate, no se podrán crear ni eliminar otros perfiles de Fargate al mismo tiempo.

Cuando utilice un aprovisionador basado en API, como CloudFormation, asegúrese de que la creación de un perfil de Fargate comience después de que todos los demás perfiles de Fargate se hayan creado correctamente. Puede crear una jerarquía similar a una cadena entre los perfiles de Fargate con el atributo DependsOn para que la creación y la eliminación sean secuenciales. Si las solicitudes no son secuenciales, es posible que reciba un error similar al siguiente:

Cannot create Fargate Profile <fp_name1> because cluster <cluster_name> currently has Fargate profile <fp_name2> in status CREATING

¿Puedo especificar los recursos (CPU, memoria) que se deben aprovisionar para los nodos de Fargate dentro del perfil de Fargate?

No puede especificar directamente la cantidad de recursos que se deben aprovisionar dentro del perfil de Fargate. Se recomienda especificar solicitudes de recursos dentro del archivo YAML de especificación del pod de Fargate. Hacerlo así ayuda a que el flujo de trabajo de Fargate asigne al menos esa cantidad de recursos para el pod.

Es posible que la cantidad de vCPU o memoria que se observa después de ejecutar el comando kubectl describe node <nombre_nodo> no sea la misma que la cantidad de CPU o memoria que haya solicitado para el pod. La cantidad de memoria y CPU que tiene el nodo depende de la capacidad disponible en el grupo de asignación de recursos de Fargate. Se factura de acuerdo con la cantidad que se haya solicitado dentro de la especificación del pod. No se factura la cantidad de recursos visibles con kubectl.

AWS Fargate siempre aprovisiona y factura la CPU y la memoria como combinaciones discretas. El importe facturable incluye el uso por parte de componentes distintos del pod que se esté ejecutando en el nodo, como kubelet, kube-proxy, etc. Por ejemplo, si se solicita una vCPU y ocho GB de memoria para el pod, se facturará la siguiente combinación superior de dos vCPU y nueve GB de memoria. Esto incluye los recursos utilizados por kubelet y otros componentes de Kubernetes del nodo. Para obtener más información, consulte CPU y memoria de los pods.


¿Le ha resultado útil este artículo?


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