0

J'ai un cluster ECS constitué d'instances de conteneur de type d'instance A, disons son t2.small. Le cluster est constitué de plusieurs machines exécutant plusieurs services. Maintenant, je suis sur le point d'avoir une nouvelle tâche/tâche (appelons-la "GreatRequirements") qui nécessitera beaucoup plus de cpu/mémoire que tous les autres services/tâches. Je voudrais être capable de démarrer 1 grande machine (Appelons-la "LargeMachine") pour le cluster, que les autres tâches ne seront jamais placées, de sorte que cette machine dans le cluster est toujours disponible pour mon service "GreatRequirements".Comment empêcher le démarrage des tâches sur une instance de conteneur donnée

Est-il possible que je puisse empêcher tous les autres services/tâches que "GreatRequirements" d'être programmés sur cette machine, autre que faire des contraintes de palgement sur TOUS les autres services/tâches qui le font? Essentiellement, je veux prévenir Formulaire ECS en plaçant d'autres services/tâches sur le "LargeMachine", de sorte que je ne finisse pas dans une situation où un tas de petits services/tâches empêche mon service "GreatRequirements" de démarrer une tâche parce qu'il ne peut pas trouver une machine avec mémoire

Merci

Répondre

0

Vous pouvez utiliser la stratégie/contrainte de placement des tâches.

Par exemple, il y a intégré des attributs tels que:

  1. ecs.availability zone (par exemple, eu-ouest-1a)
  2. de type ecs.instance (par exemple t2.small)
  3. ecs.ami-id (ami-xxxxxx)
  4. ecs.os type (par exemple linux)

Dans la définition de votre tâche (section de placement de tâches), vous pouvez avoir la contrainte comme: attribute:ecs.instance-type == t2.medium et cette tâche sera toujours exécutée sur un t2.medium

Dans votre cas, je préfère utiliser une balise personnalisée sur mes instances de conteneur ECS `(Cluster -> choisissez le cluster -> instances ECS -> sélectionnez le EC2 -> Cliquez sur action -> cliquez sur Afficher/Modifier les attributs et Ajouter un attribut personnalisé comme nom = UnNom, Valeur = GreatRequirements.``

et dans la définition de votre tâche en tant que contrainte, vous pouvez avoir: attribute:SomeName == GreatRequirements et que cela fonctionnera toujours sur cet ec2 avec cet attribut personnalisé `` attribute: SomeName! = GreatRequirements` et cette tâche ne sera jamais exécutée sur cette instance ec2 avec cet attribut personnalisé

Et pour plus d'opération sur ces attributs, veuillez vérifier ceci Operation on attributes

Espérons que cette aide.

+0

Mais cela n'empêchera pas d'autres tâches d'être planifiées pour s'exécuter sur "LargeMachine", et je peux toujours finir dans un scénario où cette machine n'aura pas la CPU/mémoire suffisante disponible? –

+0

La solution d'empêcher d'autres tâches: Vous pouvez avoir toutes ces autres tâches ayant une contrainte, par exemple 'attribute: ecs.instance-type == t2.small' qui les empêchera de fonctionner sur la grosse machine ou vous pouvez diviser votre cluster en 2 clusters (un pour les tâches ordinaires et un autre pour GreatRequirements). Dans le nouveau cluster, vous aurez la grosse machine et planifiez votre tâche (GreatRequirements) à exécuter sur cette machine – Gigapalmer

+0

Dans ce cas, je devrais configurer des contraintes pour tous les autres services/tâches, ce que je voulais omettre. Je ne pense pas qu'il existe vraiment une bonne solution pour cela, autre que de changer le type d'instance pour toutes les instances, pour un type capable de gérer le service avec "GreatRequirements" - et de détecter quand un service ne peut pas programmer une tâche CPU/mémoire, et mettre à l'échelle des instances supplémentaires dans le cluster en fonction de cela. Par ailleurs, Gigapalmer :-) –

0

Je ne pense pas qu'il existe vraiment une bonne solution pour cela, autre que de changer le type d'instance pour toutes les instances, à un type qui peut gérer le service avec "GreatRequirements" - et de détecter quand un service ne peut pas programmer tâche en raison de CPU/mémoire insuffisante, et mettre à l'échelle des instances supplémentaires dans le cluster en fonction de cela.