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.
- Efetue logon no console do CCE.
- 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.
- 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
- 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"