Installation av k3s på bare metal - steg-för-steg genomgång och med Terraform
Installera liten k3s Kubernetes på hemma-labkluster
Här är en steg-för-steg-guide för installation av en 3-nod K3s-kluster på bare-metal servrar (1 master + 2 workers).
Den här guiden antar att du börjar med en minimal Linux-installation (t.ex. Ubuntu 22.04 eller Debian) på varje server, och vill själv värdhosta ditt kontrollplan och arbetsbelastningar.

K3s är en lättviktsvariant av Kubernetes, som passar bra för detta lilla hemma-lab.
⚙️ Klustertopologi
| Nodnamn | Roll | Värdnamn/IP |
|---|---|---|
master-1 |
Server (Kontrollplan) | 192.168.1.100 |
worker-1 |
Agent (Worker Node) | 192.168.1.101 |
worker-2 |
Agent (Worker Node) | 192.168.1.102 |
✅ Förutsättningar
🧱 Hårdvara (Minimum):
- CPU: 2 kärnor
- RAM: 2GB+ per nod
- Disk: 20GB+ per nod
🛠 OS-krav:
- Linux (Ubuntu 22.04, Debian 12, etc.)
curl,ssh, ochsudoinstallerat- Root- eller sudo-åtkomst
🧼 Rent nätverk:
-
Se till att alla noder kan lösa och pinga varandra via IP eller värdnamn.
-
Stäng av swap:
sudo swapoff -a sudo sed -i '/ swap / s/^/#/' /etc/fstab
🚀 Steg-för-steg installation
📍Steg 1: Installera K3s på kontrollplanet (master-1)
curl -sfL https://get.k3s.io | sh -
Efter installationen:
sudo cat /var/lib/rancher/k3s/server/node-token
- Detta ger dig anslutningstoken som behövs för worker-noderna.
Bekräfta att klustret körs:
sudo kubectl get nodes
k3sinkluderar enkubectlinstallerad somk3s kubectleller länkad somkubectl.
📍Steg 2: Installera K3s-agenter (worker-1 & worker-2)
Upprepa på varje worker-nod:
Ersätt <MASTER_IP> och <NODE_TOKEN> med värden från steg 1.
curl -sfL https://get.k3s.io | K3S_URL=https://192.168.1.100:6443 K3S_TOKEN=<NODE_TOKEN> sh -
Exempel:
K3S_URL=https://192.168.1.100:6443 \
K3S_TOKEN=K10abcde123456789::server:abcde123456789 \
sh -c "$(curl -sfL https://get.k3s.io)"
📍Steg 3: Verifiera klustret från master-1
kubectl get nodes
Du bör se:
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
🔐 (Valfritt) Aktivera hög tillgänglighet (HA)
För produktionsliknande HA (valfritt i hemma-lab):
- Använd en extern databas (t.ex. MySQL/PostgreSQL/etcd).
- Kör flera server-noder med
--serverflagga och delad databas. - Se: K3s HA Doc
🧪 Testa en distribution
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=LoadBalancer
kubectl get svc
Kontrollera åtkomst via curl http://<worker-ip>:<port> eller konfigurera MetalLB för externa LoadBalancer-IP:er.
🧰 Användbara anteckningar
-
Kubeconfig:
/etc/rancher/k3s/k3s.yaml- Kopiera till din lokala maskin och
export KUBECONFIG=...för att hantera på distans.
- Kopiera till din lokala maskin och
-
Systemd-tjänster:
sudo systemctl status k3ssudo systemctl status k3s-agent(på workers)
💡 Extras (Valfritt)
-
K9s: Terminalgränssnitt för hantering av Kubernetes:
brew install k9sellersudo snap install k9s -
Dashboard: Aktivera med manifest:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml -
MetalLB: Lägg till lastbalanseringsstöd för bare-metal:
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.10/config/manifests/metallb-native.yaml
📦 Rensning
För att ta bort k3s:
# På master:
/usr/local/bin/k3s-uninstall.sh
# På worker:
/usr/local/bin/k3s-agent-uninstall.sh
Installera 3-nod bare-metal K3s-kluster med Terraform
Här är en Terraform mall som hjälper till att tillhandahålla en 3-nod bare-metal K3s-kluster under antagandet att du hanterar redan tillhandahållna Linux-servrar (t.ex. i ditt LAN/hemma-lab) via SSH och Ansible. Terraform kommer att anropa Ansible playbooks för att installera K3s.
🧱 Antaganden
-
Du har redan:
- 3 servrar med fasta IP-adresser, tillgängliga via SSH.
- SSH-åtkomst (nyckelbaserad).
- Terraform och Ansible installerat lokalt.
-
Mål-OS: Ubuntu/Debian (kan anpassas).
-
Du använder Terraform
local-execeller Ansible provisioner plugin (vi kommer att användalocal-exechär för portabilitet).
📁 Katalogstruktur
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: Installera k3s master
shell: |
curl -sfL https://get.k3s.io | sh -
- name: Hämta node-token
shell: cat /var/lib/rancher/k3s/server/node-token
register: node_token
delegate_to: localhost
- hosts: workers
become: yes
tasks:
- name: Anslut worker till klustret
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 -
Notera: Du kan behöva justera IP eller token-variabelåtkomst beroende på Ansible-versioner. Du kan också generera token på master och spara den i en fil innan du kör worker-installationen.
🚀 Hur man kör
Från k3s-cluster/ katalogen:
terraform init
terraform apply
🧰 Förbättringar (Valfritt)
- Använd dynamisk inventering (t.ex. från DHCP/dnsmasq).
- Lägg till MetalLB-distribution via Ansible.
- Lägg till värdnamn och HA-funktioner.
- Byta mot Ansible roll som
xanmanning.k3sför mer flexibilitet.
Användbara länkar
- https://k3s.io/
- Kubernetes Cheatsheet
- Installera Kubernetes med Kubespray
- Terraform cheatsheet - användbara kommandon och exempel
- Kubernetes-distributioner - snabb översikt över kubeadm, k3s, MicroK8s, Minikube, Talos Linux och RKE2
- Jämförelse av Kubernetes-distributioner för ett 3-nod hemma-lab
- Hur man installerar Ubuntu 24.04 & användbara verktyg
- Docker Cheatsheet
- Docker Compose Cheatsheet - De mest användbara kommandona med exempel