Comment résoudre les problèmes liés à la création d'un profil AWS Fargate ?

Date de la dernière mise à jour : 04/11/2021

J'ai des questions concernant la création d'un profil AWS Fargate. Ou : je rencontre des problèmes lors de la création d'un profil AWS Fargate. Comment puis-je résoudre ce problème ?

Brève description

Un profil Fargate est un mécanisme permettant de spécifier quels pods doivent être planifiés sur des nœuds Fargate dans un cluster Amazon Elastic Kubernetes Service (Amazon EKS).

Un profil Fargate possède des sélecteurs qui correspondent à chaque fichier YAML de spécification de pod entrant. Si la correspondance est réussie et que les considérations AWS Fargate sont respectées, le pod est planifié sur les nœuds Fargate à l'aide de sous-réseaux et du rôle AWS Identity and Access Management (IAM) spécifié dans le profil Fargate.

Certaines des règles de placement de pod sont les suivantes :

  • Si vous avez configuré à la fois l'espace de noms et les labels de correspondance pour vos sélecteurs de pod :
    Le flux Fargate considère que votre pod est mis en correspondance avec un profil Fargate uniquement si les deux conditions (espace de noms et labels) correspondent à la spécification du pod.
  • Si vous avez spécifié plusieurs sélecteurs de pod dans un seul profil Fargate :
    Lorsqu'un pod correspond à l'un de ces sélecteurs, il est planifié par le fargate-scheduler sur un nœud Fargate à l'aide des données du profil Fargate correspondant.
  • Si une spécification de pod correspond à plusieurs profils Fargate :
    Le pod est planifié en fonction d'un profil Fargate aléatoire, sauf si l'annotation suivante est spécifiée dans la spécification de l'espace : eks.amazonaws.com/fargate-profile:<fp_name>.

Notez les limites suivantes lors de la création d'un profil Fargate :

  • Vous pouvez créer jusqu'à dix profils Fargate par cluster.
  • Vous pouvez avoir jusqu'à cinq sélecteurs par profil Fargate.
  • Vous pouvez avoir jusqu'à cinq paires de labels par sélecteur.

Solution

Voici des scénarios et des problèmes courants rencontrés lors de la création d'un profil Fargate :

Comment créer un profil Fargate pour planifier des pods sur les nœuds Fargate ?

Vous pouvez utiliser la console Amazon EKS, l'AWS Command Line Interface (AWS CLI), le kit SDK ou l'API (CloudFormation/eksctl, etc.) pour créer un profil Fargate.

Comment créer un profil Fargate à l'aide d'AWS CloudFormation ?

Vous pouvez utiliser le type de ressource CloudFormation AWS::EKS::FargateProfile pour créer un profil Fargate.

Toutefois, si vous ne créez pas de groupes de nœuds Amazon Elastic Compute Cloud (Amazon EC2) avec des nœuds Fargate, les modules complémentaires coredns ont l'annotation suivante par défaut :

eks.amazonaws.com/compute-type : ec2

Pour modifier les annotations coredns, vous devez appliquer des correctifs à votre déploiement en externe. Vous pouvez le faire depuis le terminal sur lequel vous gérez votre cluster EKS. Vous pouvez également utiliser une ressource personnalisée CloudFormation pour automatiser ce processus en fonction de votre cas d'utilisation.

Remarque : Il est recommandé d'utiliser eksctl pour créer/mettre à jour des clusters EKS, car cela simplifie l'administration des ressources du cluster.

Quel est le rôle d'exécution du pod qui doit être inclus dans le profil Fargate ?

Le rôle d'exécution du pod est un rôle IAM utilisé par le nœud Fargate pour effectuer des appels d'API AWS. Il s'agit notamment des appels effectués pour récupérer des images Amazon Elastic Container Registry (Amazon ECR) telles que CNI VPC, CoreDNS, etc. La politique gérée AmazonEKSFargatePodExecutionRolePolicy doit être attachée à ce rôle.

Kubelet sur le nœud Fargate utilise ce rôle IAM pour communiquer avec le serveur d'API. Ce rôle doit être inclus dans la configmap aws-auth pour que kubelet puisse s'authentifier auprès du serveur d'API. Lorsque vous créez un profil Fargate, le flux Fargate ajoute automatiquement ce rôle à la configmap aws-auth du cluster.

Si vos nœuds Fargate indiquent « Non prêt », assurez-vous que le rôle d'exécution du pod est inclus dans aws-auth.

Voici un exemple d'extrait de code de mapRoles aws-auth après avoir créé un profil Fargate avec un rôle d'exécution de pod :

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

Si la configmap aws-auth est modifiée après la création du profil Fargate, vous pouvez recevoir l'avertissement suivant lors de la planification des pods sur les nœuds Fargate :

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

Je prévois de migrer des charges de travail vers EKS Fargate. Comment créer des sous-réseaux et des groupes de sécurité pour une utilisation ?

EKS Fargate ne prend actuellement en charge que les sous-réseaux privés. Cela signifie qu'il n'existe pas de route par défaut vers la passerelle Internet dans les tables de routage associées aux sous-réseaux spécifiés dans votre profil Fargate. Ainsi, vous pouvez configurer une passerelle NAT ou des points de terminaison d'un VPC pour les sous-réseaux que vous souhaitez utiliser pour le profil Fargate.

Le groupe de sécurité du cluster est par défaut attaché aux nœuds Fargate. Vous n'avez pas besoin de mettre en service un groupe de sécurité spécifiquement à cette fin. En outre, si vous utilisez des points de terminaison d'un VPC pour vos sous-réseaux, assurez-vous que l'accès aux points de terminaison privés est activé sur le cluster.

Assurez-vous que le groupe de sécurité attaché aux points de terminaison d'un VPC dispose d'une règle de trafic entrant autorisant le trafic sur le port HTTPS 443 à partir de l'adresse CIDR du VPC du cluster.

Je crée des profils Fargate à l'aide d'un provisionneur basé sur une API tel que Terraform ou AWS CloudFormation. Pourquoi mes profils Fargate entrent-ils dans l'état CREATE_FAILED ?

Un seul profil Fargate peut être créé ou supprimé à la fois. Ainsi, si vous supprimez un profil Fargate, aucun autre profil Fargate ne peut être créé ou supprimé en même temps.

Lorsque vous utilisez un provisionneur basé sur une API, tel que CloudFormation, assurez-vous que la création d'un profil Fargate démarre une fois que tous les autres profils Fargate ont été créés. Vous pouvez créer une hiérarchie de type chaîne parmi les profils Fargate à l'aide de l'attribut DependsOn afin que la création et la suppression soient séquentielles. Si les demandes ne sont pas séquentielles, il se peut que vous receviez une erreur semblable à la suivante :

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

Puis-je spécifier les ressources (CPU, mémoire) à provisionner pour les nœuds Fargate dans le profil Fargate ?

Vous ne pouvez pas spécifier directement la quantité de ressources à provisionner dans le profil Fargate. Il est recommandé de spécifier des demandes de ressources dans le fichier YAML de spécification de votre pod Fargate. Cela permet au flux Fargate d'affecter au moins cette quantité de ressources pour le pod.

La quantité de vCPU ou de mémoire que vous voyez après l'exécution de la commande kubectl describe node <node_name> peut ne pas être la même que la quantité de CPU ou de mémoire que vous avez demandée pour le pod. La quantité de mémoire et de CPU dont dispose le nœud dépend de la capacité disponible dans le pool d'allocation de ressources Fargate. Vous êtes facturé en fonction du montant que vous avez demandé dans le cadre des spécifications de votre pod. La quantité de ressources visibles avec kubectl ne vous est pas facturée.

Le processeur et la mémoire sont toujours provisionnés et facturés par AWS Fargate en tant que combinaisons discrètes. Le montant facturable inclut l'utilisation par des composants autres que le pod exécuté sur le nœud, tels que kubelet, kube-proxy, etc. Par exemple, si vous demandez un vCPU et huit Go de mémoire pour votre pod, vous êtes facturé pour la combinaison supérieure suivante de deux vCPU et neuf Go de mémoire. Cela tient compte des ressources utilisées par kubelet et les autres composants Kubernetes sur le nœud. Pour plus d'informations, consultez la section Processeur et mémoire du pod.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?