Auto-scaling EC2 avec des instances Spot et On-Demand?

11

Je cherche à optimiser le coût de nos groupes EC2 à mise à l'échelle automatique en leur faisant lancer des instances ponctuelles au lieu d'instances à la demande.

Ce que je veux vraiment, c'est pouvoir conserver certains serveurs dans le groupe en tant qu'instances à la demande, indépendamment de ce qui se passe sur le marché de la tarification des instances spot. Ensuite, je veux que tous les serveurs supplémentaires du groupe, au-dessus de mon minimum configuré, soient des instances ponctuelles. Je suis généralement d'accord avec le retard dans l'ajout de serveurs via des demandes ponctuelles.

Je n'arrive pas à trouver un moyen de le faire et j'ai essayé de parcourir la documentation AWS. Il semble qu'un ASG puisse être à la demande ou sur place, mais pas hybride.

Je pourrais éventuellement ajouter manuellement une instance à la demande à l'Elastic Load Balancer affecté au groupe de mise à l'échelle automatique, mais la charge de ce serveur ne serait pas prise en compte dans les mesures et déclencheurs de mise à l'échelle automatique.

Je suppose que je pourrais entrer un prix d'offre ridiculement élevé afin de m'assurer d'avoir toujours les serveurs dont j'ai besoin, mais ensuite je regarde l'historique des prix et je vois des pics importants occasionnels.

La documentation AWS est en contradiction avec elle-même, car à un endroit, il est dit que si vous entrez un minimum de serveur, ce nombre est "garanti" pour être là. Mais quand vous lisez des exemples ponctuels, il n'y a aucune assurance. Le différentiel de prix pour le spot est convaincant, je voudrais donc en tirer parti autant que possible tout en maintenant une base de référence toujours active. Est-ce possible?

plateformes
la source

Réponses:

1

Pour le moment, vous pouvez mélanger des instances sur demande et ponctuelles sur un seul ASG

Amazon EC2 Auto Scaling vous permet désormais de provisionner et de faire évoluer automatiquement les instances entre les options d'achat, les zones de disponibilité (AZ) et les familles d'instances dans un seul groupe Auto Scaling (ASG), pour optimiser l'échelle, les performances et les coûts. Désormais, vous pouvez inclure des instances ponctuelles à la demande et des RI dans un seul ASG , pour économiser jusqu'à 90% sur le calcul.

ALex_hha
la source
Oui - merci d'avoir mis à jour cette question. J'ai marqué la vôtre comme la nouvelle réponse canonique à cela.
plateformes
15

L'approche discutée ci-dessus serait un peu désordonnée et pas si flexible. L'approche la plus canonique consiste à simplement créer 2 ASG (un pour spot, un pour à la demande), puis les enregistrer tous les deux avec le même ELB (discuté ici ). Cela vous donne la possibilité de contrôler chacun indépendamment plutôt que d'essayer de muck avec des swaps LC dans un seul ASG.

riches
la source
7

Cette approche hybride Auto Scaling ne semble pas être disponible dès le départ, malheureusement.

Cependant, vous pouvez peut-être contourner cette limitation comme suit (non testé, juste une conception de système que je jongle depuis un certain temps):

Solution de contournement potentielle

Comme indiqué dans Utilisation de la mise à l'échelle automatique pour lancer des instances ponctuelles, l'offre de prix au comptant est un paramètre de la configuration de lancement utilisée. Comme vous l'avez souligné, aucune configuration de lancement hybride n'est disponible, elle doit plutôt être à la demande ou sur place, ce qui signifie que le cas d'utilisation nécessite deux configurations de lancement différentes.

Cela ne semble pas aider immédiatement, car vous ne pouvez attacher qu'une seule configuration de lancement à un groupe Auto Scaling à la fois , avec les contraintes suivantes (partiellement obsolètes) (voir Configuration de lancement ):

Lorsque vous attachez une configuration de lancement nouvelle ou mise à jour à votre groupe Auto Scaling, toute nouvelle instance sera lancée à l'aide des nouveaux paramètres de configuration. Les instances existantes ne sont pas affectées . Lorsque Auto Scaling doit être réduit, il met d'abord fin aux instances qui ont une configuration de lancement plus ancienne . [c'est moi qui souligne]

Les parties soulignées sont cependant essentielles, la première couvrant l'exigence de maintenir les instances à la demande en cours d'exécution après le passage de la configuration de lancement à la demande initiale respective à la configuration de lancement supplémentaire, et la seconde n'étant plus nécessairement le cas en raison de les politiques de terminaison Auto Scaling récemment introduites (pour un changement, il n'y a généralement pas eu de fanfare via un article de blog AWS), documentées dans la politique de terminaison d'instance pour votre groupe Auto Scaling :

Avant que Auto Scaling sélectionne une instance à terminer, il identifie d'abord la zone de disponibilité qui a plus d'instances que les autres zones de disponibilité utilisées par le groupe. Si toutes les zones de disponibilité ont le même nombre d'instances, il identifie une zone de disponibilité aléatoire. Dans la zone de disponibilité identifiée, Auto Scaling utilise la stratégie de résiliation pour sélectionner l'instance à résilier . [c'est moi qui souligne]

Comme il est indiqué dans Comment votre résiliation Policy Works , vous pouvez maintenant spécifier NewestInstance , si vous voulez la dernière instance lancée à fin , ce qui serait l' un des cas ponctuels , plus récemment lancé:

Auto Scaling utilise l'heure de lancement de l'instance pour identifier l'instance qui a été lancée en dernier.

Évidemment, il peut y avoir un peu plus à cela, par exemple, vous pouvez spécifier l'une des politiques en tant que politique autonome, ou vous pouvez répertorier plusieurs politiques dans une liste ordonnée , mais cette approche devrait garantir la charge de toutes les instances prises en compte dans le mesures et déclencheurs à mise à l'échelle automatique ; une mise en garde demeure cependant:

Caveat

Si l'équilibreur de charge met fin à l'une des instances à la demande pour toute autre raison (par exemple, parce qu'elle est devenue malsaine en soi), elle ne sera pas remplacée automatiquement par une instance à la demande. Vous devez donc surveiller et tenir compte de cet événement séparément, par exemple en réactivant temporairement la configuration de lancement à la demande.

Bonne chance!

Steffen Opel
la source
2
Cela a du sens - un excellent travail de détective. Il existe toujours un risque de panne, mais il semble que vous ayez découvert plusieurs nouvelles façons de réduire ce risque. Avec un peu de chance, nous aurons un jour une case à cocher simple pour les ASG, "Les instances au niveau ou en dessous du minimum du serveur sont des instances à la demande." Merci!
plateformes
1

Je me suis inspiré des réponses ici pour arriver à https://github.com/ashwanthkumar/matsya

Il vous aide à faire ce qui suit

  • Vous avez toujours besoin d'un parc de machines pour vos besoins en cluster Hadoop / Mesos / YARN
  • Vous voulez économiser de l'argent en utilisant Spot, mais aussi revenir en OD car vous avez besoin de la puissance de traitement pour respecter votre SLA
  • Revenez à Spot une fois sur OD pour économiser à nouveau.
ashwanthkumar
la source
1
S'il vous plaît être conscient de notre politique sur l' auto-promotion
HBruijn
La réponse a été partagée avec de bonnes intentions qu'elle pourrait être utile. Si vous le trouvez comme une auto-promotion, je peux supprimer la réponse.
ashwanthkumar du
Si j'avais pensé que votre réponse était du spam, je l'aurais déjà marqué comme tel, vous n'avez donc pas besoin de supprimer votre message. Le lien de promotion des produits est plus préventif que bien qu'une telle réponse puisse être utile, il existe un équilibre fin que les utilisateurs relativement nouveaux comme vous ne connaissent souvent pas. Et en tant que modérateur, je préfère vous éduquer maintenant, avant de franchir des lignes que vous ne connaissiez pas (ce qui est un motif récurrent malheureux)
HBruijn
Logique. Merci pour les informations sur la politique.
ashwanthkumar
1

Dans le cas où vous souhaitez uniquement 1 ASG avec un nombre statique d'instances à la demande, les éléments suivants devraient fonctionner:

  • Créez un groupe Auto Scaling basé sur la configuration de lancement d'instance ponctuelle.

  • Suspendre la mise à l'échelle automatique sur ASG

  • Ajoutez manuellement des instances à la demande (charge de base statique) à ASG et activez la protection d'instance pour ces instances.

  • Reprendre la mise à l'échelle automatique sur ASG

  • La stratégie de mise à l'échelle automatique par défaut ignorera désormais les instances à la demande (en raison de la protection) et mettra fin au même nombre d'instances ponctuelles que l'instance à la demande pour atteindre le nombre souhaité du groupe. Toute activité de montée en puissance ou de sortie ne lancera ou mettra fin qu'aux instances ponctuelles.

MaXimus
la source