ULC Lab · implementação reproduzível
Laboratório: Cluster Kubernetes Single Node com Deploy de Aplicação e Monitoramento Prometheus
Você terá um cluster Kubernetes funcional em uma VM, com uma aplicação containerizada rodando e monitoramento básico via Prometheus. O laboratório pode ser concluído em cerca de 2 horas.

- Duração estimada
- 120 min
- Passos
- 12
- Validações
- 4
- Versões da documentação consultada
- Kubernetes a versão estável atual · kubeadm a versão estável atual · Docker ou containerd a versão estável atual · Prometheus a versão estável atual · kubectl a versão estável atual · nginx (container) a versão estável atual
Este laboratório mostra, na prática, como instalar e configurar um cluster Kubernetes de nó único, implantar uma aplicação de exemplo e ativar monitoramento com Prometheus. O objetivo é entender o ciclo completo: provisionamento, deploy, exposição de serviços e coleta de métricas, usando apenas software livre. Ao final, você terá domínio dos comandos essenciais e dos arquivos de configuração mínimos para operar um cluster de containers em ambiente controlado.
Topologia
Uma máquina virtual (192.168.56.10) executa todos os componentes: kube-apiserver, kubelet, kube-proxy, etcd, Prometheus, aplicação de exemplo (nginx). O acesso externo ocorre via porta 80 (aplicação) e 9090 (Prometheus).
+-------------------------+
| Usuário SSH |
+-----------+-----------+
|
192.168.56.10 (VM)
+-------------------+-------------------+
| kube-apiserver, kubelet, etcd, nginx |
| kube-proxy, Prometheus |
+-------------------+-------------------+
| | |
80 6443 9090
(nginx) (API server) (Prometheus)Equipamentos e software
| Item | Requisito, licença ou versão |
|---|---|
| Máquina virtual (VirtualBox, KVM, VMware ou similar) | 2 vCPU, 3 GB RAM, 20 GB disco, 1 interface bridged ou NAT |
| Kubernetes | Apache 2.0 · a versão estável atual |
| kubeadm | Apache 2.0 · a versão estável atual |
| Docker ou containerd | 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 |
| nginx (container) | 2-clause BSD · a versão estável atual |
Roteiro
- Preparar a VM e o sistema operacional
Atualize o sistema e desabilite swap. O swap interfere no kubelet e pode causar falhas imprevisíveis.
sudo apt update && sudo apt upgrade -y sudo swapoff -a sudo sed -i '/ swap / s/^/#/' /etc/fstabO que você deve ver: Sistema atualizado, swap desabilitado permanentemente.
- Instalar containerd
O Kubernetes precisa de um runtime de containers. O containerd é recomendado por ser simples e suportado oficialmente.
sudo apt install -y containerd sudo mkdir -p /etc/containerd sudo containerd config default | sudo tee /etc/containerd/config.toml sudo systemctl restart containerdO que você deve ver: containerd rodando e habilitado.
- Instalar kubeadm, kubelet e kubectl
Essas ferramentas são essenciais para inicializar, gerenciar 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: kubelet, kubeadm e kubectl instalados.
- Inicializar o cluster Kubernetes
O kubeadm automatiza a configuração inicial do cluster. O parâmetro --pod-network-cidr é necessário para a rede de pods.
sudo kubeadm init --pod-network-cidr=10.244.0.0/16O que você deve ver: Cluster inicializado. Mensagem final exibe comandos para configurar o kubectl.
- Configurar o kubectl para o usuário
Permite que o usuário execute comandos kubectl 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 pronto para uso pelo usuário atual.
- Instalar plugin de rede (CNI Flannel)
O Kubernetes exige um plugin CNI para comunicação entre pods. O Flannel é simples e adequado para laboratório.
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.ymlO que você deve ver: Pods do Flannel criados e rodando em kube-system.
- Permitir agendamento de pods no master (single node)
Por padrão, o master não agenda pods. Para laboratório, remova o taint.
kubectl taint nodes --all node-role.kubernetes.io/control-plane-O que você deve ver: Taint removido. Pods podem ser agendados no nó.
- Implantar aplicação de exemplo (nginx)
O nginx é um servidor web leve, útil para validar o funcionamento do cluster.
kubectl create deployment nginx --image=nginx kubectl expose deployment nginx --port=80 --type=NodePortO que você deve ver: Deployment e service criados. nginx rodando como pod.
- Descobrir porta NodePort do nginx
O NodePort expõe o serviço para acesso externo.
kubectl get svc nginxO que você deve ver: Porta NodePort (ex: 30000-32767) listada para acesso ao nginx.
- Instalar Prometheus via manifest oficial
Prometheus coleta métricas do cluster. Usaremos o manifest recomendado para simplicidade.
kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/main/bundle.yamlO que você deve ver: Prometheus Operator e CRDs criados.
- Criar instância Prometheus simples
Crie um recurso Prometheus para iniciar a coleta de métricas.
Consulte a documentação do Prometheus Operator para criar um recurso Prometheus básico: https://prometheus.io/docs/prometheus/latest/getting_started/O que você deve ver: Pod Prometheus rodando.
- Expor Prometheus para acesso externo
Permite acessar a interface web do Prometheus do navegador.
kubectl port-forward svc/prometheus-operated 9090:9090 &O que você deve ver: Prometheus acessível em http://localhost:9090
Como saber que funcionou
| Teste | Comando | Critério |
|---|---|---|
| Verificar status dos pods | kubectl get pods --all-namespaces | Todos os pods em Running ou Completed. |
| Testar acesso ao nginx | curl http://localhost:<NodePort> | Página padrão do nginx exibida. |
| Verificar interface do Prometheus | Acesse http://localhost:9090 no navegador | Interface web do Prometheus carregada. |
| Verificar coleta de métricas do Kubernetes | Na interface do Prometheus, busque por 'up' ou 'kube_' | Métricas do cluster disponíveis. |
Troubleshooting
| Sintoma | Causa provável | Correção |
|---|---|---|
| Pods stuck em ContainerCreating | Plugin de rede (CNI) não instalado ou falha | Reaplique o manifest do Flannel e verifique logs com 'kubectl logs'. |
| kubectl não conecta ao cluster | Arquivo kubeconfig não copiado ou permissões incorretas | Repita o passo de configuração do kubectl. |
| nginx não responde externamente | NodePort não liberado no firewall ou porta errada | Verifique a porta NodePort e ajuste regras de firewall da VM. |
| Prometheus não abre no navegador | Port-forward não ativo ou serviço Prometheus não iniciado | Reinicie o port-forward e confirme se o pod está rodando. |
Segurança e hardening
- Nunca exponha NodePort ou Prometheus diretamente para a internet sem autenticação.
- Remova o taint do master apenas em ambientes de laboratório.
- Restrinja acesso SSH à VM.
- Atualize sempre os manifests e imagens para evitar vulnerabilidades conhecidas.
- Não utilize credenciais padrão em ambientes reais.
Checklist final
Referências
- Kubernetes - Getting Started · Kubernetes (CNCF) (kubernetes.io)
- Instalando plugins de rede · Kubernetes (CNCF) (kubernetes.io)
- Documentação do Prometheus · Prometheus (CNCF) (prometheus.io)
- kubectl Cheat Sheet · Kubernetes (CNCF) (kubernetes.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
