Entrar ou criar conta

ULC Lab · implementação reproduzível

Laboratório: Orquestração de Aplicação IoT Urbana com Kubernetes e MQTT

Você implementará um cluster Kubernetes local, implantará um broker MQTT de código aberto e um simulador de sensores IoT. Em cerca de 2 horas, verá dados fluindo de sensores simulados para o broker, tudo orquestrado pelo Kubernetes.

Kubernetes para IoT urbano: orquestração e resiliência
Ligado ao treinamento Kubernetes para IoT urbano: orquestração e resiliência
ULC-LAB-SMAR-0003 · Status de validaçãoNão validado pela Upnetix: roteiro derivado da documentação oficial, para você executar e validar
Duração estimada
120 min
Passos
12
Validações
5
Versões da documentação consultada
Kubernetes a versão estável atual · kubectl a versão estável atual · Eclipse Mosquitto a versão estável atual · mosquitto-clients a versão estável atual · Docker a versão estável atual
Objetivo

Este laboratório mostra, na prática, como orquestrar aplicações IoT em Kubernetes. Você verá como um broker MQTT pode ser implantado e exposto em um cluster, e como sensores simulados podem ser escalados e gerenciados como pods. O objetivo é entender o fluxo de dados, a resiliência e a escalabilidade do Kubernetes em cenários urbanos típicos de cidades inteligentes.

Topologia

Três máquinas virtuais ou hosts: uma como master do Kubernetes, duas como workers. O cluster executa um broker MQTT (Eclipse Mosquitto) e múltiplos pods simulando sensores IoT, todos na mesma rede privada (exemplo: 192.168.56.0/24). Os sensores enviam dados ao broker, que pode ser acessado externamente.

    [sensor1 pod]   [sensor2 pod]   [sensorN pod]
         |              |               |
         +--------------+---------------+
                        |
              [Mosquitto broker pod]
                        |
               [Kubernetes Cluster]
          /                               \
 [worker1 VM]                        [worker2 VM]
                        |
                  [master VM]

Equipamentos e software

ItemRequisito, licença ou versão
VM ou host master1 vCPU, 2GB RAM, Ubuntu 22.04 ou similar
VM ou host worker 11 vCPU, 1GB RAM, Ubuntu 22.04 ou similar
VM ou host worker 21 vCPU, 1GB RAM, Ubuntu 22.04 ou similar
KubernetesApache 2.0 · a versão estável atual
kubectlApache 2.0 · a versão estável atual
Eclipse MosquittoEPL/EDL · a versão estável atual
mosquitto-clientsEPL/EDL · a versão estável atual
DockerApache 2.0 · a versão estável atual

Roteiro

  1. Preparar as máquinas virtuais

    Instale Ubuntu 22.04 ou similar nas três VMs. Configure rede NAT ou bridge para comunicação entre elas.

    O que você deve ver: As três VMs se comunicam entre si via ping.

  2. Instalar Docker em todas as VMs

    Kubernetes depende do container runtime. Docker é o mais usado em laboratórios.

    sudo apt update && sudo apt install -y docker.io
    sudo systemctl enable docker && sudo systemctl start docker

    O que você deve ver: docker --version retorna a versão instalada.

  3. Instalar Kubernetes (kubeadm, kubelet, kubectl)

    Kubeadm simplifica a criação do cluster. Instale em todas as VMs.

    sudo apt update && sudo apt 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 update && sudo apt install -y kubelet kubeadm kubectl
    sudo apt-mark hold kubelet kubeadm kubectl

    O que você deve ver: kubeadm version retorna a versão instalada.

  4. Inicializar o cluster Kubernetes no master

    O master gerencia o cluster. Inicialize o cluster e anote o token de join.

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

    O que você deve ver: Mensagem com kubeadm join e token.

  5. Configurar kubectl no master

    kubectl precisa de acesso ao kubeconfig para operar o cluster.

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

    O que você deve ver: kubectl get nodes mostra apenas o master (NotReady).

  6. Instalar rede de pods (CNI Flannel)

    Kubernetes exige um plugin de rede para comunicação entre pods.

    kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

    O que você deve ver: kubectl get pods -n kube-system mostra pods flannel Running.

  7. Ingressar os workers no cluster

    Execute o comando kubeadm join nas VMs worker, usando o token gerado.

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

    O que você deve ver: kubectl get nodes mostra master e dois workers Ready.

  8. Implantar o broker MQTT (Mosquitto) via Deployment

    Mosquitto será o ponto central de mensagens IoT. Use um Deployment para garantir resiliência.

    kubectl create deployment mosquitto --image= eclipse-mosquitto:2.0
    kubectl expose deployment mosquitto --port=1883 --type=NodePort

    O que você deve ver: kubectl get pods mostra o pod mosquitto Running.

  9. Criar simuladores de sensores IoT

    Simule sensores como pods que publicam mensagens MQTT periodicamente.

    kubectl run sensor-sim-1 --image= eclipse-mosquitto:2.0 --restart=Never -- /bin/sh -c 'while true; do mosquitto_pub -h mosquitto -t cidade/temperatura -m "temp:$(date +%s)"; sleep 5; done'
    kubectl run sensor-sim-2 --image= eclipse-mosquitto:2.0 --restart=Never -- /bin/sh -c 'while true; do mosquitto_pub -h mosquitto -t cidade/umidade -m "umid:$(date +%s)"; sleep 5; done'

    O que você deve ver: kubectl get pods mostra os pods sensor-sim-1 e sensor-sim-2 Running.

  10. Expor o broker MQTT para acesso externo

    O tipo NodePort permite acessar o Mosquitto de fora do cluster.

    kubectl get service mosquitto

    O que você deve ver: Porta NodePort (ex: 30000-32767) listada para o serviço mosquitto.

  11. Testar recebimento de dados MQTT externamente

    Use o mosquitto_sub em qualquer VM para verificar se as mensagens chegam ao broker.

    mosquitto_sub -h <worker-ip> -p <nodeport> -t cidade/#

    O que você deve ver: Mensagens de temperatura e umidade aparecem a cada 5 segundos.

  12. Escalar simuladores de sensores

    Mostre a facilidade de escalar pods no Kubernetes.

    kubectl scale --replicas=5 deployment/sensor-sim-1

    O que você deve ver: kubectl get pods mostra 5 pods sensor-sim-1.

Como saber que funcionou

TesteComandoCritério
Verificar se todos os nodes estão Readykubectl get nodesmaster e dois workers com STATUS Ready
Verificar se o Mosquitto está rodandokubectl get pods -l app=mosquittoSTATUS Running
Verificar publicação dos sensoreskubectl logs sensor-sim-1Logs mostram publicações MQTT periódicas
Verificar recebimento externo via mosquitto_submosquitto_sub -h <worker-ip> -p <nodeport> -t cidade/#Mensagens recebidas em tempo real
Verificar escalabilidade dos simuladoreskubectl get pods | grep sensor-sim-1Quantidade de pods igual ao valor de replicas

Troubleshooting

SintomaCausa provávelCorreção
Pods em CrashLoopBackOffImagem incorreta ou comando inválidoVerifique logs com kubectl logs <pod> e ajuste o comando ou imagem
Não recebe mensagens MQTT externamentePorta NodePort não liberada ou IP incorretoConfirme IP do worker e porta NodePort com kubectl get service
kubectl get nodes mostra NotReadyRede de pods (CNI) não instalada corretamenteReaplique o manifesto do Flannel e aguarde inicialização
Simuladores não conseguem publicar no brokerNome do serviço Mosquitto incorreto ou não resolvidoConfirme nome do serviço e conectividade DNS entre pods

Segurança e hardening

  • Nunca exponha o NodePort do Mosquitto em ambientes reais sem autenticação e TLS
  • Restrinja acesso à API do Kubernetes apenas a administradores
  • Remova pods de teste e simuladores após o laboratório
  • Use namespaces separados para aplicações reais

Checklist final

Referências

  1. Kubernetes - Getting started · Kubernetes (CNCF) (kubernetes.io)
  2. Kubernetes - Networking · Kubernetes (CNCF) (kubernetes.io)
  3. kubectl - Official Docs · Kubernetes (CNCF) (kubernetes.io)
Verificação editorial
Publicado
09/09/2026
Última revisão
09/09/2026
Versão do conteúdo
1.0
Referências
3 oficiais
Revisão técnica
redação e revisão por IA, URLs conferidas na publicação
Status
Atual
Encontrou um erro? Escreva para comercial@upnetix.com.br com o endereço da página. A revisão semestral por IA nunca altera comandos ou configurações sem passar pela fila de revisão.