Skip to main content

Criando um cluster no datacenter

Criando um cluster simples com 1 master e 1 node.

Requisitos

  • 2 máquinas (1 master + 1 ou mais workers)
  • Ubuntu 20.04+ ou similar
  • Acesso root/sudo
  • Conectividade entre os nós
  • Swap desativado: sudo swapoff -a

Passo 1: Instalando o runtime

O kubernetes é um gerenciado de container, porém ele usa outra ferramenta como runtime para criar e apagar os containers. Nesse caso vamos usar como runtime o containerd.

sudo apt update
sudo apt install -y containerd

Configurar containerd com CNI e Systemd

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

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

SystemdCgroup = true

Depois reinicie o serviço:

sudo systemctl restart containerd
sudo systemctl enable containerd

Passo 2: Instalar kubeadm, kubelet e kubectl

Instale as ferramentas abaixo nas VMs que serão master e node.

sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gpg
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.33/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.33/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm
sudo systemctl enable --now kubelet

Passo 3: Inicializar o nó mestre

Como sera usaro o Calico como CNI, o vamos usaro cidr abaixo.

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

Configure o acesso ao cluster:

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

Passo 4: Instalar rede de pods

O Kubernetes não fornece uma rede de pods por padrão. Por isso vamos implementa uma CNI (Container Network Interface), que permite que os pods se comuniquem entre si e com o mundo externo.

Sem uma CNI como o Calico, os pods não conseguem se conectar — nem mesmo ao DNS interno do cluster.

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

Passo 5: Adicionar nós workers

No worker, execute o comando gerado pelo kubeadm init:

sudo kubeadm join <IP-do-master>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>

Se precisar recuperar o comando:

kubeadm token create --print-join-command

Passo 6: Verificar o estado do cluster

kubectl get nodes
kubectl get pods --all-namespaces