Etapa 2 – Instalação do Cluster Kubernetes com kubeadm Estimated reading: 6 minutes 247 views Contributors Visão GeralDistribuição: Ubuntu Server 22.04 LTS (pode ser Debian 12 também)Componentes principais: kubeadm, kubelet, kubectl, containerdKuebrnetes v1.30Topologia mínima:master1, master2, master3worker1, worker2Load Balancer externo: via HAProxy + Keepalived com IP virtualRede dos pods: CalicoCIDR para pods: 192.168.0.0/162.1 – Preparação de Todos os Nós (master e worker)Executar em todos os nós (masters e workers):# Atualize o sistema sudo apt update && sudo apt upgrade -y # Desative o swap (obrigatório) sudo swapoff -a sudo sed -i '/\/swap.img/ s/^/#/' /etc/fstab # Ative módulos de kernel sudo modprobe overlay sudo modprobe br_netfilter # Carregue os módulos no boot cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF # Parâmetros de rede cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-ip6tables = 1 EOF sudo sysctl --system# Atualize o sistema sudo apt update && sudo apt upgrade -y # Desative o swap (obrigatório) sudo swapoff -a sudo sed -i '/\/swap.img/ s/^/#/' /etc/fstab # Ative módulos de kernel sudo modprobe overlay sudo modprobe br_netfilter # Carregue os módulos no boot cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF # Parâmetros de rede cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-ip6tables = 1 EOF sudo sysctl --system 2.2 – Instalação do container runtime (containerd)sudo apt install -y containerd # Cria o arquivo de configuração padrão sudo mkdir -p /etc/containerd containerd config default | sudo tee /etc/containerd/config.toml # Altere para usar systemd como cgroup sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml # Reinicie o serviço sudo systemctl restart containerd sudo systemctl enable containerdsudo apt install -y containerd # Cria o arquivo de configuração padrão sudo mkdir -p /etc/containerd containerd config default | sudo tee /etc/containerd/config.toml # Altere para usar systemd como cgroup sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml # Reinicie o serviço sudo systemctl restart containerd sudo systemctl enable containerd2.3 – Instalação dos binários Kubernetes# Pré-requisitos sudo apt-get update # apt-transport-https pode ser um pacote fictício; se for, você pode pular esse pacote sudo apt-get install -y apt-transport-https ca-certificates curl gpg # Se o diretório `/etc/apt/keyrings` não existir, ele deve ser criado antes do comando curl, leia a nota abaixo. sudo mkdir -p -m 755 /etc/apt/keyrings curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg # Isso sobrescreve qualquer configuração existente em /etc/apt/sources.list.d/kubernetes.list echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list # Atualize o índice de pacotes apt, instale o kubelet, o kubeadm e o kubectl, e fixe suas versões: sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl# Pré-requisitos sudo apt-get update # apt-transport-https pode ser um pacote fictício; se for, você pode pular esse pacote sudo apt-get install -y apt-transport-https ca-certificates curl gpg # Se o diretório `/etc/apt/keyrings` não existir, ele deve ser criado antes do comando curl, leia a nota abaixo. sudo mkdir -p -m 755 /etc/apt/keyrings curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg # Isso sobrescreve qualquer configuração existente em /etc/apt/sources.list.d/kubernetes.list echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list # Atualize o índice de pacotes apt, instale o kubelet, o kubeadm e o kubectl, e fixe suas versões: sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl2.4 – Configuração do Load Balancer Externo (Alta Disponibilidade)Você precisa de um IP virtual (VIP) para acessar o cluster:IP VIP: 192.168.100.100Usando HAProxy + Keepalived em 2 máquinas (ou no master1 e master2) conforme fizemoz nesta neste tópico Etapa 1 – Instalando HAProxy como Load Balancer2.5 – Inicializar o Cluster no master1No master1:sudo kubeadm init \ --control-plane-endpoint "192.168.100.100:6443" \ --upload-certs \ --pod-network-cidr=192.168.0.0/16sudo kubeadm init \ --control-plane-endpoint "192.168.100.100:6443" \ --upload-certs \ --pod-network-cidr=192.168.0.0/16192.168.100.100 é o IP VIP do Load BalancerApós a conclusão, salve os comandos gerados, como:kubeadm join para os nós workers–control-plane + –certificate-key para outros masters2.6 – Configurar o kubectl no master1mkdir -p $HOME/.kube sudo cp /etc/kubernetes/admin.conf ~/.kube/config sudo chown $(id -u):$(id -g) ~/.kube/configmkdir -p $HOME/.kube sudo cp /etc/kubernetes/admin.conf ~/.kube/config sudo chown $(id -u):$(id -g) ~/.kube/config2.7 – Instalar a CNI (rede do cluster)Use a CNI Calico:kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico.yamlkubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico.yaml2.8 – Adicionar os outros MastersNos nós master2 e master3, execute o comando kubeadm join com as flags:kubeadm join 192.168.100.100:6443 \ --token <TOKEN> \ --discovery-token-ca-cert-hash sha256:<HASH> \ --control-plane \ --certificate-key <CERT_KEY>kubeadm join 192.168.100.100:6443 \ --token <TOKEN> \ --discovery-token-ca-cert-hash sha256:<HASH> \ --control-plane \ --certificate-key <CERT_KEY>2.9 – Adicionar os nós WorkerNos nós worker1 e worker2:kubeadm join 192.168.100.100:6443 \ --token <TOKEN> \ --discovery-token-ca-cert-hash sha256:<HASH>kubeadm join 192.168.100.100:6443 \ --token <TOKEN> \ --discovery-token-ca-cert-hash sha256:<HASH>2.10 – Verificar o clusterNo master1:kubectl get nodes -o widekubectl get nodes -o wideResultado esperado:NAME STATUS ROLES AGE VERSION master1 Ready control-plane 10m v1.28.x master2 Ready control-plane 9m v1.28.x master3 Ready control-plane 8m v1.28.x worker1 Ready <none> 5m v1.28.x worker2 Ready <none> 5m v1.28.xNAME STATUS ROLES AGE VERSION master1 Ready control-plane 10m v1.28.x master2 Ready control-plane 9m v1.28.x master3 Ready control-plane 8m v1.28.x worker1 Ready <none> 5m v1.28.x worker2 Ready <none> 5m v1.28.x2.11 – (Opcional) Instalar o Kubernetes Dashboardkubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yamlkubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yamlCrie um ServiceAccount e role de acesso para autenticação.Conclusão da Etapa 2Seu cluster Kubernetes está:Com 3 masters (alta disponibilidade)Load Balancer (HAProxy) com IP virtual expostoRede funcional com CalicoPronto para instalar serviços essenciais: Ingress, Cert-Manager, Monitoramento, GitOps