Skip to content

alexsandrofabbro/Kubernetes-com-Raspberry-Pi-4

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

53 Commits
 
 
 
 

Repository files navigation

Configuração Home Lab com Cluster Kubernetes com k3s, Flannel e MetalLB no Raspberry Pi 4.

Este repositório documenta a configuração de um cluster Kubernetes usando Raspberry Pi 4, k3s, Flannel e MetalLB. O objetivo é fornecer um guia passo a passo para configurar um cluster funcional e acessível a partir de outros dispositivos na mesma rede.

Índice

Pré-requisitos

  • 3 Raspberry Pi 4 com pelo menos 2GB de RAM.
  • Cartões microSD com pelo menos 16GB.
  • Sistema operacional: Ubuntu Server.
  • Rede interna com DHCP configurado.

Arquitetura do Cluster

  • Master Node: 1 Raspberry Pi (com k3s server).
  • Worker Nodes: 2 Raspberry Pi (com k3s agent).
  • Rede: Flannel como CNI (Container Network Interface).
  • LoadBalancer: MetalLB configurado em modo Layer 2.

Configuração do Ambiente

    Após instalação do Ubuntu Server no cartão de memória, vocês podem estar configurando o IP fixo do Raspberry Pi no arquivo "network-config" como exemplo abaixo:

    network:
      version: 2

      ethernets:
        eth0:
          addresses: [192.168.0.201/24]
          gateway4: 192.168.0.1
          dhcp4: false
          optional: true
          nameservers:
                addresses: [192.168.0.1, 0.0.0.0]



    Para conectar a esse Raspberry Pi pela rede vou utilizar a conexão por ssh.

    OBS: Lembrando de conferir se a porta 22 e a conexão por autenticação esteja liberada. Vocês podem está verificando isso em /etc/ssh no arquivo ssh_config


    Após essa configuração, podem inserir o cartão de memória no Raspberry Pi e conectar pelo terminal utilizando o comando ssh.


    Preparação dos Raspberry Pis.

    Obs: Esses passos têm que ser realizados em todos os Raspberry Pi que irão fazer parte do seu Cluster.

    Iremos realizar os comandos pelo terminal e com o usuário Root.
      Digite o seguinte comando para ir como Root e depois a senha do root.

    sudo su

    Configurando os hostname dos clusters com o seguinte comando:

    hostname cluster01

    Para salvar o nome no arquivo host teremos que executar o comando abaixo:

    echo "cluster01" > /etc/hostname


    Se você quiser confirmar se foi alterado o nome, execute esse comando:

    cat /etc/hostname


    Adicionar o IP do Raspberry Pi no arquivo hosts, para isso vamos usar o seguinte comando com o nano como o exemplo abaixo:

    nano /etc/hosts

    127.0.0.1         localhost
    192.168.0.201  cluster01
       ::1 localhost
    127.0.1.1      pop-os.localdomain pop-os

    Obs. Se for configurar o Kubernetes em desktops, temos que desabilitar o Swap.


    Como no Raspberry Pi não vem ativado. não iremos executar esse comando:

    swapoff -a


    Habilitando a memória que por padrão ela vem desabilitada:

    nano /boot/firmware/cmdline.txt


    No final da linha você irá adicionar o seguinte:

    cgroup_enable=cpuset, cgroup_enable=memory, cgroup_memory=1, swapaccount=1


    Também temos que instalar o Java e o Docker

    Vamos criar um arquivo .json
    Para isso, vamos utilizar o seguinte comando:

    nano /etc/docker/daemon.json


    Ele é um arquivo novo e vamos digitar os seguintes comandos:

    
    {
       "exec-opts": ["native.cgroupdriver=systemd"],
       "log-driver": "json-file",
       "log-opts": {
             "max-size": "100m"
         },
       "storage-driver": "overlay2"
    }

    Não podemos esquecer de habilitar uma opção no arquivo sysctl.conf.

    Para isso vamos executar o seguinte comando:
    nano /etc/sysctl.conf


    tem que localizar a linha que está escrito #net.ipv4.ip_forward=1 e remover o # 


Instalação do k3s

  1. Instale o k3s no nó master com o Flannel:
curl -sfL https://get.k3s.io | sh -s - --flannel-iface=eth0
  1. Obtenha o token do master para conectar os nós workers:
cat /var/lib/rancher/k3s/server/node-token
  1. Conecte os workers ao cluster:
curl -sfL https://get.k3s.io | K3S_URL=https://<master-node-ip>:6443 K3S_TOKEN=<token> sh -

Configuração do Flannel

O Flannel é configurado automaticamente pelo k3s. Verifique se a rede está funcional com:

kubectl get pods -A

Configuração do MetalLB

  1. Instale o MetalLB:
sudo kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.9/config/manifests/metallb-native.yaml
  1. Configure o MetalLB com um intervalo de IPs da sua rede local:
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  namespace: metallb-system
  name: ip-pool
spc:
  address:
    - 192.168.1.100-192.168.1.110
  1. Aplique a configuração:
kubectl apply -f poll-metallb.yaml
  1. Configurando Advanced L2 Configuration:
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: homelab-l2
  namespace: metallb-system
spec:
  ipAddressPools:
    - ip-pool
  1. Aplique a configuração Advanced L2 Configuration:
sudo kubectl apply -f L2Advertisement.yaml

Configurando Nginx para teste

Exemplo de deploy de uma aplicação simples:

sudo kubectl create deploy nginx –image nginx:latest

Expondo o Nginx para acessar pelo browser:

sudo kubectl expose deploy nginx –port 80 --type LoadBalancer

Agora podemos acessar pelo endereço http://192.168.0.101:80 no seu browser

Monitoramento e Acesso ao Cluster

  • Acesse suas aplicações pelo IP atribuído pelo MetalLB.
  • Use kubectl para monitorar o estado do cluster e dos pods.

Recursos Adicionais

Contribuições

Contribuições são bem-vindas! Sinta-se à vontade para abrir issues e pull requests.

Licença

Este projeto está licenciado sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.

About

Repositorio para instalação e configuração Kubernetes no Raspberry Pi 4

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published