Instalacja k3s na maszynach fizycznych — krok po kroku i z użyciem Terraform
Instalacja małego klastra Kubernetes z użyciem k3s na homelabie
Oto krok po kroku instrukcja instalacji
3-węzłowego klastra K3s
na serwerach nago metalowych (1 serwer główny + 2 serwery robocze).
Przewodnik zakłada, że zaczynasz od minimalnej instalacji
Linux
(np. Ubuntu 22.04 lub Debian) na każdym serwerze,
i chcesz samodzielnie hostować swoją płaszczyznę sterowania i obciążenia.
K3s
jest
lekką wersją Kubernetes,
która dobrze nadaje się do tego małego laboratorium domowego.
⚙️ Topologia klastra
Nazwa węzła | Rola | Hostname/IP |
---|---|---|
master-1 |
Serwer (Płaszczyzna sterowania) | 192.168.1.100 |
worker-1 |
Agent (Węzeł roboczy) | 192.168.1.101 |
worker-2 |
Agent (Węzeł roboczy) | 192.168.1.102 |
✅ Wymagania wstępne
🧱 Sprzęt (minimalny):
- Procesor: 2 rdzenie
- Pamięć: 2 GB+ na węzeł
- Dysk: 20 GB+ na węzeł
🛠 Wymagania systemowe:
- Linux (Ubuntu 22.04, Debian 12 itp.)
- Zainstalowane:
curl
,ssh
isudo
- Dostęp roota lub sudo
🧼 Czysta sieć:
-
Upewnij się, że wszystkie węzły mogą rozwiązywać i pingować się nawzajem według IP lub nazwy hosta.
-
Wyłącz wymianę (swap):
sudo swapoff -a sudo sed -i '/ swap / s/^/#/' /etc/fstab
🚀 Krok po kroku instalacja
📍Krok 1: Instalacja K3s na płaszczyźnie sterowania (master-1)
curl -sfL https://get.k3s.io | sh -
Po instalacji:
sudo cat /var/lib/rancher/k3s/server/node-token
- To daje Ci token dołączenia, który jest potrzebny dla węzłów roboczych.
Potwierdź, że klaster działa:
sudo kubectl get nodes
k3s
zawiera zainstalowanykubectl
, który jest dostępny jakok3s kubectl
lub jako symlinkkubectl
.
📍Krok 2: Instalacja agentów K3s (worker-1 & worker-2)
Powtórz na każdym węźle roboczym:
Zastąp <MASTER_IP>
i <NODE_TOKEN>
wartościami z kroku 1.
curl -sfL https://get.k3s.io | K3S_URL=https://192.168.1.100:6443 K3S_TOKEN=<NODE_TOKEN> sh -
Przykłady:
K3S_URL=https://192.168.1.100:6443 \
K3S_TOKEN=K10abcde123456789::server:abcde123456789 \
sh -c "$(curl -sfL https://get.k3s.io)"
📍Krok 3: Weryfikacja klastra z master-1
kubectl get nodes
Powinieneś zobaczyć:
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
🔐 (Opcjonalnie) Włączenie wysokiej dostępności (HA)
Dla HA podobnego do produkcji (opcjonalne w laboratorium domowym):
- Użyj zewnętrznego bazy danych (np. MySQL/PostgreSQL/etcd).
- Uruchom wiele węzłów serwerowych z flagą
--server
i wspólną bazą danych. - Zobacz: Dokumentacja K3s HA
🧪 Test wdrożenia
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=LoadBalancer
kubectl get svc
Sprawdź dostępność za pomocą curl http://<worker-ip>:<port>
lub ustaw MetalLB dla IP LoadBalancer zewnętrznych.
🧰 Przydatne informacje
-
Kubeconfig:
/etc/rancher/k3s/k3s.yaml
- Skopiuj do swojego lokalnego komputera i ustaw
export KUBECONFIG=...
, aby zarządzać zdalnie.
- Skopiuj do swojego lokalnego komputera i ustaw
-
Usługi systemd:
sudo systemctl status k3s
sudo systemctl status k3s-agent
(na węzłach roboczych)
💡 Dodatki (opcjonalnie)
-
K9s: Interfejs terminala do zarządzania Kubernetes:
brew install k9s
lubsudo snap install k9s
-
Dashboard: Włącz za pomocą manifestów:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
-
MetalLB: Dodaj wsparcie dla load balancing na nago metal:
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.10/config/manifests/metallb-native.yaml
📦 Czyszczenie
Aby usunąć k3s:
# Na serwerze głównym:
/usr/local/bin/k3s-uninstall.sh
# Na węźle roboczym:
/usr/local/bin/k3s-agent-uninstall.sh
Instalacja 3-węzłowego klastra K3s na nago metal za pomocą Terraform
Oto Terraform szablon,
który pomaga w przygotowaniu 3-węzłowego klastra K3s na nago metal, zakładając, że zarządzasz już przygotowanymi serwerami Linux (np. w sieci LAN/laboratorium domowym) za pomocą SSH i Ansible. Terraform wywoła playbooki Ansible, aby zainstalować K3s.
🧱 Zakłady
-
Masz już:
- 3 serwery z ustalonymi adresami IP, dostępne przez SSH.
- Dostęp SSH (kluczowy).
- Lokalnie zainstalowane Terraform i Ansible.
-
System docelowy: Ubuntu/Debian (można dostosować).
-
Używasz Terraform
local-exec
lub wtyczki Ansible do Terraform (użyjemylocal-exec
tutaj dla portowalności).
📁 Struktura katalogów
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: Instalacja k3s master
shell: |
curl -sfL https://get.k3s.io | sh -
- name: Pobranie node-token
shell: cat /var/lib/rancher/k3s/server/node-token
register: node_token
delegate_to: localhost
- hosts: workers
become: yes
tasks:
- name: Dołączenie węzła roboczego do klastra
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 -
Uwaga: Możesz być zmuszony do dostosowania dostępu do zmiennej IP lub tokena w zależności od wersji Ansible. Możesz również wygenerować token na serwerze głównym i zapisać go do pliku przed uruchomieniem instalacji węzła roboczego.
🚀 Jak uruchomić
Z katalogu k3s-cluster/
:
terraform init
terraform apply
🧰 Ulepszenia (opcjonalnie)
- Użyj dynamicznego generowania listy hostów (np. z DHCP/dnsmasq).
- Dodaj wdrożenie MetalLB za pomocą Ansible.
- Dodaj nazwy hostów i funkcje HA.
- Zastąp rolą Ansible taką jak
xanmanning.k3s
dla większej elastyczności.
Przydatne linki
- https://k3s.io/
- Kubernetes Cheatsheet
- Instalacja Kubernetes z Kubespray
- Terraform cheatsheet - przydatne polecenia i przykłady
- Dystrybucje Kubernetes - szybki przegląd kubeadm, k3s, MicroK8s, Minikube, Talos Linux i RKE2
- Porównanie dystrybucji Kubernetes dla 3-węzłowego laboratorium domowego
- Jak zainstalować Ubuntu 24.04 & przydatne narzędzia
- Docker Cheatsheet
- [Docker Compose Cheatsheet - najbardziej przydatne polecenia z przykładami](https://www.glukhov.org/pl/post/2025/07/docker-compose-cheatsheet/ “Lista najbardziej przydatnych komend docker compose, struktur i przykładów z opisami: Cheat sheet”