Um node pool de spot instance contém uma combinação de spot instances e instâncias com pagamento conforme o uso em uma proporção específica para reduzir custos. Este tópico apresenta o conceito e os casos de uso de node pools de spot instance, além de descrever como configure uma combinação de instâncias, defina a proporção de spot instances em relação a instâncias com pagamento conforme o uso, verificar o status de expiração de spot instances e tratar graciosamente a expiração de spot instances.
Visão geral
Spot instances utilizam o modelo de faturamento com pagamento conforme o uso, no qual você paga pelos recursos após utilizá-los. O custo é calculado com base no preço de mercado e na duração do uso.
Uma spot instance é um tipo especial de instância com pagamento conforme o uso cujo preço varia de acordo com a oferta e a demanda. Elas oferecem economias significativas, reduzindo os custos dos nós em até 90% em comparação com instâncias comuns com pagamento conforme o uso. Ao crie uma spot instance, especifique um modo de licitação. Se o preço de mercado em tempo real para o tipo de instância especificado estiver abaixo do seu lance e houver estoque suficiente, a spot instance será criada com sucesso.
Após a criação, uma spot instance funciona como uma instância padrão com pagamento conforme o uso. Use-a com outros produtos cloud, como discos em nuvem e elastic IP addresses (EIPs). As spot instances têm um período de proteção padrão de uma hora. Após esse período, o sistema verifica o preço de mercado em tempo real e o estoque a cada cinco minutos. Se o preço de mercado ultrapassar o seu lance ou o estoque for insuficiente, a spot instance será liberada.
Casos de uso
-
Node pools de spot instance
Como as spot instances em um node pool podem ser recuperadas com pouco aviso prévio, elas são mais indicadas para aplicações sem estado e tolerantes a falhas. Isso inclui processamento em lote, cargas de trabalho de treinamento de machine learning, ETL de big data (como Apache Spark), aplicações de processamento de filas e aplicações de API sem estado.
Para aplicações que não toleram esse tipo de interrupção, use node pools com instâncias de pagamento conforme o uso ou de assinatura. Essas cargas de trabalho incluem:
Ferramentas de gerenciamento de cluster, como ferramentas de monitoramento e operações.
Deployments ou aplicações que exigem cargas de trabalho com estado, como bancos de dados.
-
Node pools de spot instance com Auto Scaling
Se sua carga de trabalho for adequada para um node pool de spot instance e tiver períodos de pico e de baixa demanda bem definidos, considere usar um node pool de spot instance com Auto Scaling ativado.
Com o Auto Scaling ativado, o cluster autoscaler verifica se o node pool de spot instance precisa ser expandido para implantar Pods e reduz automaticamente quando os nós atingem os critérios de redução. Um node pool de spot instance com Auto Scaling ativado escala horizontalmente com mais rapidez e libera recursos ociosos de forma mais eficiente. A capacidade de adicionar instâncias rapidamente ajuda a compensar a recuperação passiva de spot instances e potencializa as economias de custo ao liberar recursos ociosos.
Selecionar e configure uma combinação de spot instances
Não existe uma solução única para a seleção de tipos de instância. Escolha uma configuração que equilibre da melhor forma o estoque, o custo e o desempenho para as necessidades do seu negócio. O Alibaba Cloud ECS oferece uma ampla variedade de tipos de instância. O primeiro passo para usar efetivamente um node pool de spot instance é selecione uma combinação de instâncias que minimize o impacto potencial nos negócios, especialmente em um cenário de licitação.
Use os métodos a seguir para selecione e configure sua combinação de spot instances.
Usar as recomendações do console
O ACK console oferece orientações para a seleção de instâncias. Ao crie ou edite um node pool, o console sugere tipos de instância disponíveis em estoque para a região selecionada. Filtre esses tipos de instância com base nos seus requisitos de recursos. Após selecione os tipos de instância, o console calcula a força de elasticidade e o intervalo de preços das instâncias. Use a recomendação de força de elasticidade para adicionar mais tipos de instância e defina um preço máximo.
Para obter mais informações sobre como crie ou edite um node pool, consulte Create and manage node pools .
Na seção Selected Specifications, visualize os tipos de instância selecionados e ajuste a prioridade de compra usando os botões Move Up e Move Down. A parte inferior da página exibe o nível de força de elasticidade do scaling group (por exemplo, "Medium") e fornece sugestões de melhoria, como selecione múltiplos vSwitches em zonas diferentes e escolha vários tipos de instância com estoque suficiente.
Usar o CLI spot-instance-advisor
O ACK disponibiliza uma ferramenta de linha de comando open-source, spot-instance-advisor, para recuperar flutuações históricas de preços e informações de precificação atuais de spot instances. A ferramenta spot-instance-advisor usa uma API para buscar tipos de instância e curvas de preço histórico de uma região. Em seguida, aplica análise estatística para calcular e classificar os tipos de instância com menor custo por núcleo-hora e calcula um valor de entropia de preço com base na dispersão de preços. Um valor de entropia mais alto indica flutuações de preço mais frequentes. Recomendamos selecione tipos de instância com baixa entropia.
Para baixe o spot-instance-advisor, acesse spot-instance-advisor.
O spot-instance-advisor aceita os seguintes parâmetros de filtro.
Usage of ./spot-instance-advisor:
-accessKeyId string
Your accessKeyId of cloud account
-accessKeySecret string
Your accessKeySecret of cloud account
-cutoff int
Discount of the spot instance prices (default 2)
-family string
The spot instance family you want (e.g. ecs.n1,ecs.n2)
-limit int
Limit of the spot instances (default 20)
-maxcpu int
Max cores of spot instances (default 32)
-maxmem int
Max memory of spot instances (default 64)
-mincpu int
Min cores of spot instances (default 1)
-minmem int
Min memory of spot instances (default 2)
-region string
The region of spot instances (default "cn-hangzhou")
-resolution int
The window of price history analysis (default 7)
Execute o comando a seguir para obter a configuração de tipo de instância mais adequada para a região atual.
Os parâmetrosaccessKeyId,accessKeySecreteregionsão obrigatórios. Especifique os valores de acordo com os requisitos do seu negócio.
./spot-instance-advisor --accessKeyId=<id> --accessKeySecret=<secret> --region=<cn-zhangjiakou>
Configure a proporção de spot instances em relação a instâncias com pagamento conforme o uso
Ao configure a proporção de spot instances em relação a instâncias com pagamento conforme o uso em um node pool, você garante uma linha de base estável de instâncias com pagamento conforme o uso e reduz custos com uma proporção planejada de spot instances.
Seu cluster deve estar na versão 1,9 ou posterior. Para fazer upgrade de um cluster, consulte Manually upgrade a cluster.
Verifique se seu cluster pode adicionar um número suficiente de nós. Para informações sobre cotas de nós e como solicitar um aumento de cota, consulte Quotas and limits.
Ao adicionar nós existentes, certifique-se de que as instâncias ECS na sua Virtual Private Cloud (vpc) tenham um elastic IP address (EIP) vinculado, ou que a vpc correspondente tenha um NAT Gateway configurado. Isso garante que os nós possam acessar a internet pública e evita falhas durante a adição de nós.
Faça login no ACK console. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
-
Na página Node Pools, clique em Create Node Pool e configure os parâmetros.
A tabela a seguir descreve apenas os itens de configuração principais. Para instruções detalhadas, consulte Create and manage node pools.
Parâmetro
Descrição
vSwitch
Recomendamos selecione vSwitches em zonas diferentes para melhorar a alta disponibilidade do cluster.
Billing Method
Selecione Spot Instance.
Expanda Advanced Options e configure os parâmetros a seguir.
Defina scaling policy como cost optimization policy, defina Pay-As-You-Go Instance Percentage (%) como
20, marque a opção use pay-as-you-go instances to supplement spot capacity (isso inicializa instâncias com pagamento conforme o uso para atender à quantidade necessária quando spot instances não estiverem disponíveis por questões de preço ou estoque) e marque a opção enable supplemental spot instance (isso realiza proativamente o drain e a substituição de uma instância 5 minutos antes da recuperação; desabilitar essa opção pode causar interrupções de service).Scaling Policy
-
Priority-based Policy: Escala nós com base na prioridade do vSwitch configurada (a prioridade diminui de cima para baixo). Se uma instância não puder ser criada em uma zona de prioridade mais alta, o sistema usa automaticamente o próximo vSwitch na lista de prioridades.
-
Cost Optimization: Expande instâncias com o menor preço unitário de vCPU primeiro.
Se o node pool usar Preemptible Instance, elas têm prioridade. Também é possível configure um Pay-as-you-go Instance Percentage (%). Se spot instances de um tipo específico não puderem ser criadas por estoque insuficiente, o sistema tenta automaticamente crie instâncias com pagamento conforme o uso como complemento.
-
Distribution Balancing: Distribui instâncias ECS uniformemente entre múltiplas zonas. Essa política se aplica apenas a implantações em múltiplas zonas. Se a distribuição ficar desequilibrada por problemas como estoque insuficiente, execute novamente a operação de balanceamento.
Use Pay-as-you-go Instances When Spot Instances Are Insufficient
Quando essa opção está ativada e não é possível crie spot instances suficientes por restrições de preço ou estoque, o ACK tenta automaticamente crie instâncias com pagamento conforme o uso como complemento.
Enable Supplemental Spot Instance
Quando ativado, ao receber uma mensagem do sistema informando que uma spot instance está prestes a ser recuperada (5 minutos antes da recuperação), o ACK tentará escalar uma nova instância como compensação.
Compensação bem-sucedida: o ACK realiza o drain do nó antigo e o remove do cluster.
Compensação malsucedida: o ACK não realiza o drain do nó antigo. A instância ainda será recuperada e liberada após 5 minutos. Quando o estoque for restaurado ou as condições de preço forem atendidas, o ACK comprará automaticamente uma instância para manter a quantidade desejada de nós. Para obter mais informações, consulte Best practices for spot instance node pools.
A liberação proativa de spot instances pode causar interrupções nos negócios. Para melhorar a taxa de sucesso da compensação, recomendamos também ativar Use Pay-as-you-go Instances When Spot Instances Are Insufficient.
Recursos cloud e faturamento:
ECS Instance -
Após concluir a configuração, acesse a lista de node pools, clique em Details na coluna Actions e clique na aba Basic Information. Na seção Node Configurations, visualize o percentual de instâncias com pagamento conforme o uso.
Verificar o status de expiração de spot instances
Para evitar saídas inesperadas de nós devido à expiração de spot instances, o ACK usa o componente ack-node-problem-detector (NPD) para obter informações sobre liberações iminentes de instâncias e notificar você.
Para instale o componente NPD, consulte Step 1: Install the ack-node-problem-detector component .
Em um cluster ACK, as instâncias ECS atuam como nós que sustentam o cluster e seus services em execução. Dependendo da política de criação, algumas instâncias — como spot instances e instâncias de assinatura — estão sujeitas a liberação automática após a expiração. Se ações preventivas como expulsão de Pods, drain de nós ou substituição de nós não forem tomadas antes da liberação automática, os services do cluster podem ser afetados. A saída inesperada de um nó master pode causar uma falha em nível de cluster. Para evitar problemas decorrentes da expiração de spot instances, use o status InstanceExpired do componente NPD para se informar sobre uma liberação iminente.
Faça login no ACK console. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
Na página Nodes, clique no nome do nó de destino ou, na coluna Actions do nó de destino, escolha .
-
Na página de detalhes do nó, verifique o status da condição InstanceExpired.
Na seção Status, verifique o status da condição InstanceExpired.
Descrição dos status de InstanceExpired:
Status de InstanceExpired
Descrição
True
Se o status de InstanceExpired for True e o Content for InstanceToBeTerminated, a spot instance está prestes a expirar e será liberada.
False
Se o status de InstanceExpired for False e o Content for InstanceNotToBeTerminated, a spot instance não está expirando e pode continuar sendo utilizada.
Unknown
Um status Unknown indica um erro de plug-in. Abra um chamado para resolver o problema.
Se o status de InstanceExpired for True, você verá eventos relacionados à expiração da instância na seção Events.
Se o status de InstanceExpired for True, a spot instance está prestes a expirar e ser liberada. Caso precise continuar usando os services nesse nó, agende suas aplicações para outros nós. Para obter mais informações, consulte Schedule applications to a specific node.
Tratar graciosamente a expiração de spot instances
O tratamento gracioso da expiração de spot instances envolve principalmente monitoramento e notificações, complementos proativos de nós e políticas, além de comportamentos de tratamento personalizados.
Monitoramento e notificações
Para notificar você sobre a liberação de uma spot instance o mais cedo possível, os clusters ACK usam o componente NPD para monitorar mensagens de pré-liberação de spot instances.
Quando nenhuma mensagem de pré-liberação é detectada para a spot instance, o valor de InstanceExpired no status do nó é False. Na página de detalhes do nó, clique na aba Status e verifique a condição InstanceExpired na lista de condições. Quando o status for False e a mensagem for
InstanceNotToBeTerminated, indica que a spot instance não está sendo recuperada no momento.Quando o valor de InstanceExpired de uma spot instance for True, a instância está prestes a expirar e será liberada. O ACK notifica você sobre a liberação iminente por meio de um evento do Kubernetes. Ao detectar uma mensagem de pré-liberação, um evento
InstanceToBeTerminatedaparece no painel Events do cluster, indicando que a instância está prestes a ser liberada.
Enable Supplemental Spot Instance
A expiração e a liberação de spot instances são um fator determinante para a estabilidade das cargas de trabalho em um nó. O ACK oferece diversos métodos para responder rapidamente a eventos de liberação de spot instances, desde configuração e Auto Scaling até monitoramento e notificações. No entanto, esses métodos geralmente atuam após a recuperação da spot instance. Durante o período entre a recuperação e o provisionamento de uma nova instância, os recursos disponíveis no cluster são reduzidos. Para minimizar ou eliminar esse impacto, o ACK usa o recurso de complemento de nó para inicializar uma nova instância antes que a instância em expiração seja recuperada.
Após ativar o recurso de complemento de spot instance, o ACK monitora automaticamente se uma instância de nó está prestes a ser liberada. Ao detectar uma liberação iminente, aciona automaticamente uma atividade de dimensionamento para inicializar um novo nó. Essa nova instância, criada para substituir a que está prestes a ser liberada, é chamada de instância suplementar. Assim que a instância suplementar estiver em execução, ela aciona a redução e a liberação da spot instance em expiração. A estratégia de liberação inclui procedimentos de encerramento gracioso, como cordon no nó (tornando-o não agendável), drain do nó e remoção do nó do cluster. Esse processo ajuda a garantir que as cargas de trabalho na spot instance em expiração sejam migradas para outros nós do cluster, minimizando o impacto da expiração da instância no seu negócio.
-
Se o complemento de instância falhar por motivos como estoque insuficiente, o ACK não realizará o drain do nó antigo. A preempção da spot instance pode causar interrupções de service. Após uma falha, quando o estoque for restaurado ou as condições de preço forem atendidas, o ACK comprará automaticamente uma instância para garantir a quantidade desejada de nós.
Para melhorar a taxa de sucesso do complemento, recomendamos também ativar Use Pay-as-you-go Instances When Spot Instances Are Insufficient.
O resultado do complemento de instância não afeta a recuperação da spot instance em expiração. Independentemente de você ativar ou não Enable Supplemental Spot Instance, a instância em expiração ainda será recuperada 5 minutos após o aviso de pré-recuperação.

Adicionar lógica de tratamento personalizada
Em muitos cenários reais, desativar um nó exige mais etapas do que um encerramento gracioso padrão, como remover as informações do nó de um centro dns registrado. Para atender a essas necessidades, monitore o status InstanceExpired do nó ou escute o evento InstanceToBeTerminated. Ao receber uma notificação de que a instância do nó está expirando ou será liberada, trate o nó como pendente de desativação e execute sua lógica personalizada. Para instruções sobre como monitorar o status de expiração de spot instances, consulte Check the expiration status of spot instances.