> ## Documentation Index
> Fetch the complete documentation index at: https://docs.skanesgalab.my.id/llms.txt
> Use this file to discover all available pages before exploring further.

# Memulai Kubernetes dengan K3s

> Panduan belajar Kubernetes ringan menggunakan K3s: perbedaan K3s vs K8s penuh, instalasi cepat, setup kubectl, dan hands-on deploy aplikasi pertama.

## Mengapa Memulai Belajar dengan K3s?

Menginstal Kubernetes standar (K8s penuh via kubeadm) memerlukan spesifikasi server yang tinggi (minimal 2-4 vCPU dan RAM 4GB+) serta konfigurasi jaringan yang rumit. Ini sering membuat pemula merasa kewalahan.

**K3s** adalah distribusi Kubernetes bersertifikasi resmi CNCF yang dikembangkan oleh Rancher Labs. K3s dirancang sangat **ringan (*lightweight*)**, dikemas dalam satu file biner (*single binary*) berukuran \< 100MB, dan hanya membutuhkan **RAM minimal 512MB**!

***

## Perbedaan K3s vs K8s Penuh

| Parameter | K3s (Lightweight Kubernetes) | K8s Standar (Upstream Kubernetes) |
| :- | :- | :- |
| **Ukuran & Resource** | Sangat ringan (\< 100MB biner, hemat RAM) | Berat, butuh resource CPU & RAM besar |
| **Penyimpanan Default** | Menggunakan SQLite (default) atau etcd opsional | Wajib menggunakan cluster etcd terpisah |
| **Fitur Bawaan** | Sudah termasuk Ingress (Traefik), Local Storage, Helm Controller | Semua add-on harus diinstal manual satu per satu |
| **Kasus Penggunaan** | Pembelajaran, Homelab, Edge Device (Raspberry Pi), CI/CD | Pusat data skala besar (*Enterprise Data Center*) |
| **Kompatibilitas** | 100% kompatibel dengan API Kubernetes standar (`kubectl`) | API standar Kubernetes asli |

***

## Instalasi Cepat K3s (Single Node)

K3s dapat diinstal di VPS Linux (Ubuntu, Debian, CentOS) hanya dengan **satu baris perintah**:

```bash theme={null}
# Jalankan skrip instalasi resmi K3s
curl -sfL https://get.k3s.io | sh -
```

Setelah instalasi selesai dalam waktu kurang dari satu menit, periksa status layanan:

```bash theme={null}
sudo systemctl status k3s
```

### Konfigurasi Hak Akses `kubectl`

Secara default, file konfigurasi kubeconfig tersimpan di `/etc/rancher/k3s/k3s.yaml` dan hanya bisa dibaca oleh user `root`. Agar dapat dijalankan tanpa `sudo`:

```bash theme={null}
mkdir -p ~/.kube
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chown $(id -u):$(id -g) ~/.kube/config
export KUBECONFIG=~/.kube/config
```

Verifikasi kluster kamu:

```bash theme={null}
kubectl get nodes
```

*Output akan menampilkan status node `Ready` dengan peranan `control-plane,master`.*

***

## Hands-On: Deploy Aplikasi Pertama di K3s

Kita akan mendeploy aplikasi web Nginx sederhana lengkap dengan **Deployment** dan **Service**.

### 1. Buat Berkas Manifes YAML

Buat berkas bernama `app-nginx.yaml`:

```yaml theme={null}
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-web
  labels:
    app: nginx-web
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx-web
  template:
    metadata:
      labels:
        app: nginx-web
    spec:
      containers:
      - name: nginx
        image: nginx:alpine
        ports:
        - containerPort: 80
        resources:
          limits:
            memory: "128Mi"
            cpu: "200m"
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  type: NodePort
  selector:
    app: nginx-web
  ports:
    - port: 80
      targetPort: 80
      nodePort: 30080
```

### 2. Terapkan Manifes ke Kluster

```bash theme={null}
# Deploy manifes menggunakan kubectl
kubectl apply -f app-nginx.yaml

# Periksa status Pod yang sedang dibuat
kubectl get pods -l app=nginx-web

# Periksa status Deployment dan Service
kubectl get deployment nginx-web
kubectl get svc nginx-service
```

### 3. Menguji Akses Aplikasi

Buka peramban atau jalankan curl ke IP node server pada port `30080`:

```bash theme={null}
curl http://localhost:30080
```

Kamu akan melihat halaman sambutan *"Welcome to nginx!"*. Ketiga replika Pod tersebut secara otomatis menerima distribusi beban (*load balance*) dari Kubernetes Service.

***

## Perintah Dasar Troubleshooting K8s / K3s

```bash theme={null}
# Melihat log dari Pod tertentu
kubectl logs <nama_pod>

# Melihat kejadian (events) dan diagnostik masalah Pod jika status Error/CrashLoopBackOff
kubectl describe pod <nama_pod>

# Masuk ke terminal interaktif di dalam Pod
kubectl exec -it <nama_pod> -- /bin/sh

# Menghapus aplikasi yang tadi di-deploy
kubectl delete -f app-nginx.yaml
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.