Pemasangan k3s pada baremetal - panduan langkah demi langkah dan dengan terraform

Memasang little k3s Kubernetes pada cluster homelab

Konten Halaman

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.

kubernetes baremetal cluster

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, dan sudo 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 mencakup kubectl yang terinstal sebagai k3s kubectl atau disambungkan sebagai kubectl.


πŸ“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.
  • Layanan Systemd:

    • sudo systemctl status k3s
    • sudo systemctl status k3s-agent (pada worker)

πŸ’‘ Tambahan (Opsional)

  • K9s: UI terminal untuk mengelola Kubernetes: brew install k9s atau sudo 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 menggunakan local-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