Auto-dimensionamento do EC2 com instâncias spot e sob demanda?

11

Pretendo otimizar o custo de nossos grupos EC2 de escala automática, solicitando que eles iniciem instâncias spot em vez de instâncias sob demanda.

O que eu realmente quero é poder manter alguns servidores no grupo como instâncias sob demanda, independentemente do que acontece com o mercado de preços de instâncias spot. Quero que quaisquer servidores adicionais no grupo, acima do mínimo configurado, sejam instâncias pontuais. Geralmente, estou bem com o atraso na adição de servidores por meio de solicitações pontuais.

Não consigo encontrar nenhuma maneira de fazer isso e tentei vasculhar a documentação da AWS. Parece que um ASG pode ser sob demanda ou local, mas não um híbrido.

Eu poderia adicionar manualmente uma instância sob demanda ao Elastic Load Balancer atribuído ao grupo de dimensionamento automático, mas a carga desse servidor não seria levada em consideração nas medidas e acionadores de dimensionamento automático.

Suponho que eu poderia inserir um preço de oferta ridiculamente alto para garantir que eu sempre tenha os servidores de que preciso, mas depois olho para o histórico de preços e vejo grandes picos ocasionais.

A documentação da AWS está em desacordo consigo mesma, pois em um lugar diz que, se você digitar um servidor mínimo, esse número é "garantido" para estar lá. Mas quando você lê sobre instâncias spot, não há garantias. O diferencial de preço do spot é atraente, então eu gostaria de aproveitar o máximo possível, mantendo uma linha de base sempre ativa. Isso é possível?

plataformas
fonte

Respostas:

1

No momento, você pode misturar instâncias ondemand e spot em um único ASG

O Amazon EC2 Auto Scaling agora permite provisionar e dimensionar automaticamente instâncias entre as opções de compra, as Zonas de disponibilidade (AZ) e as famílias de instâncias em um único grupo de Auto Scaling (ASG), para otimizar a escala, o desempenho e o custo. Agora você pode incluir instâncias spot com On Demand e RIs em um único ASG , para economizar até 90% na computação.

ALex_hha
fonte
Sim - obrigado por atualizar esta pergunta. Marquei a sua como a nova resposta canônica para isso.
plataformas
15

A abordagem discutida acima seria um pouco confusa e não tão flexível. A abordagem mais canônica é apenas para criar 2 ASGs (um para local, um para on-demand) e, em seguida, registrá-los ambos com o mesmo ELB (discutido aqui ). Isso permite controlar cada um de forma independente, em vez de tentar mexer com swaps de LC em um único ASG.

rico
fonte
7

Este híbrido Auto Scaling abordagem não parece estar disponível fora da caixa, na verdade, infelizmente.

No entanto, você pode contornar essa limitação da seguinte maneira (não testado, apenas um design de sistema com o qual eu ando manipulando há algum tempo):

Solução potencial

Conforme descrito em Usando o dimensionamento automático para iniciar instâncias spot , o lance de preço spot é um parâmetro da configuração de inicialização em uso. Como você apontou, não há uma configuração de ativação híbrida disponível, ela deve ser sob demanda ou local, o que significa que o caso de uso requer duas configurações de ativação diferentes.

Isso não parece ajudar imediatamente, porque você pode anexar apenas uma configuração de inicialização a um grupo de Auto Scaling de cada vez , com as seguintes restrições (parcialmente desatualizadas) (consulte Configuração de inicialização ):

Quando você anexa uma configuração de inicialização nova ou atualizada ao seu grupo Auto Scaling, qualquer nova instância será iniciada usando os novos parâmetros de configuração. Instâncias existentes não são afetadas . Quando o Auto Scaling precisa diminuir, primeiro termina as instâncias que têm uma configuração de inicialização mais antiga . [ênfase minha]

As partes enfatizadas são fundamentais, com a primeira cobrindo o requisito de manter as instâncias sob demanda em execução após a alteração da respectiva configuração inicial de ativação por demanda para a configuração adicional de ativação local, e a última não sendo mais necessariamente o caso devido a as políticas de terminação automática de dimensionamento introduzidas recentemente (para uma mudança, geralmente não há alarde por meio de uma postagem do blog da AWS), documentadas na Política de encerramento de instância para o seu grupo de dimensionamento automático :

Antes de o Auto Scaling selecionar uma instância para finalizar, ele primeiro identifica a Zona de Disponibilidade que possui mais instâncias que as outras Zonas de Disponibilidade usadas pelo grupo. Se todas as zonas de disponibilidade tiverem o mesmo número de instâncias, ele identificará uma zona de disponibilidade aleatória. Na Zona de disponibilidade identificada, o Auto Scaling usa a política de encerramento para selecionar a instância para encerramento . [ênfase minha]

Conforme descrito em Como sua política de rescisão funciona , agora você pode especificar NewestInstance , se desejar que a última instância iniciada seja encerrada , que seria uma das instâncias spot lançadas mais recentemente:

O Auto Scaling usa o tempo de inicialização da instância para identificar a instância que foi lançada pela última vez.

Obviamente, pode haver um pouco mais disso, por exemplo, você pode especificar qualquer uma das políticas como uma política autônoma ou pode listar várias políticas em uma lista ordenada , mas essa abordagem deve garantir a carga de todas as instâncias sendo fatoradas no medições e gatilhos de escala automática ; uma ressalva permanece:

Embargo

Se o balanceador de carga encerrar uma das instâncias sob demanda por qualquer outro motivo (por exemplo, porque se tornou prejudicial por si só), ele não será substituído automaticamente por uma instância sob demanda. Portanto, você precisa monitorar e contabilizar esse evento separadamente, por exemplo, ativando temporariamente a configuração de inicialização sob demanda novamente.

Boa sorte!

Steffen Opel
fonte
2
Isso faz sentido - um ótimo trabalho de detetive. Ainda há um risco de interrupção, mas parece que você descobriu várias novas maneiras de reduzir esse risco. Esperamos que um dia tenhamos uma caixa de seleção simples para ASGs, "Instâncias abaixo ou abaixo do mínimo do servidor são instâncias sob demanda". Obrigado!
Plataformas
1

Eu me inspirei nas respostas aqui para criar https://github.com/ashwanthkumar/matsya

Ajuda você a fazer o seguinte

  • Você sempre precisa de uma frota de máquinas para os requisitos de cluster Hadoop / Mesos / YARN
  • Você deseja economizar dinheiro usando o Spot, mas também utiliza o OD, porque precisa da capacidade de processamento para atender ao seu SLA
  • Volte ao Spot uma vez no OD para economizar dinheiro novamente.
ashwanthkumar
fonte
1
Por favor, esteja ciente de nossa política de auto-promoção
HBruijn 28/10/2015
A resposta foi compartilhada com boas intenções de que poderia ser útil. Se você achar que é uma autopromoção, posso excluir a resposta.
Ashwanthkumar #
Se eu pensasse que sua resposta é spam real, já a teria marcado como tal, para que você não precise excluir sua postagem. O link de promoção do produto é mais preventivo que, embora essa resposta possa ser valiosa, existe um bom equilíbrio do qual usuários relativamente novos, como você, geralmente não estão cientes. E como moderador prefiro educá-lo agora, antes de atravessar todas as linhas que você nem sabia que existiam (que é um padrão recorrente infeliz)
HBruijn
Faz sentido. Obrigado pelo aviso sobre a política.
ashwanthkumar
1

Caso você queira apenas 1 ASG com número estático de instâncias sob demanda, o seguinte deve funcionar:

  • Crie um grupo de Auto Scaling com base na configuração do Spot Instance Launch.

  • Suspender o dimensionamento automático no ASG

  • Adicione manualmente instâncias sob demanda (carga básica estática) ao ASG e ative a proteção de instância para essas instâncias.

  • Retomar o escalonamento automático em ASG

  • A política de dimensionamento automático padrão agora ignorará as instâncias sob demanda (devido à proteção) e encerrará o mesmo número de instâncias spot que a instância sob demanda para atingir o número desejado do grupo. Quaisquer atividades de expansão ou redução somente iniciarão ou encerrarão instâncias spot.

MaXimus
fonte