Instalando o k3s em hardware baremetal - passo a passo e com uso do Terraform
Instalando o pequeno k3s Kubernetes em um cluster de homelab
Aqui está um passo a passo para a instalação de um cluster K3s com 3 nós em servidores de metal nu (1 mestre + 2 trabalhadores).
Este guia pressupõe que você está começando com uma instalação mínima Linux (exemplo: Ubuntu 22.04 ou Debian) em cada servidor, e deseja hospedar por conta própria seu plano de controle e cargas de trabalho.
K3s é uma versão leve de Kubernetes, que se adapta bem a este pequeno laboratório doméstico.
⚙️ Topologia do Cluster
Nome do Nó | Função | Hostname/IP |
---|---|---|
master-1 |
Servidor (Plano de Controle) | 192.168.1.100 |
worker-1 |
Agente (Nó de Trabalho) | 192.168.1.101 |
worker-2 |
Agente (Nó de Trabalho) | 192.168.1.102 |
✅ Pré-requisitos
🧱 Hardware (Mínimo):
- CPU: 2 núcleos
- RAM: 2GB+ por nó
- Disco: 20GB+ por nó
🛠 Requisitos do Sistema Operacional:
- Linux (Ubuntu 22.04, Debian 12, etc.)
curl
,ssh
esudo
instalados- Acesso como root ou com sudo
🧼 Rede Limpa:
-
Certifique-se de que todos os nós possam resolver e pingar uns aos outros por IP ou hostname.
-
Desative o swap:
sudo swapoff -a sudo sed -i '/ swap / s/^/#/' /etc/fstab
🚀 Instalação Passo a Passo
📍 Passo 1: Instale o K3s no Plano de Controle (master-1)
curl -sfL https://get.k3s.io | sh -
Após a instalação:
sudo cat /var/lib/rancher/k3s/server/node-token
- Isso fornece o token de junção necessário para os nós de trabalho.
Confirme que o cluster está em execução:
sudo kubectl get nodes
k3s
inclui umkubectl
instalado comok3s kubectl
ou vinculado comokubectl
.
📍 Passo 2: Instale os Agentes do K3s (worker-1 & worker-2)
Repita em cada nó de trabalho:
Substitua <MASTER_IP>
e <NODE_TOKEN>
pelos valores do passo 1.
curl -sfL https://get.k3s.io | K3S_URL=https://192.168.1.100:6443 K3S_TOKEN=<NODE_TOKEN> sh -
Exemplos:
K3S_URL=https://192.168.1.100:6443 \
K3S_TOKEN=K10abcde123456789::server:abcde123456789 \
sh -c "$(curl -sfL https://get.k3s.io)"
📍 Passo 3: Verifique o Cluster a partir do master-1
kubectl get nodes
Você deve ver:
NAME STATUS ROLES AGE VERSION
master-1 Ready control 5m v1.29.2+k3s1
worker-1 Ready <none> 2m v1.29.2+k3s1
worker-2 Ready <none> 2m v1.29.2+k3s1
🔐 (Opcional) Ativar Alta Disponibilidade (HA)
Para uma HA semelhante à produção (opcional em laboratórios domésticos):
- Use um banco de dados externo (ex: MySQL/PostgreSQL/etcd).
- Execute múltiplos nós de servidor com a bandeira
--server
e banco de dados compartilhado. - Veja: Documentação K3s HA
🧪 Teste uma Implantação
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=LoadBalancer
kubectl get svc
Verifique o acesso via curl http://<worker-ip>:<port>
ou configure o MetalLB para IPs de LoadBalancer externos.
🧰 Notas Úteis
-
Kubeconfig:
/etc/rancher/k3s/k3s.yaml
- Copie para sua máquina local e
export KUBECONFIG=...
para gerenciar remotamente.
- Copie para sua máquina local e
-
Serviços do Systemd:
sudo systemctl status k3s
sudo systemctl status k3s-agent
(nos trabalhadores)
💡 Extras (Opcionais)
-
K9s: Interface de terminal para gerenciar Kubernetes:
brew install k9s
ousudo snap install k9s
-
Dashboard: Ative com manifestos:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
-
MetalLB: Adicione suporte de balanceamento de carga para metal nu:
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.10/config/manifests/metallb-native.yaml
📦 Limpeza
Para remover o k3s:
# No mestre:
/usr/local/bin/k3s-uninstall.sh
# No trabalhador:
/usr/local/bin/k3s-agent-uninstall.sh
Instale um cluster K3s de 3 nós de metal nu com Terraform
Aqui está um Terraform modelo que ajuda a provisionar um cluster K3s de 3 nós de metal nu assumindo que você está gerenciando servidores Linux já provisionados (ex: em sua LAN/laboratório doméstico) via SSH e Ansible. O Terraform invocará playbooks do Ansible para instalar o K3s.
🧱 Pressupostos
-
Você já possui:
- 3 servidores com IPs fixos, acessíveis via SSH.
- Acesso SSH (baseado em chave).
- Terraform e Ansible instalados localmente.
-
Sistema operacional alvo: Ubuntu/Debian (pode ser personalizado).
-
Você está usando provisionador Terraform
local-exec
ou plugin de provisionamento Ansible (usaremoslocal-exec
aqui para portabilidade).
📁 Estrutura de Diretório
k3s-cluster/
├── main.tf
├── inventory.ini
├── ansible/
│ └── install_k3s.yml
└── variables.tf
📄 variables.tf
variable "master_ip" {
default = "192.168.1.100"
}
variable "worker_ips" {
default = ["192.168.1.101", "192.168.1.102"]
}
variable "ssh_user" {
default = "seu_usuario"
}
variable "ssh_private_key" {
default = "~/.ssh/id_rsa"
}
📄 main.tf
provider "null" {}
resource "null_resource" "install_k3s" {
provisioner "local-exec" {
command = "ANSIBLE_HOST_KEY_CHECKING=False ansible-playbook -i inventory.ini ansible/install_k3s.yml --private-key ${var.ssh_private_key} -u ${var.ssh_user}"
}
triggers = {
always_run = "${timestamp()}"
}
}
📄 inventory.ini
[masters]
192.168.1.100
[workers]
192.168.1.101
192.168.1.102
[all:vars]
ansible_python_interpreter=/usr/bin/python3
📄 ansible/install_k3s.yml
---
- hosts: masters
become: yes
tasks:
- name: Instalar k3s master
shell: |
curl -sfL https://get.k3s.io | sh -
- name: Obter node-token
shell: cat /var/lib/rancher/k3s/server/node-token
register: node_token
delegate_to: localhost
- hosts: workers
become: yes
tasks:
- name: Unir o trabalhador ao cluster
shell: |
curl -sfL https://get.k3s.io | K3S_URL=https://{{ hostvars['192.168.1.100']['ansible_host'] }}:6443 K3S_TOKEN={{ hostvars['192.168.1.100']['node_token']['stdout'] }} sh -
Nota: Você pode precisar ajustar o acesso à variável de IP ou token dependendo das versões do Ansible. Você também pode gerar o token no mestre e salvá-lo em um arquivo antes de executar a instalação do trabalhador.
🚀 Como Executar
A partir do diretório k3s-cluster/
:
terraform init
terraform apply
🧰 Melhorias (Opcionais)
- Use geração dinâmica de inventário (ex: de DHCP/dnsmasq).
- Adicione implantação do MetalLB via Ansible.
- Adicione nomes de host e funcionalidades de HA.
- Substitua por um role do Ansible como
xanmanning.k3s
para mais flexibilidade.
Links Úteis
- https://k3s.io/
- Folha de Dicas do Kubernetes
- Instale Kubernetes com Kubespray
- Folha de Dicas do Terraform - comandos úteis e exemplos
- Distribuições do Kubernetes - visão rápida de kubeadm, k3s, MicroK8s, Minikube, Talos Linux e RKE2
- Comparação de Distribuições do Kubernetes para um Laboratório Doméstico com 3 Nós
- Como Instalar o Ubuntu 24.04 & ferramentas úteis
- Folha de Dicas do Docker
- Folha de Dicas do Docker Compose - comandos mais úteis com exemplos