Instalar Kubernetes - Ubuntu Server 24.04

Olá Pessoal,

Ultimamente tenho trabalhado e verificado diversos tópicos relacionados as novas arquiteturas de disponibilização das aplicações como sendo definidas de micro-serviços, ou seja, o que isso significa.

Na minha definição seria um conjunto independente de serviços que se comunica por meio de APIs, ou seja, a criação de um software, em que cada função principal de uma aplicação pode existir de maneira independente tornando esses serviços segregados. Cada um dos componentes ou processos é um micro-serviço, essa abordagem de desenvolvimento de software valoriza a granularidade, leveza e a capacidade de compartilhar processos.

Pensando nesses parâmetros, decidi montar um LAB básico para verificar o funcionamento, praticar alguns conceitos e entendimento desse movimento, pois tenho o propósito de compartilhar os testes e evolução de entrega dessas aplicações através de uma arquitetura utilizando o balanceador de carga Netscaler.

Obviamente, como mencionado é um laboratório local na minha máquina e devido a escassez de recursos processamento não seria o ideal, porém acho interessante somente para efeito de testes básicos. Esse serviço é entregue através de um cluster de Kubernetes e para ter esse serviço criei esse ambiente utilizando o Ubuntu Server 24.04.

Não vou entrar nesse momento nos detalhes do Kubernetes, pois minha intenção nesse post é efetuar a instalação do cluster no servidor, lembrando que em teoria teríamos que ter 3 Servidores Linux para colocar o serviço de Kubernetes em funcionamento, porém como mencionado devido a escassez de recurso vou utilizar apenas um servidor sendo ele ao mesmo tempo o Master Controller(Control-Plane) e os Worker Nodes do cluster.

Instalação

Segue abaixo os comandos para instalação do cluster:


# Fazer updates
sudo apt update && sudo apt upgrade -y
sudo apt install -y apt-transport-https ca-certificates curl

# Swap de memória
sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab

# Preparar instalação
sudo modprobe overlay
sudo modprobe br_netfilter

sudo tee /etc/modules-load.d/k8s.conf <<EOF
overlay
br_netfilter
EOF

sudo tee /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

sudo sysctl --system

sudo apt install -y containerd

sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml >/dev/null

sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml

sudo systemctl restart containerd
sudo systemctl enable containerd

sudo curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/kubernetes-apt-keyring.gpg
echo "deb https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list

sudo apt update

# Instalar cluster e administração
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

sudo kubeadm init --pod-network-cidr=10.244.0.0/16

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

# Esse processo está relacionado para habilitar o Master Node como sendo também um Worker Node. Vale ressaltar que quando habilitado não teremos a nomenclatura de Worker Node.
kubectl taint nodes --all node-role.kubernetes.io/control-plane-

# Validar Cluster
kubectl get nodes
kubectl get pods -A

Validação

Conforme menção seguem os status após finalização da instalação em meu ambiente de teste.

Commands_Pods_Kubernetes_Cluster

Customização

Devido alguns pontos que vivenciei principalmente por ser o ambiente virtualizado e novamente dentro do contexto de recursos internos da minha máquina host, passo dois itens importantes que você pode habilitar e gerenciar em questão de espaço.

Depois de iniciar novamente o servidor é necessário habilitar novamente o swap of memory do servidor, senão o serviço kubernetes não fica operacional. Para evitar essa configuração podemos habilitar permanentemente o swap de memória editando uma caminho específico. Segue abaixo:


sudo nano /etc/fstab

Procure pela referência de /swap.img ou /sev/sdX e efetue o comentário dessa linha, conforme imagem abaixo:

Customize_Swap_Memory

Caso você queira gerenciar as imagens dockers que foram feito download dos containers e posteriormente baseado em testes de serviços que você deseja fazer, pode ocupar espaços desnecessários na VM, portanto você pode gerenciar as imagens dos containers conforme abaixo.


# Instalar a CLI para gestão dos containers
sudo apt install -y cri-tools

# Verificar as imagens
crictl images

# Deletar caso haja necessidade de algum container
crictl rmi IMAGE_ID

Conclusão

Neste post a intenção foi justamente transformar o ambiente de Kubernetes cluster em um único nó para diminuir recursos de provisionamento para uma características de laboratório. Espero que isso possa ajudar a você construir facilmente seu laboratório e testar seus serviços nesse ambiente. 😜

Atte,

Rodrigo