ULC Lab · implementação reproduzível
Laboratório: Orquestração de IoT ponta a ponta com KubeEdge, Mosquitto e Prometheus
Você terá um ambiente funcional de IoT com KubeEdge, simulando um cluster Kubernetes na nuvem, um nó de borda, um broker MQTT e monitoramento Prometheus. Tudo rodando em VMs ou máquinas físicas comuns em cerca de 2 horas.

- Duração estimada
- 120 min
- Passos
- 11
- Validações
- 4
- Versões da documentação consultada
- Kubernetes a versão estável atual · KubeEdge a versão estável atual · Eclipse Mosquitto a versão estável atual · Prometheus a versão estável atual
Este laboratório mostra como orquestrar aplicações de IoT usando KubeEdge, conectando dispositivos simulados a um cluster Kubernetes, com comunicação MQTT e monitoramento. Você vai entender, na prática, como edge nodes interagem com a nuvem, como os dados fluem via MQTT e como monitorar o ambiente.
Topologia
Três máquinas (ou VMs) em rede privada: uma para o cluster Kubernetes (192.168.56.10), uma para o edge node KubeEdge (192.168.56.20) e uma para o broker MQTT (192.168.56.30). O cluster gerencia workloads, o edge node executa aplicações de borda, o broker MQTT faz a ponte de mensagens IoT. Prometheus coleta métricas do edge node.
+----------------+ +----------------+ +----------------+
| Kubernetes |<---->| Edge Node |<---->| MQTT Broker |
| (192.168.56.10)| |(192.168.56.20) | |(192.168.56.30) |
+----------------+ +----------------+ +----------------+
| | |
+------------------------+----------------------+
(Rede privada)
Equipamentos e software
| Item | Requisito, licença ou versão |
|---|---|
| VM ou máquina física para Kubernetes | 2 vCPU, 2GB RAM, Ubuntu 22.04 ou similar |
| VM ou máquina física para Edge Node | 2 vCPU, 2GB RAM, Ubuntu 22.04 ou similar |
| VM ou máquina física para MQTT Broker | 1 vCPU, 1GB RAM, Ubuntu 22.04 ou similar |
| Kubernetes | Apache 2.0 · a versão estável atual |
| KubeEdge | Apache 2.0 · a versão estável atual |
| Eclipse Mosquitto | EPL/EDL · a versão estável atual |
| Prometheus | Apache 2.0 · a versão estável atual |
Roteiro
- Preparar as VMs e a rede
Garanta que as três máquinas (ou VMs) estejam na mesma rede privada, com IPs fixos e acesso SSH entre elas. Isso evita problemas de conectividade.
O que você deve ver: Ping entre os IPs funciona. SSH entre as máquinas está disponível.
- Instalar Kubernetes (kubeadm) na máquina de nuvem
KubeEdge depende de um cluster Kubernetes funcional. Use kubeadm para instalar um cluster simples.
sudo apt update && sudo apt install -y apt-transport-https curl curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - echo "deb 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 kubeadm init --pod-network-cidr=10.244.0.0/16 mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.ymlO que você deve ver: Cluster Kubernetes inicializado. 'kubectl get nodes' mostra o nó master como Ready.
- Instalar Mosquitto MQTT Broker
O broker MQTT faz a ponte de mensagens entre dispositivos e aplicações. Instale o Mosquitto na VM dedicada.
sudo apt update && sudo apt install -y mosquitto mosquitto-clients sudo systemctl enable mosquitto sudo systemctl start mosquittoO que você deve ver: Mosquitto rodando na porta 1883. 'systemctl status mosquitto' mostra ativo.
- Instalar KubeEdge CloudCore no cluster Kubernetes
O CloudCore integra o cluster Kubernetes ao KubeEdge. Instale via binário oficial.
curl -LO https://github.com/kubeedge/kubeedge/releases/download/v1.14.0/kubeedge-v1.14.0-linux-amd64.tar.gz sudo tar -xzf kubeedge-v1.14.0-linux-amd64.tar.gz -C /opt/ cd /opt/kubeedge-v1.14.0-linux-amd64/cloud/ sudo ./cloudcore --defaultconfig > /etc/kubeedge/cloudcore.yaml sudo ./cloudcore --config /etc/kubeedge/cloudcore.yaml &O que você deve ver: CloudCore rodando. Logs mostram inicialização sem erros.
- Configurar CloudCore para MQTT externo
Altere o arquivo de configuração do CloudCore para apontar para o broker MQTT externo.
sudo nano /etc/kubeedge/cloudcore.yaml # Edite mqttServer: "tcp://192.168.56.30:1883" na seção 'modules.cloudHub.mqtt'. Salve e reinicie o CloudCore.O que você deve ver: CloudCore conecta ao broker MQTT externo. Logs mostram conexão bem-sucedida.
- Instalar KubeEdge EdgeCore no edge node
EdgeCore é o agente do KubeEdge na borda. Baixe e configure o binário.
curl -LO https://github.com/kubeedge/kubeedge/releases/download/v1.14.0/kubeedge-v1.14.0-linux-amd64.tar.gz sudo tar -xzf kubeedge-v1.14.0-linux-amd64.tar.gz -C /opt/ cd /opt/kubeedge-v1.14.0-linux-amd64/edge/ sudo ./edgecore --defaultconfig > /etc/kubeedge/edgecore.yaml sudo nano /etc/kubeedge/edgecore.yaml # Configure cloudcoreIP: "192.168.56.10" e mqttServerExternal: "tcp://192.168.56.30:1883". Salve e rode: sudo ./edgecore --config /etc/kubeedge/edgecore.yaml &O que você deve ver: EdgeCore conecta ao CloudCore. Logs mostram handshake bem-sucedido.
- Registrar o edge node no cluster Kubernetes
Para o cluster reconhecer o edge node, gere um token no CloudCore e registre no EdgeCore.
No CloudCore: sudo keadm gettoken No Edge Node: sudo keadm join --cloudcore-ipport=192.168.56.10:10000 --token=<token>O que você deve ver: Edge node aparece como Ready em 'kubectl get nodes'.
- Deploy de um pod de exemplo no edge node
Teste a orquestração implantando um pod nginx no edge node via Kubernetes.
kubectl apply -f - <<EOF apiVersion: apps/v1 kind: Deployment metadata: name: nginx-edge spec: replicas: 1 selector: matchLabels: app: nginx-edge template: metadata: labels: app: nginx-edge spec: nodeSelector: kubeedge.io/edge-node: "true" containers: - name: nginx image: nginx:alpine ports: - containerPort: 80 EOFO que você deve ver: Pod nginx-edge criado e rodando no edge node. 'kubectl get pods -o wide' mostra o pod no edge node.
- Simular um dispositivo IoT publicando no MQTT
Use o mosquitto_pub para simular um sensor publicando dados no broker MQTT.
mosquitto_pub -h 192.168.56.30 -t 'iot/sensor1' -m '{"temp": 22.5}'O que você deve ver: Mensagem publicada no tópico 'iot/sensor1'.
- Consumir a mensagem MQTT no edge node
No edge node, use mosquitto_sub para verificar se a mensagem chega.
mosquitto_sub -h 192.168.56.30 -t 'iot/sensor1'O que você deve ver: Mensagem '{"temp": 22.5}' recebida no terminal.
- Instalar e configurar Prometheus para monitorar o edge node
Prometheus coleta métricas do edge node. Instale e configure o Prometheus para buscar métricas na porta padrão do EdgeCore.
sudo useradd --no-create-home --shell /bin/false prometheus sudo mkdir /etc/prometheus /var/lib/prometheus curl -LO https://github.com/prometheus/prometheus/releases/download/v2.45.0/prometheus-2.45.0.linux-amd64.tar.gz sudo tar -xzf prometheus-2.45.0.linux-amd64.tar.gz -C /opt/ sudo cp /opt/prometheus-2.45.0.linux-amd64/prometheus /usr/local/bin/ sudo nano /etc/prometheus/prometheus.yml # Adicione: scrape_configs: - job_name: 'kubeedge-edgecore' static_configs: - targets: ['192.168.56.20:10350'] # Rode o Prometheus: sudo prometheus --config.file=/etc/prometheus/prometheus.yml &O que você deve ver: Prometheus coleta métricas do edge node. Interface web mostra job 'kubeedge-edgecore' como UP.
Como saber que funcionou
| Teste | Comando | Critério |
|---|---|---|
| Verificar edge node no cluster | kubectl get nodes | Edge node aparece como Ready. |
| Verificar pod nginx-edge rodando | kubectl get pods -o wide | Pod nginx-edge está Running no edge node. |
| Testar publicação MQTT de sensor | mosquitto_pub -h 192.168.56.30 -t 'iot/sensor1' -m '{"temp": 22.5}' | Mensagem recebida por mosquitto_sub no edge node. |
| Verificar coleta de métricas Prometheus | Acesse http://<prometheus-ip>:9090/targets | Job 'kubeedge-edgecore' aparece como UP. |
Troubleshooting
| Sintoma | Causa provável | Correção |
|---|---|---|
| Edge node não aparece no cluster | Token inválido ou problema de rede | Gere novo token com 'keadm gettoken' e verifique conectividade IP. |
| Pod não agenda no edge node | nodeSelector incorreto ou edge node não Ready | Confirme labels do node e status com 'kubectl get nodes --show-labels'. |
| Mensagem MQTT não chega ao edge node | Firewall bloqueando porta 1883 ou erro de configuração MQTT | Verifique regras de firewall e configuração do Mosquitto. |
| Prometheus não coleta métricas do edge node | Porta 10350 bloqueada ou scrape_configs incorreto | Ajuste firewall e revise o prometheus.yml. |
Segurança e hardening
- Altere as senhas padrão dos sistemas operacionais.
- Configure autenticação no Mosquitto para evitar acesso anônimo.
- Limite o acesso SSH apenas aos IPs necessários.
- Use firewall para restringir portas abertas (1883, 10350, 10000).
- Consulte a documentação do KubeEdge para práticas de hardening em produção.
Checklist final
Referências
- KubeEdge Documentation · Kubeedge (kubeedge.io)
- Kubernetes Documentation · Kubernetes (CNCF) (kubernetes.io)
- Prometheus Documentation · Prometheus (CNCF) (prometheus.io)
- 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
