Exclusão de Nós de Trabalho

Saiba mais sobre como excluir nós de trabalho e observações sobre como definir opções de cordão e drenagem com o Kubernetes Engine (OKE).

Você pode excluir nós de trabalho específicos em pools de nós em clusters que você criou com o Kubernetes Engine.

Observe as seguintes considerações:

  • A exclusão de um nó de trabalho exclui esse nó de trabalho específico do pool de nós e, opcionalmente, reduz o próprio pool de nós subtraindo 1 do número de nós de trabalho especificados para o pool de nós. Se você excluir um nó de trabalho sem reduzir o pool de nós, um novo nó de trabalho será criado para substituí-lo.
  • Quando você exclui nós gerenciados, as opções de Cordon e drenagem selecionadas determinam quando e como os nós de trabalho são encerrados. Consulte Observações sobre Cordonagem e Drenagem de Nós Gerenciados Antes do Encerramento.
  • Além de poder excluir nós de trabalho específicos, observe que os nós de trabalho também são excluídos quando você reduz os pools de nós e altera as configurações de posicionamento.
  • Quando você tiver marcado um nó de trabalho para exclusão (durante uma operação de exclusão de nó, uma operação de redução ou uma alteração na configuração de posicionamento), não será possível recuperar o nó. Mesmo que a operação de exclusão de nó seja inicialmente malsucedida, a próxima operação de atualização de pool de nós (incluindo uma operação de ampliação) tentará encerrar o nó novamente.
  • O Kubernetes Engine cria os nós de trabalho em um cluster com nomes gerados automaticamente. Os nomes de nós gerenciados têm o seguinte formato: oke-c<part-of-cluster-OCID>-n<part-of-node-pool-OCID>-s<part-of-subnet-OCID>-<slot>. Os nomes de nós virtuais são os mesmos do endereço IP privado do nó. Não altere os nomes dos nós de trabalho gerados automaticamente. Se você fosse alterar o nome gerado automaticamente de um nó de trabalho e depois excluir o cluster, o nó de trabalho renomeado não seria excluído. Seria necessário excluir o nó de trabalho renomeado manualmente.

Você pode excluir nós de trabalho usando a Console, a CLI e a API. Consulte Excluindo um Nó de Trabalho.

Notas sobre Cordonagem e Drenagem de Nós Gerenciados Antes do Encerramento

Cordon

Cordoning é o nome dado para marcar um nó de trabalho em um cluster do Kubernetes como não programável. O cordonamento de um nó de trabalho impede que o kube-scheduler coloque novos pods nesse nó, mas não afeta os pods existentes no nó. O cordonamento de um nó de trabalho é uma etapa preparatória útil antes de encerrar o nó para executar tarefas administrativas (como exclusão de nó, redução de um pool de nós e alteração da configuração de posicionamento). Para obter mais informações, consulte Administração Manual de Nós na documentação do Kubernetes.

Retirando

Drenagem é o nome dado para remover pods com segurança de um nó de trabalho em um cluster do Kubernetes. O despejo seguro de pods garante que os contêineres do pod sejam encerrados normalmente e execute qualquer limpeza necessária. Para obter mais informações, consulte Drenar um Nó com Segurança e Encerramento de Pods na documentação do Kubernetes.

Orçamentos de interrupção de pod

Os orçamentos de interrupção de pods são um recurso do Kubernetes para limitar o número de interrupções simultâneas que um aplicativo experimenta. O uso de orçamentos de interrupção de pod garante alta disponibilidade do aplicativo e, ao mesmo tempo, permite que você execute tarefas administrativas nos nós de trabalho. Os orçamentos de interrupção do pod podem impedir que os pods sejam despejados ao drenar nós de trabalho. Para obter mais informações, consulte Especificando um Orçamento de Interrupção para seu Aplicativo na documentação do Kubernetes.

Pools de nós com status "Precisa de atenção"

Ao excluir nós de trabalho de clusters criados com o Kubernetes Engine, você pode usar as seguintes opções de Cordon e drenagem para especificar quando e como os nós de trabalho são encerrados:

  • Período de tolerância de advertência (minutos): O período de tempo para permitir o cordão e o dreno de nós de trabalho antes de encerrá-los. Aceite o padrão (60 minutos) ou especifique uma alternativa. Por exemplo, ao reduzir um pool de nós ou alterar sua configuração de posicionamento, talvez você queira permitir 30 minutos para nós de trabalho do cordão e drená-los de suas cargas de trabalho. Para encerrar os nós de trabalho imediatamente, sem isolá-los e drená-los, especifique 0 minuto.
  • Forçar encerramento após o período de tolerância: Se os nós de trabalho devem ser encerrados no final do período de tolerância de despejo, mesmo que eles não tenham sido isolados e drenados com sucesso. Por padrão, essa opção não está selecionada.

    Selecione esta opção se você sempre quiser que os nós de trabalho sejam desligados no final do período de tolerância de despejo, mesmo que eles não tenham sido isolados e drenados com sucesso.

    Desmarque esta opção se não quiser que os nós de trabalho que não foram isolados e drenados com êxito sejam desligados no final do período de tolerância para remoção. Os pools de nós que contêm nós de trabalho que não puderam ser encerrados dentro do período de tolerância de remoção têm o status Precisa de atenção. Consulte Monitorando Clusters.

Um pool de nós com o status Precisa de atenção indica que um ou mais nós de trabalho no pool de nós não conseguiram expulsar todos os pods em execução nele dentro do período de tolerância de remoção. O status da solicitação de serviço que iniciou a operação de encerramento é definido como Com Falha. Você pode exibir o motivo da falha, incluindo os pods específicos que não podem ser expulsos, nos logs de solicitação de serviço (consulte Exibindo Solicitações de Serviço). Há uma série de possíveis razões pelas quais um pod não pode ser despejado, incluindo orçamentos restritivos de interrupção de pod. Para obter mais informações, consulte Programação, Preempção e Remoção na documentação do Kubernetes.

Para resolver o status Precisa de atenção de um pool de nós e encerrar os nós de trabalho afetados, execute uma das seguintes ações:

  • Emita novamente o comando original e selecione a opção Forçar encerramento após o período de tolerância. Os nós são terminados no final do período de tolerância de despejo, mesmo que não tenham sido cordonados e drenados com sucesso.
  • Examine o log da solicitação de serviço para determinar o motivo da falha do despejo, resolva o motivo (por exemplo, criando um orçamento de interrupção de pod menos restritivo) e emita novamente o comando original.

Usando a CLI para resolver o status "Precisa de atenção" de um pool de nós

Para usar a CLI para resolver o status Precisa de atenção de um pool de nós e encerrar os nós de trabalho afetados, informe:

oci ce node-pool get --node-pool-id <nodepool-ocid> | jq '{ state: .data."lifecycle-state", nodes: (.data.nodes | .[] | {id, "node-error"} ) }'

em que --node-pool-id <nodepool-ocid> é o OCID do pool de nós com o status Precisa de atenção.

Por exemplo:

oci ce node-pool get --node-pool-id ocid1.nodepool.oc1.iad.aaaaaaa______eya | jq '{ state: .data."lifecycle-state", nodes: (.data.nodes | .[] | {id, "node-error"} ) }'

A resposta ao comando lista os nós de trabalho atualmente em um estado de erro de nó, juntamente com uma explicação. Por exemplo:

{
	"state": "NEEDS_ATTENTION",
	"nodes": {
		"id": "ocid1.instance.oc1.iad.anu___4cq",
		"node-error":

		{
			"code": "PodEvictionFailureError",
			"message": "Pod(s) {sigterm - app - 55 c4f4f657 - wccqn} of Node ocid1.instance.oc1.iad.anuwc______4cq could not be evicted.",
			"opc-request-id": null,
			"status": null
		}
	}
}

Neste exemplo, você pode ver que não foi possível expulsar um pod do nó de trabalho dentro do período de tolerância de remoção. Como resultado, não foi possível desligar o nó de trabalho. É sua responsabilidade identificar por que o pod não pôde ser despejado e, em seguida, corrigir o problema subjacente. Por exemplo, criando um orçamento de interrupção de pod menos restritivo.

Depois de corrigir o problema, você pode continuar e excluir o nó de trabalho digitando:

oci ce node-pool delete-node --node-pool-id <nodepool-ocid> --node-id <node-ocid>

Por exemplo:

oci ce node-pool delete-node --node-pool-id ocid1.nodepool.oc1.iad.aaaaaaa______eya --node-id ocid1.instance.oc1.iad.anu___4cq

Se você quiser forçar a exclusão do nó de trabalho sem cordonar e drenar o nó de trabalho e sem corrigir o problema subjacente, informe:

oci ce node-pool delete-node --node-pool-id <nodepool-ocid> --node-id <node-ocid> --override-eviction-grace-duration PT0M

em que --override-eviction-grace-duration PT0M define o período de tolerância de remoção como 0 minuto.

Por exemplo:

oci ce node-pool delete-node --node-pool-id ocid1.nodepool.oc1.iad.aaaaaaa______eya --node-id ocid1.instance.oc1.iad.anu___4cq --override-eviction-grace-duration PT0M

Pools de nós com quantityPerSubnet definidos como 1 ou mais

Ao criar e atualizar pools de nós em releases anteriores do Kubernetes Engine, você especificou quantos nós de trabalho desejava em um pool de nós informando um valor para a propriedade Quantidade por sub-rede (quantityPerSubnet na API).

Nas releases mais recentes do Kubernetes Engine, você especifica quantos nós de trabalho deseja em um pool de nós informando um valor para a propriedade Número de Nós (size na API).

Observe que você só pode excluir nós de trabalho específicos (e selecionar as opções Cordon e drenar) ao excluir dos pools de nós que têm a Quantidade por sub-rede (quantityPerSubnet) definida como zero ou nula. Para excluir nós de trabalho específicos (e selecionar as opções Cordon e drenagem) de um pool de nós mais antigo que tenha a Quantidade por sub-rede (quantityPerSubnet) definida como 1 ou mais, primeiro defina a Quantidade por sub-rede (quantityPerSubnet) como zero ou nula. Depois de definir a Quantidade por sub-rede (quantityPerSubnet) como zero ou nulo, você poderá especificar o número de nós de trabalho digitando um valor para Número de Nós (size). A partir desse ponto, você pode excluir nós de trabalho específicos (e selecionar as opções Cordon e drenar).

Para descobrir o valor de Quantidade por sub-rede (quantityPerSubnet) para um pool de nós, digite o seguinte comando:

oci ce node-pool get --node-pool-id <node-pool-ocid>