DEV Community

Higor Diego
Higor Diego

Posted on

Entendendo os nós no k8s

Kubernetes

Introdução

O kubernetes gerência sua carga de trabalho alocando os containers em pods com o intuito de executa-lós em nós. Um nó pode ser uma maquina física ou virtual
dependendo da configuração do seu cluster. Cada nó contém o seu control plane contendo os recursos necessários para executarem os seus pods. A maquina do tipo master é responsável por controlar os nós.

Os componentes inclusos no nó são os kubelet, container runtime e kube-proxy.

Gestão de nós

Existe duas formas para ter um nó adicionado ao Kube-apiserver.

  • O kubelet se registrando no control plane.
  • De forma manual, criando o seu registro com base na configuração de objeto do tipo nó.

No ato da criação do objeto do tipo nó, o control plane é responsável por validar, caso esteja correto, o mesmo cria. Segue abaixo um exemplo do json para criação.

{
    "kind": "Node",
    "apiVersion": "v1",
    "metadata": {
    "name": "10.20.10.125",
    "labels": {
      "name": "criando_nó_k8s"
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Após o registar o nó no kubernetes, o kubelet valida se foi criado com o seu metada.data correspondente. Caso o nó esteja disponível, o mesmo está apto para receber criações de pods, caso contrário o mesmo será ignorado até que esteja pronto
para o recebimento da nova carga.

Quando o nó criado estiver indisponível, sempre será verificado a forma de loop para identificação de um novo status.
Caso queira que não siga a rotina padrão, o mesmo terá que ser excluído de forma manual.

Nó e as suas exclusividades

Cada nó possui o seu nome de identificação, e se houver repetição do mesmo, pode haver duplicação da configuração, e com isso, acabar gerando dificuldade para atualização de dados para o nó, tornando necessário a exclusão de um dos nós em duplicidade, para poder criar um nó com as suas modificações.

Para registrar o nó no kubelet existem alguns comandos, segue abaixo:

  • --kubeconfig essa flag realiza autenticação de dados na Kube-apiserver.
  • --cloud-provider essa flag realiza a leitura de dados do seu cloud-controller-manager.
  • --register-node essa flag realiza o autorregistro em Kube-apiserver.
  • --node-up essa flag informa o endereço físico o famoso ip do nó.
  • --node-status-update-frequency essa flag informa para o kubelet com qual frequência será verificado a saúde do ambiente do nó.

Para criação dos nós, o administrador tem o livre acesso para manusear(manualmente) usando a ferramenta kubectl.

O que é kubectl ?

Kubectl é uma ferramenta em linha de comando com propósito de gerir cluster em kubernetes. Para poder acessar o cluster, necessitar-se de um arquivo de acesso que se localiza no caminho $HOME/.kube.
Caso esse arquivo esteja em outro local, utilize o comando a seguir:

kubectl --kubeconfig "caminho do arquivo"
Enter fullscreen mode Exit fullscreen mode

Podemos instalar a ferramentas nas plataformas GNU/Linux, MacOS e Windows, para instalação dos seus respetivos S.O.

Para a instalação no GNU/Linux segue os comandos abaixo:

curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl
Enter fullscreen mode Exit fullscreen mode
chmod +x ./kubectl
Enter fullscreen mode Exit fullscreen mode
sudo mv ./kubectl /usr/local/bin/kubectl
Enter fullscreen mode Exit fullscreen mode
kubectl version --client
Enter fullscreen mode Exit fullscreen mode

Para a instalação no MacOS segue os comandos abaixo:

sudo brew install kubectl
Enter fullscreen mode Exit fullscreen mode
kubectl version --client
Enter fullscreen mode Exit fullscreen mode

Para a instalação no Windows clique aqui.

Para saber mais sobre a instalação temos a documentação oficial clique aqui.

Com o kubectl podemos modificar os objetos do nó, criando um nó de forma manual usando a flag --register-node=false. Cada nó tem o seu status que contém algumas informações, que são:

  • Address: O uso desse campo muda conforme o seu provedor de nuvem ou configuração manual;
    • Hostname: esse campo é para sinalizar o nome do nó, podendo mudar o nome usando a seguinte flag `--hostname-override;
    • ExternalIP: esse campo é para sinalizar o IP externo do seu cluster;
    • InternalIP: esse campo é para sinalizar o IP interno do seu cluster;
  • Conditions: esse campo é responsável por sinalizar a condição do status dos nós em execução;
    • Ready: esse campo sinaliza se o nó está integro ou não com o valor (True ou False);
    • DiskPressure: esse campo sinaliza se contém espaço no disco rígido com o valor (True ou False);
    • MemoryPressure: esse campo sinaliza se contém espaço em memória com o valor (True ou False);
    • PIDPressure: esse campo sinaliza se contém muitos processos no nó com o valor (True ou False);
    • NetworkUnavailable: esse campo sinaliza se a rede do nó está configurado com o valor (True ou False);
  • Capacity and Allocatable: esse campo determinar a quantidade de recursos que estão disponíveis no nó, como CPU, memória e a quantidade de pods que cabem no nó;
  • Info: esse campo determina as informações sobre os nós, por exemplo: versão de kernel, tempo de execução do containers e dados sobre o sistema operacional do nó.

Heartbeats

Esse recurso é responsável por validar a disponibilidade dos nós, com intuito de identificar falha computacional, e agir quando ocorrerem. Existindo assim, duas formas para o heartbeats, que são:

  • Atualizações com o status de um nó;
  • Com Lease no seu namespace no kube-node-lease e cada nó possui o seu objeto.

O kubelet é responsável por atualizar e criar o .status dos nós quando houverem mudanças.

O intervalo para atualização do .status do nó por padrão é de 5 minutos, já os nós inacessíveis são apenas 40 segundos.

Então é isso galera, espero que tenham gostado e até a próxima!

Referências

https://kubernetes.io/docs/concepts/architecture/nodes/#node-controller
https://kubernetes.io/docs/reference/kubernetes-api/cluster-resources/lease-v1/
https://livro.descomplicandokubernetes.com.br/pt/day_one/descomplicando_kubernetes.html

Top comments (0)