Transforme os seus Raspberry Pi num cluster de forma rápida e indolor

Tiago Lucas
3 min readApr 4, 2019

--

Com o desenvolvimento da tecnologia, cada vez menos temos interação com o que se passa dentro dos nossos computadores. Uma pessoa que frequente os websites e fóruns de tecnologia, certamente já terá ouvido falar em “cluster”. Mas afinal, o que é um “cluster”? Nada como pôr as mãos na massa…

Photo by Nadya Spetnitskaya on Unsplash

Vamos portanto criar um cluster com Kubernetes.

Porquê o Kubernetes?

Para este projeto, vamos construir um cluster usando 3 Raspberry Pi. Infelizmente, o suporte para Pi 1 foi descontinuado pelo Kubernetes, portanto todas as máquinas terão de ser posteriores à 1ª geração do Single-Board Computer. Recomendamos vivamente uma ligação à rede por cabo, apesar de ser opcional.

1. Instalação

O primeiro passo é formatar os cartões microSD. Vamos usar o Raspbian Lite, por ser um sistema operativo leve e supervisionado pela própria Raspberry Pi Foundation. Existe uma grande quantidade de ferramentas gratuitas que podem ser usadas para este processo. Usámos o Win32 Disk Manager:

Ao iniciarmos o nosso Raspberry devemos mudar o hostname, uma vez que hostnames repetidos no mesmo cluster tendem a gerar problemas. Pode ser feito usando a ferramenta de configuração:

sudo raspi-config

O Kubernetes funciona com o auxílio de contentores Docker, uma plataforma fácil de instalar:

curl -sSL get.docker.com | sh && sudo usermod pi -aG docker
newgrp docker

Para assegurar o bom funcionamento do cluster, nas versões mais recentes do Kubernetes, é necessário desativar o espaço de swap:

sudo dphys-swapfile swapoff && sudo dphys-swapfile uninstall && \ sudo update-rc.d dphys-swapfile remove

Também é necessário que o processo cgroup inicie com o computador, que pode ser feito acrescentando comandos ao ficheiro de inicialização:

sudo nano /boot/cmdline.txt

Sem adicionar nenhuma linha, é necessário adicionar à linha existente:

cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory

Agora vamos reiniciar o Raspberry Pi.

Finalmente, vamos instalar o Kubernetes e descarregar os ficheiros de configuração:

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - && \
echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list && \
sudo apt-get update -q && sudo apt-get install -qy kubeadm
sudo kubeadm config images pull -v3

2. Configuração no “Master”

Depois das ferramentas instaladas, vamos configurar o nosso nó master. Começando por iniciar um novo cluster Kubernetes:

sudo kubeadm init --token-ttl=0 --pod-network-cidr=10.244.0.0/16

Este comando pode demorar até 15 minutos para estar finalizado, dando tempo para se repetir o processo de instalação nos workers do cluster. Os argumentos necessários para a configuração dos mesmos só serão apresentados no final desse tempo. Deve ter vagamente o seguinte aspecto:

kubeadm join --token 9e700f.7dc97f5e3a45c9e5 192.168.0.27:6443 --discovery-token-ca-cert-hash sha256:95cbb9ee5536aa61ec0239d6edd8598af68758308d0a0425848ae1af28859bea

Como indicado aos que prestam atenção, devemos correr o seguinte snippet:

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

De seguida, vamos configurar o flannel, a ferramenta de auxílio de rede que usamos neste caso:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
sudo sysctl net.bridge.bridge-nf-call-iptables=1

3. Configuração nos Workers

Assumindo que o worker já está configurado e o comando de join já foi dado pelo kubeadm no master, devemos usar o mesmo em cada worker. De seguida, para utilizar o flannel, usamos o seguinte:

sudo sysctl net.bridge.bridge-nf-call-iptables=1

Devemos agora ter o nosso cluster a funcionar. Isso pode ser verificado dando o seguinte comando no master:

kubectl get nodes

Se todos os nós aparecerem na lista, o seu cluster está montado.

Pode agora testar o seu cluster!

Referência: https://blog.alexellis.io/serverless-kubernetes-on-raspberry-pi/

--

--

Tiago Lucas

Enthusiastically curious and raised with entrepeneurship values, I often wander outside my confort zone to explore other topics.