Quando você precisar reparar ou manter os nós, primeiro coloque-os no modo de manutenção. Colocar nós no modo de manutenção drena os pods/cargas de trabalho com segurança e exclui os nós da programação de pods. No modo de manutenção, é possível trabalhar nos nós sem o risco de interromper o tráfego dos pods.
Como funciona
O GKE em Bare Metal oferece uma maneira de colocar os nós no modo de manutenção. Essa abordagem permite que outros componentes do cluster saibam corretamente que o nó está no modo de manutenção. Ao colocar um nó no modo de manutenção, nenhum pod adicional pode ser programado no nó, e os pods existentes são interrompidos.
Em vez de usar o modo de manutenção, é possível usar manualmente os comandos do Kubernetes, como
kubectl cordon
e kubectl drain
, em um nó específico. Se você executar
a versão 1.12.0 (anthosBareMetalVersion: 1.12.0
) ou
anterior do GKE em Bare Metal, consulte o problema conhecido em
Nós não restritos se você não usar o procedimento do modo de manutenção
Quando você usa o processo do modo de manutenção, o GKE em Bare Metal faz o seguinte:
Os taints de nó são adicionados aos nós especificados para indicar que nenhum pod pode ser programado ou executado nos nós.
É aplicado um tempo limite de 20 minutos para garantir que os nós não fiquem travados aguardando o encerramento dos pods. Os pods não serão encerrados se estiverem configurados para tolerar todos os taints ou tiverem finalizadores. O GKE em Bare Metal tentam encerrar todos os pods, mas, se o tempo limite for excedido, o nó será colocado no modo de manutenção. Esse tempo limite impede que os pods em execução bloqueiem os upgrades.
Colocar um nó no modo de manutenção
Escolha os nós que você quer colocar no modo de manutenção especificando os intervalos de IPs
dos nós selecionados em maintenanceBlocks
no arquivo de configuração
do cluster. Os nós escolhidos precisam estar prontos e funcionando no
cluster.
Para colocar nós no modo de manutenção:
Edite o arquivo de configuração do cluster para selecionar os nós que você quer colocar no modo de manutenção.
É possível editar o arquivo de configuração com um editor de sua preferência ou editar o recurso personalizado do cluster diretamente executando o seguinte comando:
kubectl -n CLUSTER_NAMESPACE edit cluster CLUSTER_NAME
Substitua:
CLUSTER_NAMESPACE
: o namespace do cluster.CLUSTER_NAME
: o nome do cluster.
Adicione a seção
maintenanceBlocks
ao arquivo de configuração do cluster para especificar um único endereço IP ou um intervalo de endereços para os nós que você quer colocar no modo de manutenção.O exemplo a seguir mostra como selecionar vários nós especificando um intervalo de endereços IP:
metadata: name: my-cluster namespace: cluster-my-cluster spec: maintenanceBlocks: cidrBlocks: - 172.16.128.1-172.16.128.64
Salve e aplique a configuração atualizada do cluster.
O GKE em Bare Metal começa a colocar os nós no modo de manutenção.
Execute o seguinte comando para ver o status dos nós no cluster:
kubectl get nodes --kubeconfig=KUBECONFIG
A resposta é semelhante a esta:
NAME STATUS ROLES AGE VERSION user-anthos-baremetal-01 Ready control-plane 2d22h v1.27.4-gke.1600 user-anthos-baremetal-04 Ready worker 2d22h v1.27.4-gke.1600 user-anthos-baremetal-05 Ready worker 2d22h v1.27.4-gke.1600 user-anthos-baremetal-06 Ready worker 2d22h v1.27.4-gke.1600
Os nós ainda são programáveis, mas os taints impedem a programação de qualquer pod (sem uma tolerância adequada).
Execute o seguinte comando para ver o número de nós no modo de manutenção:
kubectl get nodepools --kubeconfig ADMIN_KUBECONFIG
A resposta será semelhante a esta:
NAME READY RECONCILING STALLED UNDERMAINTENANCE UNKNOWN np1 3 0 0 1 0
Na coluna
UNDERMAINTENANCE
neste exemplo, vemos que um nó está no modo de manutenção.O GKE em Bare Metal também adiciona os seguintes taints aos nós quando eles são colocados no modo de manutenção:
baremetal.cluster.gke.io/maintenance:NoExecute
baremetal.cluster.gke.io/maintenance:NoSchedule
Modo de faturamento e manutenção
O faturamento do GKE em Bare Metal é baseado no número de vCPUs que o cluster
tem para nós capazes de executar cargas de trabalho. Quando você coloca um nó no modo de manutenção, os taints NoExecute
e NoSchedule
são adicionados ao nó, mas não desativam o faturamento. Depois de colocar um nó no modo de manutenção, demarque o nó (kubectl cordon NODE_NAME
) para marcá-lo como não programável. Depois que um nó é marcado como não programável, ele e as vCPUs associadas são excluídos do faturamento.
Conforme descrito na página de preços, é possível usar kubectl
para
conferir a capacidade de vCPU (usada para o faturamento do Anthos) de cada um dos clusters de usuário.
O comando não considera se o nó está ou não programável. Ele fornece apenas uma contagem de vCPU por nó.
Para identificar o número de vCPUs por nó do cluster de usuário:
kubectl get nodes \
--kubeconfig USER_KUBECONFIG \
-o=jsonpath="{range .items[*]}{.metadata.name}{\"\t\"} \
{.status.capacity.cpu}{\"\n\"}{end}"
Substitua USER_KUBECONFIG pelo caminho do arquivo kubeconfig do cluster de usuário.
Remover um nó do modo de manutenção
Para remover nós do modo de manutenção:
Edite o arquivo de configuração do cluster para limpar os nós que você quer remover do modo de manutenção.
É possível editar o arquivo de configuração com um editor de sua preferência ou editar o recurso personalizado do cluster diretamente executando o seguinte comando:
kubectl -n CLUSTER_NAMESPACE edit cluster CLUSTER_NAME
Substitua:
CLUSTER_NAMESPACE
: o namespace do cluster.CLUSTER_NAME
: o nome do cluster.
Edite os endereços IP para remover nós específicos do modo de manutenção ou remova a seção
maintenanceBlocks
para remover todos os nós do modo de manutenção.Salve e aplique a configuração atualizada do cluster.
Use comandos
kubectl
para verificar o status dos nós.