🇺🇸 English version coming soon.

Na Parte 1 desta série, preparamos o ambiente: definimos o hardware, configuramos o /etc/hosts, ajustamos o firewall e desabilitamos o SWAP em todos os nós. Agora que a base está pronta, é hora de instalar o container runtime (containerd) e os pacotes do próprio Kubernetes (kubelet e kubeadm).

Todos os passos abaixo devem ser executados em todos os servidores do cluster — master e workers — a menos que seja indicado o contrário.

Carregando os módulos do kernel

O Kubernetes, através do containerd, depende de dois módulos do kernel Linux: overlay (para o sistema de arquivos em camadas usado pelos containers) e br_netfilter (para que o tráfego de rede em bridges passe pelas regras do iptables).

Para que esses módulos sejam carregados automaticamente a cada boot, crie o arquivo /etc/modules-load.d/containerd.conf:

overlay
br_netfilter

Enter fullscreen mode Exit fullscreen mode

E, para carregá-los imediatamente (sem precisar reiniciar), execute:

$ sudo modprobe overlay
$ sudo modprobe br_netfilter

Enter fullscreen mode Exit fullscreen mode

Ajustando parâmetros de rede do kernel

Crie o arquivo /etc/sysctl.d/99-kubernetes-k8s.conf com os seguintes parâmetros:

net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1

Enter fullscreen mode Exit fullscreen mode

Esses parâmetros garantem que o tráfego de rede entre pods e serviços seja roteado e filtrado corretamente pelo Kubernetes.

Para aplicar as configurações sem reiniciar o servidor:

$ sudo sysctl --system

Enter fullscreen mode Exit fullscreen mode

Instalando o containerd

O containerd é o container runtime utilizado pelo cluster. Neste caso, vamos instalá-lo através do repositório oficial do Docker, usando apenas o pacote containerd.io (sem instalar o Docker completo).

1. Baixe a chave GPG do repositório:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/docker.gpg

Enter fullscreen mode Exit fullscreen mode

2. Crie o arquivo de repositório em /etc/apt/sources.list.d/docker.list:

deb [arch=amd64] https://download.docker.com/linux/debian bullseye stable

Enter fullscreen mode Exit fullscreen mode

3. Atualize a lista de pacotes e instale o containerd:

sudo apt-get update
sudo apt-get install containerd.io

Enter fullscreen mode Exit fullscreen mode

4. Gere o arquivo de configuração padrão do containerd:

$ sudo containerd config default > /etc/containerd/config.toml

Enter fullscreen mode Exit fullscreen mode

5. Ative o cgroup driver systemd

Edite o arquivo /etc/containerd/config.toml:

sudo vim /etc/containerd/config.toml

Enter fullscreen mode Exit fullscreen mode

E altere a opção SystemdCgroup de false para true. Esse ajuste é importante porque o kubelet, por padrão, também utiliza o systemd como cgroup driver — mantê-los alinhados evita instabilidades no gerenciamento de recursos dos containers.

6. Reinicie o containerd para aplicar as mudanças:

sudo systemctl restart containerd

Enter fullscreen mode Exit fullscreen mode

Instalando o Kubernetes

Com o containerd em execução, o próximo passo é instalar os componentes do Kubernetes: kubelet e kubeadm.

1. Adicione a chave GPG do repositório do Kubernetes:

curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.31/deb/Release.key | gpg --dearmor -o /etc/apt/trusted.gpg.d/kubernetes-gpg-keyring.gpg

Enter fullscreen mode Exit fullscreen mode

2. Adicione o repositório do Kubernetes, criando o arquivo /etc/apt/sources.list.d/kubernetes.list:

deb [signed-by=/etc/apt/trusted.gpg.d/kubernetes-gpg-keyring.gpg] http://pkgs.k8s.io/core:/stable:/v1.31/deb/ /

Enter fullscreen mode Exit fullscreen mode

Nota: esta série usa a versão 1.31 do Kubernetes. Se quiser instalar outra versão, basta trocar o número v1.31 na URL acima pela versão desejada.

3. Atualize a lista de pacotes:

sudo apt update

Enter fullscreen mode Exit fullscreen mode

4. Instale o Kubernetes:

sudo apt install kubelet kubeadm

Enter fullscreen mode Exit fullscreen mode

5. Trave a versão dos pacotes, para evitar que sejam atualizados automaticamente (o que poderia quebrar a compatibilidade do cluster):

sudo apt-mark hold kubelet kubeadm

Enter fullscreen mode Exit fullscreen mode

6. Habilite o kubelet para iniciar automaticamente no boot:

sudo systemctl enable kubelet

Enter fullscreen mode Exit fullscreen mode

Limitando o armazenamento de imagens

Por padrão, o kubelet pode acumular imagens de containers ao longo do tempo, consumindo espaço em disco. Para evitar isso, é possível configurar limites de garbage collection de imagens no arquivo /var/lib/kubelet/kubeadm-flags.env:

vim /var/lib/kubelet/kubeadm-flags.env

Enter fullscreen mode Exit fullscreen mode

Adicione as flags:

--image-gc-high-threshold=60 --image-gc-low-threshold=50

Enter fullscreen mode Exit fullscreen mode

Isso instrui o kubelet a começar a remover imagens não utilizadas quando o disco atingir 60% de uso, parando a limpeza quando chegar a 50%.

Próximos passos

Com o containerd instalado, configurado com o cgroup driver correto, e com o kubelet e kubeadm prontos em todos os nós, já temos tudo o que precisamos para inicializar o cluster.

Na Parte 3 desta série, vamos usar o kubeadm init para criar o control-plane no servidor master e, em seguida, unir os workers ao cluster.

Continua na Parte 3.