K3s: Kubernetes Leve para PME em Edge Computing 2026
SCHEMA MARKUP JSON-LD | ✎ Duarte Spínola | Tags:
O K3s é uma distribuição Kubernetes reduzida (um único binário de ~70 MB) que corre em Raspberry Pi, NUCs, VPS baratas e hardware legacy. Para uma PME portuguesa que precisa de orquestrar containers em filiais sem infraestrutura dedicada, o K3s oferece 90% das funcionalidades do Kubernetes full com 10% do overhead. Este artigo configura um cluster K3s multi-node, expõe serviços com Traefik (incluído), configura persistência com Longhorn e dá estratégias para edge computing em PME (K3s docs).
Neste artigo
- Entender o K3s e Edge Computing
- Pré-requisitos e Instalação
- Passo 1 — Instalar K3s Server (Master Node)
- Passo 2 — Adicionar Worker Nodes ao Cluster
- Passo 3 — Traefik Ingress e Expor Serviços
- Passo 4 — Persistência com Longhorn
- Passo 5 — Deploy de Aplicação com Helm
- Passo 6 — Backup e Restore do Cluster
- K3s vs K8s vs Docker Swarm — Comparação
- Erros Comuns
- Checklist Rápido de Verificação
1. Entender o K3s e Edge Computing
O Kubernetes full (K8s) é pesado: precisa de etcd, API server, controller manager, scheduler, CNI, CRI — vários componentes que consomem 2+ GB de RAM antes de qualquer container correr. O K3s substitui etcd por SQLite (ou etcd external), substitui componentes legacy por versões leves, e junta tudo num único binário.
Analogia: o K8s é como um comboio — poderoso mas precisa de rails, estações, sinalização. O K3s é como uma carrinha — cabe em qualquer estrada, leva quase a mesma carga, e arranca em segundos.
| Característica | K3s | K8s (kubeadm) | Docker Swarm |
|---|---|---|---|
| Tamanho binário | ~70 MB | ~500 MB+ | ~50 MB |
| RAM mínima | 512 MB | 2 GB+ | 256 MB |
| Componentes | 1 binário | 7+ componentes | Docker daemon |
| etcd | SQLite por defeito | Obrigatório | Não usa |
| Ingress Controller | Traefik (incluído) | Instalar separadamente | Não nativo |
| Helm | Suportado | Suportado | Não |
| Certificados | Auto-gerados | Manual/automatizado | Docker TLS |
| Arquitetura | Server + Agent | Master + Worker | Manager + Worker |
| Ideal para | Edge, IoT, PME, dev | Enterprise, cloud | Docker-only shops |
Edge computing significa correr computação perto da fonte de dados — numa filial, numa fábrica, num retailer — em vez de tudo num data center central. O K3s é ideal porque corre em hardware modesto: um Intel NUC com 8 GB RAM pode ser um cluster K3s de 2 nodes (server + agent) que corre 20+ containers (Rancher K3s).
2. Pré-requisitos e Instalação
| Requisito | Master (Server) | Worker (Agent) |
|---|---|---|
| RAM mínima | 512 MB (1 GB recomendado) | 256 MB |
| CPU | 1 vCPU (2 recomendado) | 1 vCPU |
| Disco | 5 GB livres | 5 GB livres |
| OS | Linux 64-bit (kernel 4.4+) | Igual |
| Ports | 6443 (API), 80/443 (Ingress) | Apenas outbound para master |
| Docker | Não necessário (K3s usa containerd) | Não necessário |
ℹ️ Nota: O K3s usa containerd internamente — não precisa de Docker instalado. Se tiveres Docker instalado, o K3s pode usá-lo como CRI alternativo, mas o defeito é containerd.
3. Passo 1 — Instalar K3s Server (Master Node)
Instalar o K3s server num único comando — o script oficial trata de tudo:
O que este comando faz:
- Descarga o binário K3s (~70 MB)
- Regista o serviço systemd (
k3s.service) - Gera certificados de cluster automaticamente
- Inicia o server com SQLite como datastore
- Instala Traefik como Ingress Controller (por defeito)
- Configura kubectl para o utilizador root
Se não tiveres curl, instalar primeiro: apt install curl (Ubuntu/Debian) ou dnf install curl (Fedora/RHEL).
Verificar que o cluster está a funcionar:
sudo k3s kubectl get pods -A
O output deve mostrar:
- 1 node em estado
Ready - Pods do Traefik, CoreDNS, Metrics Server a correr
Para usar kubectl sem sudo:
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chown $(id -u):$(id -g) ~/.kube/config
export KUBECONFIG=~/.kube/config
Obter o token para adicionar worker nodes:
Guardar este token — é necessário no passo seguinte para adicionar agents.
Instalação com opções personalizadas
Para desativar Traefik (se quiseres usar Nginx Ingress) ou mudar a datastore:
Para usar etcd externo em vez de SQLite (alta disponibilidade):
4. Passo 2 — Adicionar Worker Nodes ao Cluster
Em cada máquina worker, instalar o K3s agent e ligá-lo ao master:
O que cada variável faz:
K3S_URL— URL do API server do master. O K3s detecta que é agent porque esta variável está definidaK3S_TOKEN— token de autenticação obtido no passo anterior (/var/lib/rancher/k3s/server/node-token)
Verificar no master que o worker se juntou:
Deve mostrar 2+ nodes: o master com role control-plane,master e o(s) worker(s) com role <none>.
⚠️ Atenção
A porta 6443 do master tem de estar acessível aos workers. Em firewalls restritivos, abrir a porta 6443 TCP. Se os workers estão em redes diferentes (filiais), garantir VPN ou túnel entre os nodes.
5. Passo 3 — Traefik Ingress e Expor Serviços
O K3s instala Traefik por defeito. Para expor uma aplicação:
kind: Deployment
metadata:
name: nginx-demo
labels:
app: nginx-demo
spec:
replicas: 2
selector:
matchLabels:
app: nginx-demo
template:
metadata:
labels:
app: nginx-demo
spec:
containers:
– name: nginx
image: nginx:alpine
ports:
– containerPort: 80
—
apiVersion: v1
kind: Service
metadata:
name: nginx-demo
spec:
selector:
app: nginx-demo
ports:
– port: 80
targetPort: 80
—
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-demo
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: websecure
spec:
rules:
– host: demo.empresa.pt
http:
paths:
– path: /
pathType: Prefix
backend:
service:
name: nginx-demo
port:
number: 80
Aplicar tudo:
Depois de dig demo.empresa.pt apontar para o IP do master, abrir no browser. O Traefik encaminha automaticamente com HTTPS.
6. Passo 4 — Persistência com Longhorn
O K3s tem local-path-provisioner por defeito (volumes no disco local do node). Para persistência replicada entre nodes, instalar Longhorn:
Verificar que todos os pods do Longhorn estão a correr:
Criar uma PVC (PersistentVolumeClaim) com Longhorn:
kind: PersistentVolumeClaim
metadata:
name: postgres-data
spec:
storageClassName: longhorn
accessModes:
– ReadWriteOnce
resources:
requests:
storage: 10Gi
O Longhorn replica os dados em 3 nodes por defeito — se um node cai, os dados continuam disponíveis (Longhorn docs).
⚠️ Atenção
O Longhorn requer open-iscsi instalado em todos os nodes. Instalar com apt install open-iscsi (Ubuntu/Debian) antes de aplicar o manifest.
7. Passo 5 — Deploy de Aplicação com Helm
O K3s inclui Helm controller nativo — não precisas de instalar Helm separadamente:
kind: HelmChart
metadata:
name: grafana
namespace: monitoring
spec:
repo: https://grafana.github.io/helm-charts
chart: grafana
targetNamespace: monitoring
set:
adminPassword: “alterar-esta-password”
service.type: ClusterIP
Aplicar:
O K3s instala o chart automaticamente sem precisar do CLI Helm — tudo via Kubernetes manifests (K3s Helm controller).
8. Passo 6 — Backup e Restore do Cluster
Backup da configuração do cluster
O K3s tem backup nativo do datastore SQLite:
Se usas SQLite (defeito), o backup é manual:
Backup dos volumes (Longhorn)
O Longhorn suporta backups para S3-compatible storage (MinIO, AWS S3, Backblaze B2):
- Configurar backup target no Longhorn UI:
Settings > Backup Target > s3://bucket@region/ - Criar snapshot de qualquer volume na UI
- Snapshot → Backup para enviar para S3
Restore
Para restaurar o cluster a partir de um snapshot:
sudo systemctl restart k3s
ℹ️ Nota: O restore substitui o estado actual do cluster. Todos os deployments criados após o snapshot vão ser perdidos. Fazer sempre backup antes de restore.
9. K3s vs K8s vs Docker Swarm — Comparação
| Critério | K3s | K8s (kubeadm) | Docker Swarm |
|---|---|---|---|
| Tempo de setup | 30 segundos | 30+ minutos | 5 minutos |
| RAM overhead | ~256 MB | ~2 GB | ~128 MB |
| Binário | 1 (~70 MB) | 7+ (~500 MB) | Docker daemon |
| Ingress | Traefik incluído | Instalar separado | Não nativo |
| Helm | Nativo (HelmChart CRD) | CLI separado | Não suporta |
| Persistência | local-path + Longhorn | CSI plugins | Docker volumes |
| HA | etcd external (3+ nodes) | etcd 3+ nodes | Manager quorum |
| Multi-arch | ARM64 + AMD64 | AMD64 principal | Multi-arch |
| Comunidade | Crescente (CNCF) | Enorme (CNCF) | Declínio |
| Ideal para | Edge, PME, dev, IoT | Enterprise, cloud | Docker-only |
Recomendação para PME: K3s para qualquer cenário que não exija features enterprise do K8s full (API aggregation, webhooks avançados, admission controllers custom). Para 95% das PMEs, K3s é suficiente.
10. Erros Comuns
| Problema | Causa | Solução |
|---|---|---|
| Worker não se junta ao cluster | Token errado ou porta 6443 bloqueada | Verificar token (cat /var/lib/rancher/k3s/server/node-token) e firewall |
| Pods em Pending | Sem resources (RAM/CPU) ou sem CSI | Verificar kubectl describe pod — procurar events |
| Traefik 404 | Ingress com host errado ou Service sem endpoints | Verificar kubectl get endpoints e host no Ingress |
| Longhorn pods em CrashLoop | open-iscsi não instalado | apt install open-iscsi em todos os nodes |
| Node NotReady | K3s agent parou | systemctl status k3s-agent e journalctl -u k3s-agent |
| Certificados expirados | K3s renova automaticamente, mas pode falhar | sudo k3s certificate check e sudo k3s certificate rotate |
| kubectl permission denied | kubeconfig sem permissões | Copiar k3s.yaml para ~/.kube/config e ajustar permissões |
| Pod não obtém IP | CNI (flannel) não a funcionar | Verificar kubectl get pods -n kube-system — flannel deve estar Running |
11. Checklist Rápido de Verificação
- [ ] K3s server instalado e a correr (
sudo systemctl status k3s) - [ ]
kubectl get nodesmostra todos os nodes em Ready - [ ]
kubectl get pods -Amostra Traefik, CoreDNS, Metrics Server Running - [ ] kubeconfig configurado para utilizador non-root
- [ ] Worker nodes ligados ao master via token
- [ ] Firewall permite porta 6443 (master) e 80/443 (Ingress)
- [ ] Ingress a funcionar (aplicação demo acessível via HTTPS)
- [ ] Longhorn instalado se precisas de persistência replicada
- [ ] Backup do datastore configurado (cron ou manual)
- [ ] Reinício do master — K3s arranca automaticamente (systemd)
Artigos Relacionados
- Traefik vs Nginx: Ingress Controller para Kubernetes em 2026 — Comparação detalhada do Traefik (incluído no K3s) vs Nginx
- Grafana para PME 2026: Dashboards com Prometheus — Monitorizar o cluster K3s com Grafana
- Ansible: Automatização de PME em 2026 — Automatizar deployment de clusters K3s em múltiplas filiais
- Proxmox VE para PME 2026 — Correr K3s em VMs Proxmox
- Veeam Backup para PME 2026 — Backup das VMs que correm K3s
