> ## 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.

# Kubernetes Production: Helm, Deployment & Rollback

> Praktik Kubernetes tingkat lanjut: manajemen paket dengan Helm, rolling update tanpa downtime, strategi rollback, Ingress, dan Horizontal Pod Autoscaler (HPA).

Dalam skala produksi, mengelola ratusan berkas manifes YAML mentah secara manual menggunakan `kubectl apply` sangat berisiko dan sulit dipelihara. Kita membutuhkan alat manajemen paket (*package manager*) dan strategi deployment yang andal.

***

## 1. Manajemen Paket Kubernetes dengan Helm

**Helm** sering disebut sebagai *“apt”* atau *“npm”* untuk Kubernetes. Helm membungkus sekumpulan file YAML (Deployment, Service, Ingress, ConfigMap) menjadi satu paket modular yang disebut **Helm Chart**.

### Instalasi Helm

```bash theme={null}
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
helm version
```

### Konsep Dasar Helm

* **Chart:** Bundel konfigurasi YAML dan template aplikasi.
* **Repository:** Tempat penyimpanan publik/privat tempat Helm Chart dibagikan (seperti Artifact Hub).
* **Release:** Instans dari Helm Chart yang sedang berjalan di dalam kluster.

### Menginstal Aplikasi Populer dengan Helm

Contoh: Menginstal reverse proxy Nginx Ingress Controller ke kluster:

```bash theme={null}
# 1. Tambahkan repository resmi ingress-nginx
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update

# 2. Instal chart ke dalam namespace khusus
helm install my-ingress ingress-nginx/ingress-nginx --create-namespace --namespace ingress-basic

# 3. Melihat daftar rilis Helm yang terpasang
helm list -A
```

***

## 2. Membuat Helm Chart Kustom Sendiri

Kamu dapat membuat paket Chart kustom untuk aplikasimu sendiri:

```bash theme={null}
helm create my-custom-app
```

Struktur folder yang dihasilkan:

* `Chart.yaml`: Informasi nama paket dan versi.
* `values.yaml`: Nilai konfigurasi variabel default (image tag, replica count, port).
* `templates/`: Kumpulan berkas manifes YAML Kubernetes dengan format Go template.

### Men-deploy Helm Chart Kustom:

```bash theme={null}
# Deploy chart dengan menimpa nilai variabel replica count dan image tag
helm install myapp ./my-custom-app \
  --set replicaCount=5 \
  --set image.tag="v2.0.0"
```

***

## 3. Rolling Update & Pembaruan Tanpa Downtime

Saat versi aplikasi baru dirilis, Kubernetes dapat memperbarui Pod satu per satu secara bertahap sehingga pengguna tidak pernah mengalami kegagalan akses:

```bash theme={null}
# Memperbarui image Deployment ke versi baru
kubectl set image deployment/nginx-web nginx=nginx:1.25-alpine --record

# Memantau perkembangan proses rolling update secara langsung
kubectl rollout status deployment/nginx-web
```

***

## 4. Rollback (Mengembalikan ke Versi Stabil Sebelumnya)

Jika versi baru ternyata mengalami bug atau memory leak fatal di lingkungan produksi, kamu dapat segera membatalkan rilis tersebut dalam hitungan detik:

```bash theme={null}
# 1. Melihat riwayat revisi deployment
kubectl rollout history deployment/nginx-web

# 2. Rollback langsung ke 1 versi tepat sebelumnya
kubectl rollout undo deployment/nginx-web

# 3. Atau rollback ke nomor revisi tertentu yang spesifik
kubectl rollout undo deployment/nginx-web --to-revision=2
```

### Rollback pada Helm Release

Jika deployment dilakukan menggunakan Helm, gunakan perintah Helm rollback:

```bash theme={null}
# Melihat histori rilis Helm
helm history myapp

# Mengembalikan rilis ke versi revisi 1
helm rollback myapp 1
```

***

## 5. Skalabilitas Otomatis (Horizontal Pod Autoscaler - HPA)

Kubernetes dapat menambah jumlah Pod secara otomatis ketika beban CPU melebihi ambang batas tertentu:

```bash theme={null}
# Menentukan HPA: skala Pod antara 2 hingga 10 instance jika rata-rata CPU > 75%
kubectl autoscale deployment nginx-web --cpu-percent=75 --min=2 --max=10

# Memantau kondisi metrik autoscaler
kubectl get hpa
```


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