Nesta página, você terá uma visão geral de taints e tolerâncias no Google Distributed Cloud. 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 programador determina onde colocar os pods associados a ela. 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 Google Distributed Cloud
É 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: em relação a 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
No console, acesse a página Visão geral dos clusters do Google Kubernetes Engine.
Selecione o projeto do Cloud em que o cluster de usuário está.
Na lista de cluster, clique no nome dele e em Ver detalhes no painel Detalhes.
Clique em
Adicionar pool de nós.Configure o pool de nós:
- Digite o Nome do pool de nós.
- Insira o número de vCPUs de cada nó no pool (mínimo de 4 por worker do cluster de usuário)
- 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).
- No campo Replicas, insira o número de nós no pool (mínimo de três).
Selecione o tipo de imagem do SO: Ubuntu Containerd ou COS.
Digite Tamanho do disco de inicialização em gibibytes (GiB). O padrão é 40 GiB.
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.
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.
Clique em Criar.
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
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
ounodePools[i].osImageType
, os valores padrão serão usados.Preencha a seção
nodePools[i].taints
. Exemplo:nodePools: - name: "my-node-pool" taints: - key: "staging" value: "true" effect: "NoSchedule"
Preencha as seguintes seções:
nodePools[i].labels
nodePools[i].bootDiskSizeGB
nodePools[i].osImageType
nodePools[i].vsphere.datastore
nodePools[i].vsphere.tags
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
No console, acesse a página Visão geral dos clusters do Google Kubernetes Engine.
Selecione o projeto do Cloud em que o cluster de usuário está.
Na lista de cluster, clique no nome dele e em Ver detalhes no painel Detalhes.
Clique na guia Nós.
Clique no nome do pool de nós que você quer modificar.
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.Clique em Concluído.
Clique em
para voltar à página anterior.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
No seu arquivo de configuração do cluster de usuário , acesse a seção
nodePools
do pool de nós que você quer atualizar.Preencha o
nodePools[i].taints
. Por exemplo:nodePools: - name: "my-node-pool" taints: - key: "staging" value: "true" effect: "NoSchedule"
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.