Controle a programação com taints e tolerâncias

Nesta página, você terá uma visão geral das taints e tolerâncias no GKE no VMware. Quando você programa a implantação de cargas de trabalho no cluster, os taints de nó o ajudam a controlar quais nós elas podem executar.

Visão geral

Quando você envia uma carga de trabalho para executar em um cluster, o scheduler determina onde colocar os pods associados à carga de trabalho. O programador é livre para colocar um pod em qualquer node que satisfaça os requisitos de recursos personalizados, de CPU e de memória do pod.

Se o cluster executa várias cargas de trabalho, convém exercer um controle sobre quais cargas de trabalho podem ser executadas em um pool de nós em particular.

Com um taint de node, você marca um node para que o programador evite ou impeça o uso dele em determinados pods. Com o recurso adicional tolerâncias, você designa pods que podem ser usados em nós com taint.

Os taints e as tolerâncias trabalham juntos para garantir que os pods não sejam programados em nós inadequados.

Os taints de node são pares de chave-valor associados a um efeito. A tabela a seguir lista os efeitos disponíveis:

Efeito Descrição
NoSchedule Pods que não toleram esse taint não são programados no nó. Os pods atuais não são removidos do nó.
PreferNoSchedule O Kubernetes evita a programação de pods que não toleram esse taint no nó.
NoExecute O pod é removido do nó caso já esteja em execução nele e não é programado no nó caso ainda não esteja em execução nele.

Vantagens de configurar taints de nó no GKE no VMware

É possível definir taints de nós usando o comando kubectl taint, mas usar gkectl ou o Console do Google Cloud para definir um taint de nós tem as seguintes vantagens: kubectl:

  • Os taints são preservados quando um nó é reiniciado ou substituído.
  • Os taints são criados automaticamente quando um nó é adicionado a um pool de nós.
  • Ao usar gkectl para adicionar taints, eles serão criados automaticamente durante o escalonamento automático do cluster. O escalonamento automático do pool de nós criado no console do Google Cloud não está disponível no momento.

Definir taints de nós

É possível definir taints de nós em um pool ao criar um cluster de usuário ou depois que o cluster for criado. Nesta seção, mostramos como adicionar taints a clusters que já foram criados, mas o processo é semelhante ao criar novos clusters.

É possível adicionar um novo pool de nós e definir um taint ou atualizar um pool de nós existente e definir um taint. Antes de adicionar outro pool de nós, verifique se endereços IP suficientes estão disponíveis no cluster.

Se você criou o cluster no console do Google Cloud, pode usá-lo para adicionar ou atualizar um pool de nós.

Definir taints em um novo pool de nós

Console

  1. No console, acesse a página de visão geral dos clusters do Google Kubernetes Engine.

    Acesse os clusters do GKE

  2. Selecione o projeto do Cloud em que o cluster de usuário está.

  3. Na lista de cluster, clique no nome dele e em Ver detalhes no painel Detalhes.

  4. Clique em Adicionar pool de nós.

  5. Configure o pool de nós:

    1. Digite o Nome do pool de nós.
    2. Insira o número de vCPUs de cada nó no pool (mínimo de 4 por worker do cluster de usuário)
    3. Insira o tamanho da memória em mebibytes (MiB) para cada nó no pool (mínimo de 8.192 MiB por nó de trabalho do cluster de usuário, e precisa ser um múltiplo de 4).
    4. No campo Replicas, insira o número de nós no pool (mínimo de três).
    5. Selecione o tipo de imagem do SO: Ubuntu Containerd ou COS.

    6. Digite Tamanho do disco de inicialização em gibibytes (GiB). O padrão é 40 GiB.

  6. Na seção Metadados do pool de nós (opcional), clique em + Adicionar taint. Insira Key, Value e Effect para o taint. Repita quantas vezes forem necessárias.

  7. Também é possível clicar em + Adicionar rótulos do Kubernetes. Insira a Chave e o Valor do rótulo. Repita quantas vezes forem necessárias.

  8. Clique em Criar.

  9. O console do Google Cloud exibe Status do cluster: alterações em andamento. Clique em Mostrar detalhes para ver a Condição do status do recurso e as Mensagens de status.

Linha de comando

  1. No arquivo de configuração do cluster de usuário, preencha a seção nodePools.

    É necessário especificar os seguintes campos:

    • nodePools.[i].name
    • nodePools[i].cpus
    • nodePools.[i].memoryMB
    • nodePools.[i].replicas

    Os seguintes campos são opcionais. Se você não incluir nodePools[i].bootDiskSizeGB ou nodePools[i].osImageType, os valores padrão serão usados.

  2. Preencha a seção nodePools[i].taints. Exemplo:

    nodePools:
    - name: "my-node-pool"
      taints:
      - key: "staging"
        value: "true"
        effect: "NoSchedule"
    
  3. Preencha as seguintes seções:

    • nodePools[i].labels
    • nodePools[i].bootDiskSizeGB
    • nodePools[i].osImageType
    • nodePools[i].vsphere.datastore
    • nodePools[i].vsphere.tags
  4. Execute este comando:

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
    

    Substitua:

    • [ADMIN_CLUSTER_KUBECONFIG] pelo caminho do arquivo kubeconfig para o cluster de administrador;

    • [USER_CLUSTER_CONFIG] é o caminho do arquivo de configuração do cluster de usuário.

Definir taints em um pool de nós atual

Console

  1. No console, acesse a página de visão geral dos clusters do Google Kubernetes Engine.

    Acesse os clusters do GKE

  2. Selecione o projeto do Cloud em que o cluster de usuário está.

  3. Na lista de cluster, clique no nome dele e em Ver detalhes no painel Detalhes.

  4. Clique na guia Nós.

  5. Clique no nome do pool de nós que você quer modificar.

  6. Clique em Editar ao lado da seção Metadados do pool de nós (opcional) e clique em + Adicionar taint. Insira Key, Value e Effect para o taint. Repita quantas vezes forem necessárias.

  7. Clique em Concluído.

  8. Clique em para voltar à página anterior.

  9. O console do Google Cloud exibe Status do cluster: alterações em andamento. Clique em Mostrar detalhes para ver a Condição do status do recurso e as Mensagens de status.

Linha de comando

  1. Em sua arquivo de configuração do cluster de usuário , acesse o nodePools do pool de nós que você quer atualizar.

  2. Preencha o nodePools[i].taints. Por exemplo:

    nodePools:
    - name: "my-node-pool"
      taints:
      - key: "staging"
        value: "true"
        effect: "NoSchedule"
    
  3. Execute este comando:

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
    

    Substitua:

    • [ADMIN_CLUSTER_KUBECONFIG] pelo caminho do arquivo kubeconfig para o cluster de administrador;

    • [USER_CLUSTER_CONFIG] é o caminho do arquivo de configuração do cluster de usuário.

Configurar pods para tolerar um taint

É possível configurar pods para tolerar um taint incluindo o campo tolerations na especificação do pods. No exemplo a seguir, o pod pode ser programado em um nó com o taint dedicated=experimental:NoSchedule:

tolerations:
- key: dedicated
  operator: Equal
  value: experimental
  effect: NoSchedule

Para ver mais exemplos, consulte Taints e tolerâncias.