ULC Lab · implementação reproduzível
Laboratório: Cluster Kubernetes com Helm e Prometheus em Nuvem Privada
Você terá um cluster Kubernetes funcional em três máquinas virtuais, com Helm instalado e Prometheus monitorando o ambiente. A execução leva cerca de 2 horas.

- Duração estimada
- 120 min
- Passos
- 12
- Validações
- 4
- Versões da documentação consultada
- Kubernetes (kubeadm, kubelet, kubectl) a versão estável atual · Helm a versão estável atual · Prometheus a versão estável atual
Este laboratório ensina como criar um cluster Kubernetes do zero em ambiente privado, instalar Helm para gerenciar aplicações e configurar Prometheus para monitoramento. O foco é a prática de integração de componentes essenciais, preparando para operar aplicações resilientes em nuvens privadas.
Topologia
Três VMs em rede privada: um nó master (192.168.56.10) e dois nós worker (192.168.56.11 e 192.168.56.12). Todos conectados via rede virtual. O master gerencia o cluster, os workers executam cargas. Helm e Prometheus são instalados no cluster.
+-------------------+
| VM1: Master |
| 192.168.56.10 |
+---------+---------+
|
----------------+----------------
| |
+--+-------------+ +-------+-------------+
| VM2: Worker | | VM3: Worker |
| 192.168.56.11 | | 192.168.56.12 |
+----------------+ +--------------------+Equipamentos e software
| Item | Requisito, licença ou versão |
|---|---|
| VM ou máquina física | CPU dual-core, 2 GB RAM, 20 GB disco, 1 interface de rede, Ubuntu 22.04 LTS ou similar |
| Kubernetes (kubeadm, kubelet, kubectl) | Apache 2.0 · a versão estável atual |
| Helm | Apache 2.0 · a versão estável atual |
| Prometheus | Apache 2.0 · a versão estável atual |
Roteiro
- Preparar as VMs e rede privada
Garanta três VMs acessíveis entre si, com IPs fixos na faixa 192.168.56.10-12. O master deve ter acesso SSH aos workers. O porquê: isolamento e controle total do ambiente.
O que você deve ver: Ping entre as VMs funciona. SSH do master para os workers sem senha (use ssh-copy-id).
- Configurar pré-requisitos do Kubernetes
Desative swap, ajuste sysctl e instale dependências. O Kubernetes exige swap desativado para garantir previsibilidade.
sudo swapoff -a sudo sed -i '/ swap / s/^/#/' /etc/fstab sudo modprobe br_netfilter echo 'net.bridge.bridge-nf-call-iptables=1' | sudo tee -a /etc/sysctl.d/k8s.conf sudo sysctl --system sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curlO que você deve ver: Swap desativado e sysctl ajustado em todas as VMs.
- Instalar Docker como runtime de contêiner
O Kubernetes precisa de um runtime compatível. Docker é o mais comum para laboratórios.
sudo apt-get install -y docker.io sudo systemctl enable docker && sudo systemctl start dockerO que você deve ver: Docker ativo em todas as VMs. 'docker ps' mostra lista vazia.
- Instalar Kubernetes (kubeadm, kubelet, kubectl)
Esses componentes são essenciais: kubeadm para inicialização, kubelet para execução, kubectl para administração.
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg sudo apt-add-repository "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectlO que você deve ver: kubeadm, kubelet e kubectl disponíveis em todas as VMs.
- Inicializar o cluster Kubernetes no master
O master orquestra o cluster. O comando abaixo inicializa o cluster e define o pod network CIDR.
sudo kubeadm init --pod-network-cidr=10.244.0.0/16O que você deve ver: Mensagem de sucesso com token de join para os workers.
- Configurar kubectl no master
Permite ao usuário controlar o cluster sem sudo.
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' mostra apenas o master (NotReady).
- Instalar rede de pods (CNI Flannel)
O Kubernetes exige uma rede de pods para comunicação interna. Flannel é simples e aberto.
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.ymlO que você deve ver: Pods do flannel iniciam e o master fica Ready.
- Adicionar os workers ao cluster
Os workers executam aplicações. Use o comando de join gerado pelo kubeadm.
sudo kubeadm join 192.168.56.10:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>O que você deve ver: 'kubectl get nodes' mostra master e workers como Ready.
- Instalar Helm no master
Helm facilita a instalação de aplicações no Kubernetes.
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bashO que você deve ver: 'helm version' retorna versão instalada.
- Adicionar repositório Helm stable
Para instalar charts populares, adicione o repositório padrão.
helm repo add stable https://charts.helm.sh/stable helm repo updateO que você deve ver: Repositório stable adicionado e atualizado.
- Instalar Prometheus via Helm
Prometheus monitora o cluster. Usar Helm simplifica a implantação.
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update helm install prometheus prometheus-community/prometheusO que você deve ver: 'kubectl get pods' mostra pods do Prometheus rodando.
- Expor o Prometheus para acesso externo (NodePort)
Permite acessar a interface web do Prometheus pelo IP do master.
kubectl patch svc prometheus-server -p '{"spec": {"type": "NodePort"}}'O que você deve ver: 'kubectl get svc' mostra o prometheus-server com um NodePort atribuído.
Como saber que funcionou
| Teste | Comando | Critério |
|---|---|---|
| Verificar status dos nós | kubectl get nodes | Todos os nós com STATUS Ready |
| Verificar pods do Prometheus | kubectl get pods | Pods do Prometheus em STATUS Running |
| Acessar interface web do Prometheus | Acesso via http://<IP-do-master>:<NodePort> exibe dashboard do Prometheus | |
| Verificar Helm funcionando | helm list | Prometheus listado como release instalado |
Troubleshooting
| Sintoma | Causa provável | Correção |
|---|---|---|
| Nó worker não aparece como Ready | Rede de pods não instalada ou erro no comando de join | Reaplique o Flannel e confira o comando de join |
| Pods do Prometheus não iniciam | Recursos insuficientes ou erro de configuração | Verifique logs com 'kubectl logs' e ajuste recursos das VMs |
| Não acessa Prometheus via NodePort | Firewall bloqueando porta ou serviço não exposto | Libere a porta no firewall e confirme o NodePort atribuído |
| kubectl retorna erro de permissão | Configuração do kubeconfig incorreta | Refaça a cópia do admin.conf para $HOME/.kube/config |
Segurança e hardening
- Restrinja o acesso SSH apenas a IPs confiáveis
- Altere o token de join após uso
- Não exponha portas NodePort para a internet pública sem autenticação
- Aplique atualizações de segurança do sistema operacional e dos componentes Kubernetes
Checklist final
Referências
- Kubernetes - Instalação via kubeadm · Kubernetes (CNCF) (kubernetes.io)
- Kubernetes - Inicialização do cluster · Kubernetes (CNCF) (kubernetes.io)
- Helm - Instalação · Helm (CNCF) (helm.sh)
- Prometheus - Documentação oficial · 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
