Het installeren van k3s op baremetal - stap-voor-stap walkthrough en met terraform
Installeren van little k3s Kubernetes op homelab-cluster
Hier is een stap-voor-stap walkthrough van
installatie van een 3-knooppunt K3s cluster
op bare-metal servers (1 master + 2 workers).
Deze gids veronderstelt dat je begint met een minimale
Linux installatie
(bv. Ubuntu 22.04 of Debian) op elke server,
en dat je je controleplane en workloads zelf wilt hosten.
K3s
is een
lichtgewicht variant van Kubernetes,
die goed werkt voor deze kleine homelab.
⚙️ Cluster Topologie
Node Naam | Rol | Hostnaam/IP |
---|---|---|
master-1 |
Server (Control Plane) | 192.168.1.100 |
worker-1 |
Agent (Worker Node) | 192.168.1.101 |
worker-2 |
Agent (Worker Node) | 192.168.1.102 |
✅ Voorwaarden
🧱 Hardware (Minimum):
- CPU: 2 cores
- RAM: 2GB+ per knooppunt
- Schijf: 20GB+ per knooppunt
🛠 OS Voorwaarden:
- Linux (Ubuntu 22.04, Debian 12, enz.)
curl
,ssh
, ensudo
geïnstalleerd- Root of sudo toegang
🧼 Netwerk:
-
Zorg ervoor dat alle knooppunten elkaar kunnen oplossen en pingen via IP of hostnaam.
-
Schakel swap uit:
sudo swapoff -a sudo sed -i '/ swap / s/^/#/' /etc/fstab
🚀 Stap-voor-stap installatie
📍 Stap 1: Installeer K3s op de controleplane (master-1)
curl -sfL https://get.k3s.io | sh -
Na installatie:
sudo cat /var/lib/rancher/k3s/server/node-token
- Dit geeft je de aanmeldtoken dat nodig is voor de worker-knooppunten.
Controleer of het cluster draait:
sudo kubectl get nodes
k3s
bevat eenkubectl
geïnstalleerd alsk3s kubectl
of als symlinkkubectl
.
📍 Stap 2: Installeer K3s Agents (worker-1 & worker-2)
Herhaal dit op elk worker-knooppunt:
Vervang <MASTER_IP>
en <NODE_TOKEN>
met de waarden uit stap 1.
curl -sfL https://get.k3s.io | K3S_URL=https://192.168.1.100:6443 K3S_TOKEN=<NODE_TOKEN> sh -
Voorbeelden:
K3S_URL=https://192.168.1.100:6443 \
K3S_TOKEN=K10abcde123456789::server:abcde123456789 \
sh -c "$(curl -sfL https://get.k3s.io)"
📍 Stap 3: Controleer het cluster vanaf master-1
kubectl get nodes
Je zou moeten zien:
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
🔐 (Optioneel) Schakel High Availability (HA) in
Voor productie-achtige HA (optioneel in home labs):
- Gebruik een externe DB (bv. MySQL/PostgreSQL/etcd).
- Start meerdere serverknooppunten met de
--server
vlag en gedeelde DB. - Zie: K3s HA Doc
🧪 Test een implementatie
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=LoadBalancer
kubectl get svc
Controleer toegang via curl http://<worker-ip>:<poort>
of stel MetalLB in voor externe LoadBalancer IP’s.
🧰 Nuttige aantekeningen
-
Kubeconfig:
/etc/rancher/k3s/k3s.yaml
- Kopieer naar je lokale machine en
export KUBECONFIG=...
om af te handelen vanaf afstand.
- Kopieer naar je lokale machine en
-
Systemd Services:
sudo systemctl status k3s
sudo systemctl status k3s-agent
(op workers)
💡 Extra’s (Optioneel)
-
K9s: Terminal UI voor het beheren van Kubernetes:
brew install k9s
ofsudo snap install k9s
-
Dashboard: Schakel in met manifesten:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
-
MetalLB: Voeg load balancing ondersteuning toe voor bare-metal:
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.10/config/manifests/metallb-native.yaml
📦 Opheffen
Om k3s te verwijderen:
# Op master:
/usr/local/bin/k3s-uninstall.sh
# Op worker:
/usr/local/bin/k3s-agent-uninstall.sh
Installeer een 3-knooppunt bare-metal K3s cluster met Terraform
Hier is een Terraform sjabloon
die helpt bij het inrichten van een 3-knooppunt bare-metal K3s cluster, aangenomen dat je al ingebruik genomen Linux-servers beheert (bv. in je LAN/home lab) via SSH en Ansible. Terraform zal Ansible playbooks aanroepen om K3s te installeren.
🧱 Aannames
-
Je hebt al:
- 3 servers met vaste IP-adressen, toegankelijk via SSH.
- SSH-toegang (sleutelgebaseerd).
- Terraform en Ansible lokaal geïnstalleerd.
-
Doel OS: Ubuntu/Debian (kan worden aangepast).
-
Je gebruikt Terraform
local-exec
of Ansible provisioner plugin (we gebruiken hierlocal-exec
voor draagbaarheid).
📁 Mapstructuur
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: Installeer k3s master
shell: |
curl -sfL https://get.k3s.io | sh -
- name: Haal node-token op
shell: cat /var/lib/rancher/k3s/server/node-token
register: node_token
delegate_to: localhost
- hosts: workers
become: yes
tasks:
- name: Voeg worker toe aan 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 -
Opmerking: Je moet mogelijk de IP- of tokenvariabele toegang aanpassen afhankelijk van Ansible-versies. Je kunt ook het token op de master genereren en opslaan in een bestand voordat je de worker-installatie uitvoert.
🚀 Hoe uit te voeren
Vanuit de k3s-cluster/
map:
terraform init
terraform apply
🧰 Verbeteringen (Optioneel)
- Gebruik dynamische inventarisgeneratie (bv. vanaf DHCP/dnsmasq).
- Voeg MetalLB-implementatie toe via Ansible.
- Voeg hostnamen en HA-functies toe.
- Vervang met Ansible rol zoals
xanmanning.k3s
voor meer flexibiliteit.
Nuttige links
- https://k3s.io/
- Kubernetes Cheatsheet
- Installeer Kubernetes met Kubespray
- Terraform Cheatsheet - nuttige commando’s en voorbeelden
- Kubernetes distributies - snelle overzicht van kubeadm, k3s, MicroK8s, Minikube, Talos Linux en RKE2
- Vergelijking van Kubernetes distributies voor een 3-knooppunt homelab
- Hoe je Ubuntu 24.04 installeert & nuttige tools
- Docker Cheatsheet
- [Docker Compose Cheatsheet - meest nuttige commando’s met voorbeelden](https://www.glukhov.org/nl/post/2025/07/docker-compose-cheatsheet/ “De lijst van meest nuttige docker compose commando’s, structuren en voorbeelden met beschrijvingen: Cheat sheet”