Entendendo os nós no k8s
Higor Diego
Posted on October 12, 2021
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"
}
}
}
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"
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
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
kubectl version --client
Para a instalação no MacOS segue os comandos abaixo:
sudo brew install kubectl
kubectl version --client
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
ouFalse
); -
DiskPressure: esse campo sinaliza se contém espaço no disco rígido com o valor (
True
ouFalse
); -
MemoryPressure: esse campo sinaliza se contém espaço em memória com o valor (
True
ouFalse
); -
PIDPressure: esse campo sinaliza se contém muitos processos no nó com o valor (
True
ouFalse
); -
NetworkUnavailable: esse campo sinaliza se a rede do nó está configurado com o valor (
True
ouFalse
);
-
Ready: esse campo sinaliza se o nó está integro ou não com o valor (
- 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
Posted on October 12, 2021
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
November 30, 2024