Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Atualizado em 2024-11-28 GMT+08:00

Gerenciamento de manchas de nó

Manchas permitem que um nó repela pods específicos para evitar que esses pods sejam agendados para o nó.

Manchas

Uma mancha é um par de chave-valor associado a um efeito. Os seguintes efeitos estão disponíveis:

  • NoSchedule: nenhum pod será agendado para o nó, a menos que tenha uma tolerância correspondente. Os pods existentes não serão despejados do nó.
  • PreferNoSchedule: o Kubernetes impede que pods que não podem tolerar essa mancha sejam agendados no nó.
  • NoExecute: se o pod estiver sendo executado em um nó, o pod será despejado do nó. Se o pod não estiver sendo executado em um nó, o pod não será agendado para o nó.

Para adicionar uma mancha a um nó, execute o comando kubectl taint node nodename da seguinte forma:

$ kubectl get node
NAME             STATUS   ROLES    AGE    VERSION
192.168.10.170   Ready    <none>   73d    v1.19.8-r1-CCE21.4.1.B003
192.168.10.240   Ready    <none>   4h8m   v1.19.8-r1-CCE21.6.1.2.B001
$ kubectl taint node 192.168.10.240 key1=value1:NoSchedule
node/192.168.10.240 tainted

Para visualizar a configuração do mancha, execute os comandos describe e get da seguinte forma:

$ kubectl describe node 192.168.10.240
Name:               192.168.10.240
...
Taints:             key1=value1:NoSchedule
...
$ kubectl get node 192.168.10.240 -oyaml
apiVersion: v1
...
spec:
  providerID: 06a5ea3a-0482-11ec-8e1a-0255ac101dc2
  taints:
  - effect: NoSchedule
    key: key1
    value: value1
...

Para remover uma mancha, execute o seguinte comando com um hífen (-) adicionado após NoSchedule:

$ kubectl taint node 192.168.10.240 key1=value1:NoSchedule-
node/192.168.10.240 untainted
$ kubectl describe node 192.168.10.240
Name:               192.168.10.240
...
Taints:             <none>
...

No console do CCE, você também pode gerenciar manchas de um nó em lotes.

  1. Efetue logon no console do CCE.
  2. Clique no nome do cluster, acesse a página de detalhes do cluster e escolha Nodes no painel de navegação. Na página exibida, selecione um nó e clique em Manage Labels and Taints.
  3. Na caixa de diálogo exibida, clique em Add batch operations em Batch Operation, escolha Add/Update e selecione Taint.

    Digite a chave e o valor da mancha a ser adicionado, selecione o efeito de mancha e clique em OK.

    Figura 1 Adicionar uma mancha

  4. Depois que a mancha for adicionada, verifique a mancha adicionada nos dados do nó.

Manchas do sistema

Quando alguns problemas ocorrem em um nó, o Kubernetes adiciona automaticamente uma mancha ao nó. As manchas embutidas são as seguintes:

  • node.kubernetes.io/not-ready: o nó não está pronto. O valor Ready do nó é False.
  • node.kubernetes.io/unreachable: o controlador de nó não pode acessar o nó. O valor de nó Ready é Unknown.
  • node.kubernetes.io/memory-pressure: a memória do nó está se aproximando do limite superior.
  • node.kubernetes.io/disk-pressure: o espaço em disco do nó está se aproximando do limite superior.
  • node.kubernetes.io/pid-pressure: os PIDs do nó estão se aproximando do limite superior.
  • node.kubernetes.io/network-unavailable: o nó da rede não está indisponível.
  • node.kubernetes.io/unschedulable: o nó não pode ser agendado.
  • node.cloudprovider.kubernetes.io/uninitialized: se um driver de plataforma de nuvem externa for especificado quando o kubelet for iniciado, o kubelet adicionará um taint ao nó atual e o marcará como indisponível. Depois que um controlador do cloud-controller-manager inicializar o nó, o kubelet excluirá a mancha.

Configurações de agendamento de nó

Para configurar a programação, faça logon no console do CCE, clique no cluster, escolha Nodes no painel de navegação e clique em More > Disable Scheduling na coluna Operation de um nó na lista de nós.

Na caixa de diálogo exibida, clique em OK para definir o nó a ser unschedulable.

Esta operação adicionará uma mancha ao nó. Você pode usar o kubectl para visualizar o conteúdo da mancha.

$ kubectl describe node 192.168.10.240
...
Taints:             node.kubernetes.io/unschedulable:NoSchedule
...

No console do CCE, escolha More > Enable scheduling para remover a mancha e ajustar o nó para ser programável.

Tolerâncias

Tolerâncias são aplicadas aos pods e permitem (mas não exigem) que os pods se programem em nós com manchas correspondentes.

Manchas e tolerâncias trabalham juntas para garantir que os pods não sejam agendados para nós inadequados. Uma ou mais manchas são aplicadas a um nó. Isso marca que o nó não deve aceitar quaisquer vagens que não toleram as manchas.

Exemplo:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    env: test
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  tolerations:
  - key: "key1"
    operator: "Equal"
    value: "value1"
    effect: "NoSchedule"  

No exemplo anterior, o rótulo de tolerância do pod é key1=value1 e o efeito de mancha é NoSchedule. Portanto, o pod pode ser programado no nó correspondente.

Você também pode configurar tolerâncias semelhantes às informações a seguir, o que indica que o pod pode ser agendado em um nó quando o nó tiver a mancha key1:

tolerations:
- key: "key1"
  operator: "Exists"
  effect: "NoSchedule"