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?
fonte
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.
fonte
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 ):
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 :
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:
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!
fonte
Eu me inspirei nas respostas aqui para criar https://github.com/ashwanthkumar/matsya
Ajuda você a fazer o seguinte
fonte
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.
fonte