Pemasangan k3s pada baremetal - panduan langkah demi langkah dan dengan terraform
Memasang little k3s Kubernetes pada cluster homelab
Berikut adalah panduan langkah demi langkah untuk instalasi cluster K3s 3-node pada server bare-metal (1 master + 2 worker).
Panduan ini mengasumsikan Anda mulai dengan instalasi Linux minimal instalasi Linux misalnya, Ubuntu 22.04 atau Debian) pada setiap server, dan ingin meng-host sendiri control plane dan beban kerja Anda.
K3s adalah flavor ringan dari Kubernetes, yang cocok untuk lab kecil ini.
βοΈ Topologi Cluster
Nama Node | Peran | Hostname/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 |
β Prasyarat
π§± Perangkat Keras (Minimum):
- CPU: 2 inti
- RAM: 2GB+ per node
- Disk: 20GB+ per node
π Persyaratan OS:
- Linux (Ubuntu 22.04, Debian 12, dll.)
curl
,ssh
, dansudo
terinstal- Akses root atau sudo
π§Ό Jaringan Bersih:
-
Pastikan semua node dapat menyelesaikan dan mem-ping satu sama lain melalui IP atau hostname.
-
Nonaktifkan swap:
sudo swapoff -a sudo sed -i '/ swap / s/^/#/' /etc/fstab
π Instalasi Langkah Demi Langkah
πLangkah 1: Instalasi K3s pada Control Plane (master-1)
curl -sfL https://get.k3s.io | sh -
Setelah instalasi:
sudo cat /var/lib/rancher/k3s/server/node-token
- Ini memberi Anda token join yang diperlukan untuk node worker.
Konfirmasi cluster sedang berjalan:
sudo kubectl get nodes
k3s
mencakupkubectl
yang terinstal sebagaik3s kubectl
atau disambungkan sebagaikubectl
.
πLangkah 2: Instalasi Agen K3s (worker-1 & worker-2)
Ulangi pada setiap node worker:
Ganti <MASTER_IP>
dan <NODE_TOKEN>
dengan nilai dari langkah 1.
curl -sfL https://get.k3s.io | K3S_URL=https://192.168.1.100:6443 K3S_TOKEN=<NODE_TOKEN> sh -
Contoh:
K3S_URL=https://192.168.1.100:6443 \
K3S_TOKEN=K10abcde123456789::server:abcde123456789 \
sh -c "$(curl -sfL https://get.k3s.io)"
πLangkah 3: Verifikasi Cluster dari master-1
kubectl get nodes
Anda harus melihat:
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
π (Opsional) Aktifkan High Availability (HA)
Untuk HA seperti produksi (opsional dalam lab rumah):
- Gunakan database eksternal (misalnya, MySQL/PostgreSQL/etcd).
- Jalankan beberapa node server dengan flag
--server
dan database bersama. - Lihat: Dokumentasi HA K3s
π§ͺ Uji Deployment
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=LoadBalancer
kubectl get svc
Periksa akses melalui curl http://<worker-ip>:<port>
atau atur MetalLB untuk IP LoadBalancer eksternal.
π§° Catatan yang Berguna
-
Kubeconfig:
/etc/rancher/k3s/k3s.yaml
- Salin ke mesin lokal Anda dan
export KUBECONFIG=...
untuk mengelola secara jarak jauh.
- Salin ke mesin lokal Anda dan
-
Layanan Systemd:
sudo systemctl status k3s
sudo systemctl status k3s-agent
(pada worker)
π‘ Tambahan (Opsional)
-
K9s: UI terminal untuk mengelola Kubernetes:
brew install k9s
atausudo snap install k9s
-
Dashboard: Aktifkan dengan manifest:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
-
MetalLB: Tambahkan dukungan load balancing untuk bare-metal:
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.10/config/manifests/metallb-native.yaml
π¦ Pembersihan
Untuk menghapus k3s:
# Pada master:
/usr/local/bin/k3s-uninstall.sh
# Pada worker:
/usr/local/bin/k3s-agent-uninstall.sh
Instalasi cluster K3s 3-node bare-metal dengan Terraform
Berikut adalah Terraform template yang membantu menyediakan cluster K3s 3-node bare-metal dengan asumsi Anda mengelola server Linux yang sudah disiapkan (misalnya, di LAN/lab rumah) melalui SSH dan Ansible. Terraform akan memanggil playbook Ansible untuk menginstal K3s.
π§± Asumsi
-
Anda sudah memiliki:
- 3 server dengan IP tetap, dapat diakses melalui SSH.
- Akses SSH (berbasis kunci).
- Terraform dan Ansible terinstal secara lokal.
-
OS target: Ubuntu/Debian (dapat dikustomisasi).
-
Anda menggunakan Terraform
local-exec
atau plugin provisioner Ansible (kami akan menggunakanlocal-exec
di sini untuk portabilitas).
π Struktur Direktori
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: Install k3s master
shell: |
curl -sfL https://get.k3s.io | sh -
- name: Get node-token
shell: cat /var/lib/rancher/k3s/server/node-token
register: node_token
delegate_to: localhost
- hosts: workers
become: yes
tasks:
- name: Join worker to 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 -
Catatan: Anda mungkin perlu menyesuaikan akses variabel IP atau token tergantung pada versi Ansible. Anda juga dapat menghasilkan token di master dan menyimpannya ke file sebelum menjalankan instalasi worker.
π Cara Menjalankan
Dari direktori k3s-cluster/
:
terraform init
terraform apply
π§° Peningkatan (Opsional)
- Gunakan pembuatan inventory dinamis (misalnya, dari DHCP/dnsmasq).
- Tambahkan deployment MetalLB melalui Ansible.
- Tambahkan nama host dan fitur HA.
- Ganti dengan role Ansible seperti
xanmanning.k3s
untuk fleksibilitas yang lebih besar.
Tautan yang Berguna
- https://k3s.io/
- Kubernetes Cheatsheet
- Instalasi Kubernetes dengan Kubespray
- Terraform Cheatsheet - perintah berguna dan contoh
- Distribusi Kubernetes - overview cepat dari kubeadm, k3s, MicroK8s, Minikube, Talos Linux dan RKE2
- Perbandingan Distribusi Kubernetes untuk Lab Rumah 3-Node
- Cara Menginstal Ubuntu 24.04 & alat yang berguna
- Docker Cheatsheet
- Docker Compose Cheatsheet - Perintah paling berguna dengan contoh