k0s: Kubernetes Binário Único para PME
Neste artigo
O k0s é uma distribuição Kubernetes certificada CNCF empacotada num único binário sem dependências. Foi desenhada para reduzir a complexidade de instalação, tornando-se ideal para PME que precisam de orquestrar contentores sem equipa dedicada de plataforma.
ℹ O k0s é um único binário sem dependências externas
Não precisa de etcd, containerd ou kubeadm separados — tudo está incluído no binário. Isto simplifica a instalação, reduz a superfície de ataque e facilita actualizações.
1. Introdução ao k0s
O k0s é desenvolvido pela Mirantis sob licença Apache 2.0. Todo o conjunto Kubernetes — API server, scheduler, kubelet, containerd, etcd — fica compilado num único executável de ~150 MB. Não é preciso configurar repositórios, instalar dependências ou gerir versões incompatíveis.
Principais características:
- Certificada CNCF — compatibilidade total com a API padrão
- ARM64 e x86-64 — funciona em Raspberry Pi, servidores ARM e x86
- Air-gapped — instalação sem Internet, ideal para ambientes isolados
- Control plane HA — múltiplos controllers com balanceador de carga externo
- Configuração declarativa — YAML único em
/etc/k0s/k0s.yaml
O k0s é adequado para computação de borda, centros de dados air-gapped e produção de pequena escala. A documentação oficial cobre instalação, configuração e operação.
2. Instalação Binário Único
A instalação resume-se a transferir o binário e iniciar o controller. Pré-requisitos: Linux com kernel 4.x+ e privilégios de administrador.
# Instalar k0s
curl -sSLf https://get.k0s.sh | sudo sh
# Inicializar controller
sudo k0s install controller
sudo k0s start
# Verificar estado
sudo k0s status
# kubectl integrado
sudo k0s kubectl get nodes
O k0s install controller regista o k0s como serviço systemd, garantindo arranque automático. A configuração fica em /etc/k0s/k0s.yaml e os certificados em /var/lib/k0s/pki.
⚠ O k0s requer pelo menos 2GB de RAM por nó do control plane em produção
Em teste pode funcionar com 1GB, mas em produção o etcd e o API server consomem recursos significativos. Recomendado: 2 vCPU, 2GB RAM mínimo por controller.
3. Configurar Cluster
A configuração é declarativa via YAML em /etc/k0s/k0s.yaml. Controla rede de pods, serviços, DNS, CNI e armazenamento.
# Gerar configuração por predefinição
sudo k0s config create > /etc/k0s/k0s.yaml
# Secções principais em /etc/k0s/k0s.yaml
# api:
# address: 10.0.0.10
# sans:
# - 10.0.0.10
# - k8s.pme.local
# network:
# podCIDR: 10.244.0.0/16
# serviceCIDR: 10.96.0.0/12
# provider: calico
# storage:
# type: etcd
# Aplicar alterações
sudo k0s restart
O k0s suporta Kube-router (predefinido), Calico e CNI personalizado. O campo api.sans é crucial para HA — lista os IPs e nomes DNS do certificado do API server. Para air-gapped, pré-carregar imagens em /var/lib/k0s/images.
4. Adicionar Workers
Adicionar workers exige um token gerado no controller. O token contém o endereço do API server e credenciais seguras.
# No controller: gerar token para workers
sudo k0s token create --role=worker --expiry=24h > token.txt
# No worker: instalar e juntar ao cluster
curl -sSLf https://get.k0s.sh | sudo sh
sudo k0s install worker --token-file token.txt
sudo k0s start
# Verificar no controller
sudo k0s kubectl get nodes
O token tem validade limitada — usar --expiry para definir o período. Para produção, 1-2 horas. Os workers são stateless: podem ser removidos e re-adicionados sem impacto, facilitando escalonamento horizontal.
5. Control Plane HA
Para produção, o control plane deve ter alta disponibilidade. O k0s suporta múltiplos controllers com etcd em cluster e balanceador de carga externo.
# No controller 1: token para controller adicional
sudo k0s token create --role=controller --expiry=2h > ctrl-token.txt
# No controller 2: juntar como controller
sudo k0s install controller --token-file ctrl-token.txt
sudo k0s start
# HA: múltiplos controladores com balanceador de carga externo
# LB externo (HAProxy/Keepalived)
# -> Controller 1 (10.0.0.10)
# -> Controller 2 (10.0.0.11)
# -> Controller 3 (10.0.0.12)
# Workers apontam para o IP virtual do LB
O etcd forma automaticamente cluster entre controllers. Recomenda-se um número ímpar (3 ou 5) para quorum. O LB deve fazer verificações de estado a /healthz na porta 6443. Para PME sem LB dedicado, Keepalived com VIP ou HAProxy em modo máquina são suficientes.
6. k0s vs k3s vs kubeadm
Três abordagens com compromissos diferentes. A escolha depende da complexidade aceitável e requisitos de certificação.
| Característica | k0s | k3s | kubeadm |
|---|---|---|---|
| Certificação CNCF | Sim | Sim (com extensões) | Sim |
| Binário | ~150MB | ~70MB | Múltiplos |
| Base de dados | etcd incorporado | SQLite/etcd | etcd externo |
| Air-gapped | Nativo | Manual | Complexo |
| HA control plane | Sim (LB externo) | Sim (etcd incorporado) | Sim (manual) |
| Complexidade | Baixa | Baixa | Média-Alta |
| Ideal para | PME, edge, air-gapped | Edge, IoT, dev | Enterprise |
O k3s é mais leve com SQLite para nó único, mas o k0s oferece certificação CNCF sem extras e etcd nativo, preferível para produção. Para mais opções auto-alojadas, ver Kubernetes Self-Hosted: Hetzner vs AKS vs k3s. Para fundamentos, o Dia 29: Kubernetes Básico do Curso de Linux.
7. Erros Comuns e Lista de Verificação
| Erro | Causa | Solução |
|---|---|---|
| Worker não aparece em get nodes | Token expirado ou firewall | Gerar token novo; abrir portas 6443 e 10250 |
| CNI pods em Pending | Imagens não descarregadas | Pré-carregar em /var/lib/k0s/images |
| etcd sem quorum | Controllers sem conectividade | Verificar portas 2380/2379 entre controllers |
| API server inacessível | Certificado sem SAN do LB | Adicionar IPs em api.sans do k0s.yaml |
| k0s start falha | Portas 6443/10250 em uso | Parar serviços conflitantes (docker, k3s) |
Lista de verificação para produção:
- ✓ 2GB RAM e 2 vCPU mínimo por controller
- ✓ 3 controllers em HA com balanceador de carga externo
- ✓ Portas 6443, 10250, 2379, 2380 abertas entre controllers
- ✓
api.sanscom IP do LB e nomes DNS - ✓ Token de workers com expiração curta (1-2h)
- ✓ Imagens pré-carregadas em air-gapped
- ✓ Cópias de segurança regulares de /var/lib/k0s (etcd + certificados)
- ✓ Monitorização de recursos em todos os nós
Para gestão de segredos em clusters k0s, ver OpenBao. Para orquestração sem Kubernetes, o Nomad é uma alternativa simples. Para rede e segurança, o Cilium com eBPF integra-se com k0s.