Conteúdos

Laboratório caseiro com NanoBSD, APU2 e Kubernetes no Raspberry Pi - 0

Laboratório caseiro.

Há algum tempo eu vinha pensando em montar um laboratório caseiro (cluster Kubernetes) com acesso à internet e a partir dela, para pesquisar e praticar as tecnologias que me interessam, usando componentes de baixo consumo energético e o mais resistentes possível a quedas de energia (para evitar corrupção das unidades de armazenamento). Para isso, reaproveitei o hardware que comprei em algum momento simplesmente porque me interessou. Sem mais delongas, aqui está o diagrama de rede de como esse laboratório ficou:

Diagram
Diagrama de rede do laboratório

A ideia principal é construir um laboratório caseiro com dispositivos de baixo consumo e configurar/montar todos os componentes de hardware e software necessários para consumir e expor serviços pessoais para a internet e a partir dela.

Nota
APU2 ENV refere-se ao ambiente virtual dentro de um dispositivo embarcado usando FreeBSD Jails.


Hardware.

RótuloDispositivoFunção
ISP Wireless routerISP defaultAcesso à internet / port forwarding
APU2pcengines.chRoteador interno/firewall + servidores virtuais
Virtual ServerFreeBSD JailServidores virtuais dentro do APU2
NetGear POE+ switchProSAFE MS510TXPPSwitch + Power over Ethernet para nós Raspberry Pi
RaspberryRaspberry Pi 5Nó Kubernetes (kubelet)


Servidores virtuais

O roteador interno (APU2) executa NanoBSD. NanoBSD é um projeto do FreeBSD que fornece uma imagem FreeBSD para sistemas embarcados. Dentro do NanoBSD é possível criar processos confinados (jails) que se comportam como servidores independentes, isolados uns dos outros e do sistema operacional base. Para esse isolamento, o FreeBSD implementou tecnologias interessantes como a virtualização da pilha de rede (VNET), limites de recursos (rctl), entre outras.

Você pode pensar nas FreeBSD Jails como o análogo dos containers Docker no Linux.

APU2

Para implementar o roteador/firewall interno, usei uma placa-mãe APU2 da pcengines. A principal característica desse dispositivo é que ele foi projetado como sistema embarcado: sem partes móveis como discos rígidos mecânicos, sem slots para encaixar módulos de RAM e com refrigeração passiva (não precisa de ventilador por ser de baixo consumo). Combinado com as vantagens do projeto NanoBSD, isso o torna ideal para essa montagem.

A placa-mãe APU2 inclui as seguintes características (entre outras):

  • 1 processador AMD Embedded G series GX-412TC, 1 GHz quad Jaguar core with 64 bit 2MB L2 cache.
  • 4 GB DRAM (soldada na placa).
  • 1 slot m-SATA.
  • 3 portas Gigabit Ethernet.
APU2
Placa-mãe APU2

Como armazenamento, foi utilizada uma unidade de estado sólido mSATA semelhante à mostrada abaixo.

mSATA SSD
Unidade de estado sólido.
Nota
Infelizmente, no momento em que este artigo foi escrito, a pcengines encerrou o desenvolvimento e a produção das placas APU2 (aqui o comunicado e a justificativa). Esperamos que em um futuro não muito distante eles voltem a surpreender com um projeto semelhante ou ainda melhor.


Switch NetGear

O switch utilizado é o ProSAFE MS510TXPP. Escolhi esse modelo principalmente por causa das capacidades PoE+ (Power over Ethernet), que permitem alimentar os dispositivos Raspberry Pi 5 pelo cabo de rede (é necessário adquirir um PoE HAT para as placas Raspberry Pi).


O switch possui as seguintes características:

Gerenciamento via página web com as seguintes capacidades:

  • VLANs: Suporta até 256 VLANs baseadas em portas, IEEE 802.1Q, Auto Voice VLAN e Auto Video VLAN.
  • Roteamento estático (Layer 3 Lite): Suporta até 32 rotas estáticas IPv4 e 32 rotas estáticas IPv6, além de uma tabela ARP de até 512 entradas.
  • Agregação de enlaces / port trunking: Compatível com IEEE 802.3ad LACP (Link Aggregation Control Protocol).
  • Quality of Service (QoS): Priorização de tráfego baseada em portas, IEEE 802.1p, DSCP, TCP/UDP e DiffServ com filas WRR (Weighted Round Robin) ou prioridade estrita.
  • Monitoramento: SNMP v1, v2c e v3, RMON (grupos 1, 2, 3 e 9) e syslog remoto.


Configuração de portas (10 portas no total):

  • Portas Gigabit padrão (1G): 4 portas RJ-45 (10M/100M/1G) com suporte PoE+.
  • Portas Multi-Gigabit (2.5G): 2 portas RJ-45 (100M/1G/2.5G) com suporte PoE+ (IEEE 802.3bz / NBASE-T).
  • Portas Multi-Gigabit (5G): 2 portas RJ-45 (100M/1G/2.5G/5G) com suporte PoE+ (IEEE 802.3bz / NBASE-T).
  • Uplink de cobre 10G: 1 porta RJ-45 dedicada (100M/1G/2.5G/5G/10GBASE-T).
  • Uplink de fibra 10G SFP+: 1 porta SFP+ dedicada (1G/10GBASE-X SFP+).
MS510TXPP
MS510TXPP

Raspberry Pi 5

Não há muito a dizer aqui: foram usadas quatro placas Raspberry Pi 5 para os nós Kubernetes. No momento em que este artigo foi escrito, a página oficial do Raspberry Pi oferece uma versão com 16 GB de RAM; os dispositivos usados aqui têm a metade disso, 8 GB de RAM.

rbp-5
Raspberry Pi 5


Os cartões microSD são relativamente frágeis perante quedas de energia, por isso os nós Kubernetes receberam PoE HATs (Power over Ethernet) para dois objetivos: primeiro, substituir o microSD por um SSD m.2 mais resistente a cortes de energia; segundo, alimentar as placas Raspberry Pi pelo cabo de rede. Como já mencionado, o switch NetGear MS510TXPP é capaz de alimentar dispositivos de rede pela conexão Ethernet.

poe-hat
Power over Ethernet HAT

Rack para Kubernetes

Um problema ao montar um cluster Kubernetes com Raspberry Pi é a organização dos dispositivos — tanto os nós de computação quanto o roteador. A GeeekPi fabrica racks para Raspberry Pi e outros acessórios para organizar esse tipo de projeto. O mini-rack escolhido para este laboratório caseiro foi o modelo T0.

rack
Rack GeeekPi

Setup final

Próximos passos

  1. Instalar a imagem NanoBSD.
  2. Instalar o Raspberry Pi OS nos nós Raspberry Pi.
  3. Criar o cluster Kubernetes.