Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Augmenter le nombre de tâches ECS par hôte

By Paul O'BrienAug 29, 20243 min read

Cette page est également disponible en English, Deutsch, Español, Italiano, 日本語 et Português.

Vous avez du mal à exécuter plus de quelques tâches par hôte ECS ? Lisez la suite : une solution simple permet d'augmenter considérablement le nombre de tâches ECS exécutables.

Contexte

La configuration par défaut d'ECS sur EC2 limite le nombre de tâches ECS pouvant s'exécuter sur chaque nœud. Cette limite dépend du type d'instance utilisé. Elle s'explique par le fait que chaque tâche nécessite l'attribution d'une Elastic Network Interface (ENI), ce qui plafonne le nombre maximal de tâches par instance.

L'ENI trunking à la rescousse

L'ENI trunking (via le paramètre de compte awsvpcTrunking) permet à un hôte d'exécuter beaucoup plus de tâches. L'ENI principale sert à la communication de l'hôte, tandis que des ENI supplémentaires sont attribuées pour le trunking. Ces ENI supplémentaires sont ajoutées en tant que branch interfaces, dans la limite du nombre maximal autorisé pour le type d'instance concerné.

Prenons un type de nœud très courant : r5.xlarge. Par défaut, il prend en charge trois tâches, mais avec l'ENI trunking activé, ce nombre passe à 20. (Tableau de référence du nombre maximal de tâches par type d'instance.)

Activer le trunking sur un cluster existant

Activer le trunking à la création d'un cluster ECS fonctionne très bien, mais que faire lorsqu'un cluster existe déjà et que vous souhaitez l'activer a posteriori ?

Vérifiez d'abord si le trunking est activé à l'aide de la commande ci-dessous. Vous pouvez l'exécuter dans CloudShell ou via une CLI correctement configurée :

aws ecs list-attributes --target-type container-instance --attribute-name ecs.awsvpc-trunk-id --cluster <Cluster Name> --region <Region>

Si la liste d'attributs renvoyée est vide, c'est que le trunking n'est pas activé sur le cluster en question.

Points à vérifier avant d'activer le trunking

Avant d'activer le trunking, mieux vaut consulter la documentation AWS, qui en précise les limites.

Les principaux points à retenir concernant l'ENI trunking sont les suivants :

  1. Seul le mode réseau awsvpc est pris en charge.
  2. Le type de lancement doit être EC2 (Fargate n'a pas besoin de cette fonctionnalité : une ENI dédiée est attribuée par défaut à chaque tâche).
  3. Les réseaux partagés ne sont pas pris en charge.
  4. Les conteneurs Windows ne sont pas pris en charge.
  5. Le service linked role doit exister (il est créé par défaut lors de la création du cluster ECS).
  6. Les requêtes DNS IPv4 basées sur les ressources (enregistrement A) ne doivent pas être activées (c'est le réglage par défaut à la création des instances EC2).

Passons à l'activation du trunking

Si vous utilisez la console web AWS pour activer le trunking sur un cluster existant, l'interface l'indiquera comme activé, mais vous constaterez probablement que la commande aws ecs list-attributes renvoie un tableau d'attributs vide — preuve qu'il ne l'est pas réellement.

La console AWS indiquant, sans doute à tort, que le trunking est activé

Dans ce cas, vous pouvez activer le trunking pour l'ensemble des clusters du compte en exécutant la commande suivante :

aws ecs put-account-setting-default --name awsvpcTrunking --value enabled --region <Region>

Avec cette méthode, il suffit de définir le paramètre par défaut une seule fois par région pour un compte donné, puisque cette commande modifie la propriété default account setting liée au trunking.

Les nouvelles instances ECS prendront en compte ce changement de configuration ; vous pouvez aussi redémarrer les instances déjà déployées. Avec un autoscaling group, augmentez le nombre d'instances déployées et recyclez les nœuds pour appliquer le changement sans interruption de service.

Pour vérifier que le trunking fonctionne, contrôlez le nombre de tâches par hôte ou réexécutez la commande aws ecs list-attributes. Celle-ci devrait désormais renvoyer la liste des interfaces activées pour le trunking, et non plus un tableau d'attributs vide.

Vous ne connaissez pas encore DoiT ? C'est le moment de nous découvrir. Notre équipe est à votre écoute pour comprendre vos besoins en cloud engineering. Composée exclusivement d'ingénieurs seniors, elle est spécialisée dans le conseil cloud avancé, la conception architecturale et l'aide au debugging. Contactez-nous, échangeons !