Que dois-je savoir sur l'allocation du CPU dans Amazon ECS ?

Date de la dernière mise à jour : 15/04/2022

Je cherche des informations relatives à l'allocation du CPU aux tâches dans Amazon Elastic Container Service (Amazon ECS).

Brève description

Lors de la création d'une définition de tâche, vous pouvez définir des limites pour les ressources CPU. Ces limites peuvent être définies au niveau de la tâche et du conteneur.

Les performances globales de votre cluster Amazon ECS sont affectées en fonction de ces limites. Selon les comportements d'Amazon ECS et votre cas d'utilisation, vous devez ajuster les valeurs d'allocation du CPU au niveau de la tâche et au niveau du conteneur. Utilisez les informations suivantes pour déterminer l'allocation du CPU qui répond aux exigences de votre charge de travail et de votre application.

Solution

Amazon ECS utilise une unité de mesure standard pour les ressources CPU appelée unités de CPU. 1024 unités de CPU sont l'équivalent de 1 vCPU.

Par exemple, 2048 unités de CPU est égal à 2 vCPU.

Remarque : lors de la définition des tâches, vous pouvez également utiliser 1 vCPU au lieu de 1024. Lorsque la définition de tâche est enregistrée, ECS traduit la valeur en unités.

Allocation du CPU au niveau de la tâche

Les tâches Amazon ECS peuvent être exécutées sur des instances AWS Fargate ou Amazon Elastic Compute Cloud (Amazon EC2).

Lorsque vous définissez le paramètre cpu au niveau de la tâche, vous définissez également la quantité maximale de ressources CPU que vos conteneurs dans une tâche sont autorisés à utiliser.

AWS Fargate

AWS Fargate a besoin d'un paramètre cpu au niveau de la tâche pour allouer les ressources demandées à la tâche. Vous pouvez sélectionner la mémoire ainsi que le cpu parmi les tailles de tâches prédéfinies disponibles pour AWS Fargate. Vous pouvez en savoir plus sur les différentes combinaisons dans la section CPU et mémoire au niveau de la tâche du guide du développeur AWS Fargate.

Amazon EC2

Lorsque vous exécutez des tâches sur Amazon EC2, le paramètre cpu est facultatif.

Si vous définissez le paramètre cpu, tenez compte de ce qui suit :

  • Vos conteneurs auront un accès limité en fonction de la quantité du cpu défini.
  • La quantité définie dans votre paramètre cpu devient la réservation de CPU pour la tâche à planifier sur une instance de conteneur.
    Remarque : ceci est également vrai pour la définition au niveau du conteneur.

Par exemple, un paramètre cpu défini sur Amazon EC2 avec la configuration suivante aura 1024 unités de CPU restantes dans son groupe :

  • Une instance EC2 m5.large enregistrée dans un cluster ECS en tant qu'instance de conteneur pour un total de 2048 unités de CPU.
  • Une tâche avec cpu: 1024 au niveau de la tâche définie est en cours d'exécution sur l'instance.
  • La CPUUtilization actuelle de l'instance EC2 est de 68 %.

La CPUUtilization actuelle n'affecte pas le nombre d'unités de CPU disponibles dans l'instance de conteneur pour la planification des tâches. Même si l'instance dépasse 50 % de son utilisation, vous aurez toujours la moitié des unités dans son groupe disponible pour le démarrage de nouvelles tâches. Ceci est dû au fait que le paramètre agit uniquement comme une réservation et une limite du CPU et ne se traduit pas directement par l'utilisation du CPU proprement dite.

Avec cet exemple, il y a plusieurs résultats qui peuvent se produire en prenant uniquement en compte le CPU :

  • Vous pouvez planifier deux autres tâches avec cpu: 512 défini dans les définitions au niveau de la tâche ou du conteneur.
  • Vous pouvez planifier une tâche, avec deux conteneurs, avec cpu: 1024 défini au niveau de la tâche et cpu: 512 défini au niveau du conteneur dans chaque conteneur.
  • Si le cpu n'est pas défini, vous pouvez alors planifier autant de tâches qu'ECS prend en charge pour le mode réseau que vous avez sélectionné. Les unités de CPU disponibles dans votre instance de conteneur ECS pour la planification ne sont pas affectées.

Allocation du CPU au niveau du conteneur

Les définitions de cpu au niveau du conteneur sont prises en compte dans les scénarios suivants :

Au moment de la planification :

  • Lorsque la définition de cpu au niveau de la tâche n'est pas définie, le nombre total d'unités de CPU définies dans vos conteneurs devient la réservation de CPU.
  • Le nombre total d'unités de CPU dans votre définition de cpu au niveau du conteneur ne peut pas être plus grand que les unités de CPU définies lors de votre allocation au niveau de la tâche.

Au moment de l'exécution, et il n'y a pas de contention du CPU :

  • Si la définition de cpu au niveau de la tâche est définie, alors vos conteneurs ont accès uniquement aux ressources cpu jusqu'à la valeur définie de cpu au niveau de la tâche.
  • Si la définition de cpu au niveau de la tâche n'est pas définie, alors les conteneurs de votre tâche ont accès à toutes les ressources CPU disponibles dans votre instance, quelle que soit la définition de cpu définie au niveau du conteneur.
  • Si vous utilisez des tâches Windows et que la définition de cpu au niveau de la tâche n'est pas prise en charge, alors les conteneurs sont toujours plafonnés à la définition de cpu au niveau du conteneur.

La contention du CPU se produit lorsque plusieurs processus demandent du temps cpu. Lorsque la contention du CPU se produit, vos conteneurs sont plafonnés à la quantité de ressources définie sur votre cpu au niveau de la définition du conteneur.

Important : assurez-vous de vérifier si l'application que vous exécutez sur ECS est compatible avec les conteneurs. Certaines applications, telles que Java 10, sont sensibles aux conteneurs et utilisent uniquement les limites définies dans la définition de cpu au niveau du conteneur, qu'il y ait ou non une contention du CPU.

Les définitions de cpu au niveau du conteneur sont mappées directement aux paramètres CpuShares de l'API docker à distance Créer un conteneur.


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


Avez-vous besoin d'aide pour une question technique ou de facturation ?