ULC Lab · implementação reproduzível
Laboratório: Cluster Kubernetes Local com Deploy de Aplicação e Monitoramento Prometheus
Você terá um cluster Kubernetes funcional em três máquinas virtuais, com uma aplicação de exemplo e monitoramento Prometheus. O laboratório leva cerca de 2 horas e meia.

- Duração estimada
- 150 min
- Passos
- 13
- Validações
- 5
- Versões da documentação consultada
- Kubernetes a versão estável atual · Prometheus a versão estável atual · kubectl a versão estável atual · kubeadm a versão estável atual · Docker a versão estável atual
Este laboratório ensina a criar um cluster Kubernetes multi-nó local, implantar uma aplicação web simples e integrar o monitoramento com Prometheus. O objetivo é entender, na prática, como orquestrar workloads resilientes e escaláveis em ambientes reais, como redes de fibra dedicadas da Upnetix.
Topologia
Três máquinas virtuais em rede privada: um nó master (control-plane) e dois nós worker. Todos se comunicam via rede 192.168.56.0/24. O usuário acessa a aplicação e o dashboard Prometheus via browser no host.
Host (192.168.56.1)
|
[VM1: Master 192.168.56.10]
|
--------------------------
| |
[VM2: Worker 192.168.56.11] [VM3: Worker 192.168.56.12]
Equipamentos e software
| Item | Requisito, licença ou versão |
|---|---|
| Máquina Virtual (Master) | 2 vCPU, 2GB RAM, 1 interface de rede, Ubuntu 22.04 |
| Máquina Virtual (Worker 1) | 2 vCPU, 2GB RAM, 1 interface de rede, Ubuntu 22.04 |
| Máquina Virtual (Worker 2) | 2 vCPU, 2GB RAM, 1 interface de rede, Ubuntu 22.04 |
| Kubernetes | Apache 2.0 · a versão estável atual |
| Prometheus | Apache 2.0 · a versão estável atual |
| kubectl | Apache 2.0 · a versão estável atual |
| kubeadm | Apache 2.0 · a versão estável atual |
| Docker | Apache 2.0 · a versão estável atual |
Roteiro
- Preparar as Máquinas Virtuais
Crie três VMs Ubuntu 22.04, cada uma com IP fixo na faixa 192.168.56.10-12. Garanta conectividade entre elas. Isso simula um cluster real.
O que você deve ver: Ping entre as VMs funcionando.
- Instalar Docker em todas as VMs
Kubernetes precisa de um container runtime. Docker é o mais comum para laboratório.
sudo apt update && sudo apt install -y docker.io sudo systemctl enable docker && sudo systemctl start dockerO que você deve ver: docker --version retorna versão atual.
- Desabilitar Swap
O kubelet exige swap desabilitado por padrão. Swap ativo causa falhas imprevisíveis.
sudo swapoff -a sudo sed -i '/ swap / s/^/#/' /etc/fstabO que você deve ver: free -h mostra swap zerado.
- Instalar kubeadm, kubelet e kubectl
Essas ferramentas são essenciais para instalar e operar o cluster.
sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | 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 kubectlO que você deve ver: kubectl version mostra client instalado.
- Inicializar o Cluster Kubernetes no Master
O kubeadm simplifica a criação do cluster. Use o IP do master para garantir comunicação entre os nós.
sudo kubeadm init --apiserver-advertise-address=192.168.56.10 --pod-network-cidr=10.244.0.0/16O que você deve ver: Mensagens de sucesso e comando kubeadm join exibido.
- Configurar kubectl no Master
Permite operar o cluster como usuário normal.
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/configO que você deve ver: kubectl get nodes retorna o master (NotReady).
- Instalar rede de pods (CNI) com Flannel
Kubernetes exige um plugin de rede para comunicação entre pods. Flannel é simples para laboratório.
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.ymlO que você deve ver: kubectl get pods -n kube-system mostra pods flannel rodando.
- Ingressar os Workers no Cluster
Execute o comando kubeadm join exibido no passo 5 em cada worker. Isso conecta os nós ao cluster.
sudo kubeadm join ... (consulte a saída do passo 5)O que você deve ver: kubectl get nodes mostra master e dois workers Ready.
- Deploy de Aplicação Exemplo (nginx)
Implante um deployment nginx para testar workloads.
kubectl create deployment nginx --image=nginx kubectl expose deployment nginx --port=80 --type=NodePortO que você deve ver: kubectl get svc mostra nginx com NodePort.
- Acessar a Aplicação Exemplo
Descubra a porta NodePort e acesse via browser do host.
kubectl get svc nginxO que você deve ver: Acesso ao nginx via http://192.168.56.11:<porta> ou http://192.168.56.12:<porta>.
- Deploy do Prometheus via YAML oficial
Prometheus permite monitorar o cluster. Use o manifest oficial simplificado.
kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/main/bundle.yamlO que você deve ver: kubectl get pods -n default mostra pods Prometheus rodando.
- Expor Prometheus para Acesso Local
Crie um NodePort para acessar o Prometheus pelo browser.
kubectl expose deployment prometheus-operator --type=NodePort --port=8080 --target-port=8080O que você deve ver: kubectl get svc mostra prometheus-operator com NodePort.
- Acessar o Dashboard do Prometheus
Use o IP de um worker e a porta NodePort para acessar o dashboard.
kubectl get svc prometheus-operatorO que você deve ver: Acesso ao Prometheus via browser.
Como saber que funcionou
| Teste | Comando | Critério |
|---|---|---|
| Verificar todos os nós prontos | kubectl get nodes | Todos com STATUS Ready. |
| Verificar pods do nginx rodando | kubectl get pods | STATUS Running para pods nginx. |
| Acessar nginx do browser | Página padrão do nginx exibida. | |
| Verificar pods do Prometheus | kubectl get pods -n default | Pods prometheus-operator Running. |
| Acessar dashboard Prometheus | Interface Prometheus acessível via browser. |
Troubleshooting
| Sintoma | Causa provável | Correção |
|---|---|---|
| kubectl get nodes mostra NotReady | Rede de pods não instalada ou falha no CNI | Verifique o passo de instalação do Flannel e logs dos pods kube-system. |
| Pods em CrashLoopBackOff | Imagem errada ou falta de recursos | Verifique logs com kubectl logs <pod> e ajuste recursos. |
| Não acessa nginx via NodePort | Firewall bloqueando porta ou serviço não exposto | Verifique firewall das VMs e se o NodePort está correto. |
| Prometheus não sobe | Manifest incompleto ou conflito de portas | Consulte logs do pod e ajuste o manifest conforme documentação. |
| kubectl não conecta ao cluster | Configuração ~/.kube/config incorreta | Refaça o passo de configuração do kubectl no master. |
Segurança e hardening
- Nunca exponha NodePort em ambientes de produção sem firewall.
- Altere as senhas padrão do Prometheus e do cluster.
- Restrinja o acesso ao dashboard Prometheus por IP ou autenticação.
- Desabilite portas desnecessárias nas VMs.
- Não use kubeadm init com --apiserver-advertise-address=0.0.0.0 em produção.
Checklist final
Referências
- Kubernetes - Instalação com kubeadm · Kubernetes (CNCF) (kubernetes.io)
- Kubernetes - Deployments · Kubernetes (CNCF) (kubernetes.io)
- Kubernetes - Serviços · Kubernetes (CNCF) (kubernetes.io)
- Prometheus - Getting Started · Prometheus (CNCF) (prometheus.io)
- Publicado
- 09/09/2026
- Última revisão
- 09/09/2026
- Versão do conteúdo
- 1.0
- Referências
- 4 oficiais
- Revisão técnica
- redação e revisão por IA, URLs conferidas na publicação
- Status
- Atual
