Installare k3s su baremetal - guida passo passo e con terraform
Installare little k3s Kubernetes su un cluster homelab
Ecco un passo-passo per l’installazione di un cluster K3s a 3 nodi su server bare-metal (1 master + 2 worker).
Questo tutorial assume che tu stia iniziando con un’installazione minima di Linux (ad esempio, Ubuntu 22.04 o Debian) su ogni server, e che desideri self-hostare il tuo piano di controllo e i carichi di lavoro.
K3s è una versione leggera di Kubernetes, che si adatta bene a questo piccolo laboratorio domestico.
⚙️ Topologia del Cluster
Nome del Nodo | Ruolo | Hostname/IP |
---|---|---|
master-1 |
Server (Piano di Controllo) | 192.168.1.100 |
worker-1 |
Agente (Nodo Worker) | 192.168.1.101 |
worker-2 |
Agente (Nodo Worker) | 192.168.1.102 |
✅ Prerequisiti
🧱 Hardware (Minimo):
- CPU: 2 core
- RAM: 2GB+ per nodo
- Disco: 20GB+ per nodo
🛠 Requisiti del Sistema Operativo:
- Linux (Ubuntu 22.04, Debian 12, ecc.)
curl
,ssh
esudo
installati- Accesso root o sudo
🧼 Reti pulite:
-
Assicurati che tutti i nodi possano risolvere e pingare gli altri per IP o hostname.
-
Disattiva lo swap:
sudo swapoff -a sudo sed -i '/ swap / s/^/#/' /etc/fstab
🚀 Installazione Passo-passo
📍Passo 1: Installa K3s sul piano di controllo (master-1)
curl -sfL https://get.k3s.io | sh -
Dopo l’installazione:
sudo cat /var/lib/rancher/k3s/server/node-token
- Questo ti fornisce il token di unione necessario per i nodi worker.
Conferma che il cluster è in esecuzione:
sudo kubectl get nodes
k3s
include unkubectl
installato comek3s kubectl
o collegato comekubectl
.
📍Passo 2: Installa gli agenti K3s (worker-1 e worker-2)
Ripeti su ogni nodo worker:
Sostituisci <MASTER_IP>
e <NODE_TOKEN>
con i valori ottenuti nel passo 1.
curl -sfL https://get.k3s.io | K3S_URL=https://192.168.1.100:6443 K3S_TOKEN=<NODE_TOKEN> sh -
Esempi:
K3S_URL=https://192.168.1.100:6443 \
K3S_TOKEN=K10abcde123456789::server:abcde123456789 \
sh -c "$(curl -sfL https://get.k3s.io)"
📍Passo 3: Verifica il cluster da master-1
kubectl get nodes
Dovresti vedere:
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
🔐 (Opzionale) Abilita alta disponibilità (HA)
Per un’alta disponibilità simile a quella produttiva (opzionale nei laboratori domestici):
- Utilizza un database esterno (es. MySQL/PostgreSQL/etcd).
- Esegui più nodi server con il flag
--server
e un database condiviso. - Vedi: Documentazione K3s HA
🧪 Test di un deployment
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=LoadBalancer
kubectl get svc
Verifica l’accesso tramite curl http://<worker-ip>:<port>
o configura MetalLB per gli indirizzi IP del LoadBalancer esterno.
🧰 Note utili
-
Kubeconfig:
/etc/rancher/k3s/k3s.yaml
- Copia sul tuo computer locale e
export KUBECONFIG=...
per gestire il cluster da lontano.
- Copia sul tuo computer locale e
-
Servizi systemd:
sudo systemctl status k3s
sudo systemctl status k3s-agent
(sui worker)
💡 Extra (Opzionali)
-
K9s: Interfaccia terminale per la gestione di Kubernetes:
brew install k9s
osudo snap install k9s
-
Dashboard: Abilita con manifesti:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
-
MetalLB: Aggiungi supporto per il bilanciamento del carico su server bare-metal:
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.10/config/manifests/metallb-native.yaml
📦 Pulizia
Per rimuovere k3s:
# Sul master:
/usr/local/bin/k3s-uninstall.sh
# Sul worker:
/usr/local/bin/k3s-agent-uninstall.sh
Installa un cluster K3s a 3 nodi su server bare-metal con Terraform
Ecco un Terraform template che aiuta a fornire un cluster K3s a 3 nodi su server bare-metal assumendo che tu stia gestendo server Linux già configurati (es. in LAN/laboratorio domestico) tramite SSH e Ansible. Terraform invocherà playbook Ansible per installare K3s.
🧱 Assunzioni
-
Hai già:
- 3 server con IP fissi, accessibili via SSH.
- Accesso SSH (basato su chiavi).
- Terraform e Ansible installati localmente.
-
Sistema operativo target: Ubuntu/Debian (può essere personalizzato).
-
Stai utilizzando Terraform
local-exec
o plugin provisioner Ansible (useremolocal-exec
qui per portabilità).
📁 Struttura delle directory
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 = "your_user"
}
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: Installa k3s master
shell: |
curl -sfL https://get.k3s.io | sh -
- name: Ottieni node-token
shell: cat /var/lib/rancher/k3s/server/node-token
register: node_token
delegate_to: localhost
- hosts: workers
become: yes
tasks:
- name: Unisci il worker al 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: Potresti dover modificare l’accesso alle variabili IP o token a seconda delle versioni di Ansible. Puoi anche generare il token sul master e salvarlo in un file prima di eseguire l’installazione dei worker.
🚀 Come eseguire
Dalla directory k3s-cluster/
:
terraform init
terraform apply
🧰 Miglioramenti (Opzionali)
- Utilizza la generazione dinamica dell’inventario (es. da DHCP/dnsmasq).
- Aggiungi l’installazione di MetalLB tramite Ansible.
- Aggiungi nomi host e funzionalità HA.
- Sostituisci con un ruolo Ansible come
xanmanning.k3s
per una maggiore flessibilità.
Link utili
- https://k3s.io/
- Scheda di riferimento Kubernetes
- Installare Kubernetes con Kubespray
- Scheda di riferimento Terraform - comandi utili e esempi
- Distribuzioni Kubernetes - panoramica rapida di kubeadm, k3s, MicroK8s, Minikube, Talos Linux e RKE2
- Confronto delle distribuzioni Kubernetes per un laboratorio domestico a 3 nodi
- Come installare Ubuntu 24.04 e strumenti utili
- Scheda di riferimento Docker
- Scheda di riferimento Docker Compose - comandi più utili con esempi