Esta página oferece uma vista geral das restrições e tolerâncias no Google Distributed Cloud. Quando agenda cargas de trabalho para serem implementadas no seu cluster, as restrições de nós ajudam a controlar em que nós podem ser executadas.
Vista geral
Quando envia uma carga de trabalho para execução num cluster, o programador determina onde colocar os pods associados à carga de trabalho. O agendador é livre de colocar um pod em qualquer nó que satisfaça os requisitos de CPU, memória e recursos personalizados do pod.
Se o seu cluster executar uma variedade de cargas de trabalho, pode querer exercer algum controlo sobre as cargas de trabalho que podem ser executadas num determinado conjunto de nós.
Uma mancha de nó permite-lhe marcar um nó para que o programador evite ou impeça a utilização do mesmo para determinados pods. Uma funcionalidade complementar, as tolerâncias, permite-lhe designar Pods que podem ser usados em nós "contaminados".
As restrições e as tolerâncias funcionam em conjunto para garantir que os pods não são agendados em nós inadequados.
As restrições são pares de chave-valor associados a um efeito. A tabela seguinte apresenta os efeitos disponíveis:
Efeito | Descrição |
---|---|
NoSchedule |
Os pods que não toleram esta contaminação não são agendados no nó; os pods existentes não são removidos do nó. |
PreferNoSchedule |
O Kubernetes evita agendar pods que não toleram esta mancha no nó. |
NoExecute |
O pod é removido do nó se já estiver em execução no nó e não é agendado para o nó se ainda não estiver em execução no nó. |
Vantagens da definição de taints de nós no Google Distributed Cloud
Embora possa definir taints de nós com o comando
kubectl taint
, a utilização de gkectl
ou da consola para definir um taint de nó tem as seguintes vantagens em relação a kubectl
: Google Cloud
- As contaminações são preservadas quando um nó é reiniciado ou substituído.
- As restrições são criadas automaticamente quando um nó é adicionado a um conjunto de nós.
- Quando usa
gkectl
para adicionar contaminações, estas são criadas automaticamente durante o dimensionamento automático do cluster. (Atualmente, o ajuste de escala automático para conjuntos de nós criados na Google Cloud consola não está disponível.)
Defina taints de nós
Pode definir taints de nós num conjunto de nós quando cria um cluster de utilizador ou depois de o cluster ser criado. Esta secção mostra como adicionar contaminações a clusters que já foram criados, mas o processo é semelhante quando cria novos clusters.
Pode adicionar um novo conjunto de nós e definir uma restrição, ou pode atualizar um conjunto de nós existente e definir uma restrição. Antes de adicionar outro conjunto de nós, verifique se existem endereços IP suficientes disponíveis no cluster.
Se criou o cluster na Google Cloud consola, pode usar aGoogle Cloud consola para adicionar ou atualizar um conjunto de nós.
Defina taints num novo conjunto de nós
Consola
Na consola, aceda à página Vista geral dos clusters do Google Kubernetes Engine.
Selecione o Google Cloud projeto no qual o cluster de utilizadores se encontra.
Na lista de clusters, clique no nome do cluster e, de seguida, clique em Ver detalhes no painel Detalhes.
Clique em
Adicionar conjunto de nós.Configure o node pool:
- Introduza o nome do conjunto de nós.
- Introduza o número de vCPUs para cada nó no conjunto (mínimo de 4 por worker do cluster de utilizadores).
- Introduza o tamanho da memória em mebibytes (MiB) para cada nó no conjunto (mínimo de 8192 MiB por nó de trabalho do cluster de utilizadores e tem de ser um múltiplo de 4).
- No campo Réplicas, introduza o número de nós no conjunto (mínimo de 3).
Selecione o tipo de imagem do SO: Ubuntu Containerd ou COS.
Introduza o tamanho do disco de arranque em gibibytes (GiB) (o valor predefinido é 40 GiB).
Na secção Metadados do conjunto de nós (opcional), clique em + Adicionar restrição. Introduza a Chave, o Valor e o Efeito da contaminação. Repita estes passos conforme necessário.
Opcionalmente, clique em + Adicionar etiquetas do Kubernetes. Introduza a Chave e o Valor da etiqueta. Repita estes passos conforme necessário.
Clique em Criar.
A Google Cloud consola apresenta Estado do cluster: alterações em curso. Clique em Mostrar detalhes para ver a condição do estado do recurso e as mensagens de estado.
Linha de comandos
No seu ficheiro de configuração do cluster de utilizadores, preencha a secção
nodePools
.Tem de especificar os seguintes campos:
nodePools.[i].name
nodePools[i].cpus
nodePools.[i].memoryMB
nodePools.[i].replicas
Os seguintes campos são opcionais. Se não incluir
nodePools[i].bootDiskSizeGB
ounodePools[i].osImageType
, são usados os valores predefinidos.Preencha a secção
nodePools[i].taints
. Por exemplo:nodePools: - name: "my-node-pool" taints: - key: "staging" value: "true" effect: "NoSchedule"
Opcionalmente, preencha as seguintes secções:
nodePools[i].labels
nodePools[i].bootDiskSizeGB
nodePools[i].osImageType
nodePools[i].vsphere.datastore
nodePools[i].vsphere.tags
Execute o seguinte comando:
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
Substitua o seguinte:
[ADMIN_CLUSTER_KUBECONFIG]
com o caminho do ficheiro kubeconfig para o cluster de administrador.[USER_CLUSTER_CONFIG]
com o caminho do ficheiro de configuração do cluster de utilizadores.
Defina taints num node pool existente
Consola
Na consola, aceda à página Vista geral dos clusters do Google Kubernetes Engine.
Selecione o Google Cloud projeto no qual o cluster de utilizadores se encontra.
Na lista de clusters, clique no nome do cluster e, de seguida, clique em Ver detalhes no painel Detalhes.
Clique no separador Nós.
Clique no nome do conjunto de nós que quer modificar.
Clique em
Editar junto à secção Metadados do conjunto de nós (opcional) e clique em + Adicionar restrição. Introduza a Chave, o Valor e o Efeito da contaminação. Repita estes passos conforme necessário.Clique em Concluído.
Clique em
para voltar à página anterior.A Google Cloud consola apresenta Estado do cluster: alterações em curso. Clique em Mostrar detalhes para ver a condição do estado do recurso e as mensagens de estado.
Linha de comandos
No ficheiro de configuração do cluster de utilizadores, aceda à secção
nodePools
do conjunto de nós que quer atualizar.Preencha o
nodePools[i].taints
Por exemplo:nodePools: - name: "my-node-pool" taints: - key: "staging" value: "true" effect: "NoSchedule"
Execute o seguinte comando:
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
Substitua o seguinte:
[ADMIN_CLUSTER_KUBECONFIG]
com o caminho do ficheiro kubeconfig para o cluster de administrador.[USER_CLUSTER_CONFIG]
com o caminho do ficheiro de configuração do cluster de utilizadores.
Configure os pods para tolerarem uma restrição
Pode configurar os pods para tolerarem uma mancha incluindo o campo tolerations
na especificação dos pods. No exemplo seguinte, o agrupamento pode ser agendado
num nó que tenha a restrição dedicated=experimental:NoSchedule
:
tolerations:
- key: dedicated
operator: Equal
value: experimental
effect: NoSchedule
Para ver exemplos adicionais, consulte o artigo Taints and Tolerations.