Executar VMs preemptivas

Nesta página, você encontra uma visão geral do suporte de VMs preemptivas no Google Kubernetes Engine.

Visão geral

As VMs preemptivas são instâncias de VM do Google Compute Engine com duração de, no máximo, 24 horas e que não oferecem garantias de disponibilidade. Elas têm um preço mais baixo que as VMs padrão do Compute Engine e oferecem os mesmos tipos de máquinas e opções.

Você pode usar VMs preemptivas em clusters ou pools de nós do GKE para executar jobs em lote ou tolerantes a falhas que sejam menos suscetíveis à natureza efêmera e não garantida das VMs preemptivas.

Para saber mais sobre elas, consulte VMs preemptivas na documentação do Compute Engine.

Como as VMs preemptivas funcionam

Quando os clusters ou pools de nós do GKE criam VMs do Compute Engine, elas se comportam como um grupo de instâncias gerenciadas. VMs preemptivas no GKE estão sujeitas às mesmas limitações das instâncias preemptivas em um grupo de instâncias gerenciadas. Elas são encerradas 30 segundos após o recebimento da notificação de preempção.

Além disso, essas VMs preemptivas recebem um rótulo do Kubernetes: cloud.google.com/gke-preemptible=true. É possível usar esses rótulos no campo nodeSelector para programar pods para nós específicos.

Veja abaixo um seletor de exemplo para filtragem de VMs preemptivas:

apiVersion: v1
kind: Pod
spec:
  nodeSelector:
    cloud.google.com/gke-preemptible: "true"

Práticas recomendadas

Como as VMs preemptivas não têm garantias de disponibilidade, é preciso projetar o sistema com o pressuposto de que qualquer ou todas as instâncias do Compute Engine podem ser rejeitadas e ficar indisponíveis. Não há garantias de quando novas instâncias ficam disponíveis.

Além disso, não há garantia de que os pods executados em VMs preemptivas sempre possam ser desligados normalmente.

Se você quiser garantir que os jobs ou as cargas de trabalho sejam processados mesmo que não haja nenhuma VM preemptiva disponível, poderá criar pools de nós preemptivos e não preemptivos no cluster.

Como criar um cluster ou pool de nós com VMs preemptivas

Você pode usar a ferramenta de linha de comando gcloud ou o console do GCP para criar um cluster ou pool de nós com VMs preemptivas.

gcloud

Você pode criar um pool de nós ou um cluster com VMs preemptivas ao especificar a sinalização --preemptible.

Para criar um cluster com VMs preemptivas, execute o comando a seguir:

gcloud beta container clusters create [CLUSTER_NAME] --preemptible

em que [COMPUTE_ZONE] é a zona de computação do cluster.

Para criar um pool de nós com VMs preemptivas:

gcloud beta container node-pools create [POOL_NAME] --preemptible \
--cluster [CLUSTER_NAME]

Console

  1. Acesse o menu do Google Kubernetes Engine no Console do GCP.

    Acessar o menu do Google Kubernetes Engine

  2. Clique em Criar cluster.

  3. Escolha Cluster padrão ou um modelo apropriado para sua carga de trabalho.

  4. Configure o cluster como quiser. Em seguida, clique em Edição avançada para o pool de nós que você quer configurar.

  5. Na seção Nós preemptivos, selecione Ativar nós preemptivos.

  6. Clique em Salvar para fechar a sobreposição de modificação do pool de nós.

  7. Clique em Criar.

Como usar taints de nó para evitar a programação em nós de VM preemptiva

Dependendo do caso de uso, você precisa evitar que pods importantes sejam programados em um node de VM preemptiva. Para que isso não aconteça, use uma tolerância e taints de nó nesses casos.

Como criar taint de nó para VMs preemptivas

Para adicionar um taint de nó com VMs preemptivas, execute o comando a seguir:

kubectl taint nodes [NODE_NAME] cloud.google.com/gke-preemptible="true":NoSchedule

Agora, apenas os pods que toleram o taint serão programados no nó.

Como adicionar tolerância a pods

Para adicionar a tolerância relevante aos pods, inclua o seguinte na especificação do pod ou do modelo de pod do objeto:

tolerations:
- key: cloud.google.com/gke-preemptible
  operator: Equal
  value: "true"
  effect: NoSchedule

Próximas etapas

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Kubernetes Engine