Fondasi sebelum menyentuh Helm: skill dasar Kubernetes (Pod, Deployment, Service, ConfigMap, Secret, Namespace, Ingress), kebiasaan kubectl dan struktur YAML, ditambah setup cluster lokal dengan verifikasi helm version dan pod pertama.

Selamat datang di series Belajar Helm Chart! Series ini akan membawa kalian dari nol hingga mampu membangun chart Helm production-grade dan mengelola aplikasi di Kubernetes secara profesional. Total 30 episode yang saling membangun: prasyarat dan setup environment, sejarah mengapa Helm lahir, arsitektur Helm 3, dasar-dasar CLI, manajemen release, upgrade dan rollback, konfigurasi values, membangun chart sendiri, Go template, dependencies, hooks, JSON Schema, testing, dokumentasi, packaging, repository, OCI registry, hingga integrasi CI/CD dan GitOps.
Mengapa Helm begitu penting? Kubernetes menyelesaikan orkestrasi container dengan luar biasa, tapi meninggalkan masalah baru: manajemen puluhan file YAML secara manual. Aplikasi production bukan satu Deployment — ia terdiri atas Deployment, Service, ConfigMap, Secret, Ingress, HorizontalPodAutoscaler, dan ServiceAccount yang harus konsisten di environment dev, staging, dan production. Helm membungkus semuanya menjadi satu paket yang bisa di-install, di-upgrade, dan di-rollback dengan satu perintah. DevOps Engineer yang tidak mengenal Helm seperti frontend developer yang menulis seluruh styling sebagai inline style: bisa berjalan, tapi mustahil dipertahankan di skala tim dan skala sistem.
Episode 0 ini adalah peta jalan. Sebelum menyentuh Helm, kita memastikan lima hal: (1) skill Kubernetes yang wajib kalian kuasai, (2) kebiasaan kubectl yang nyaman di jari, (3) pemahaman YAML sebagai bahasa manifest, (4) mental model package manager yang akan membuat Helm terasa familier, dan (5) cluster Kubernetes lengkap dengan kubectl dan Helm CLI yang sudah terverifikasi. Semua episode berikutnya berasumsi fondasi ini sudah berdiri kokoh. Mari mulai.
Helm tidak menggantikan Kubernetes — ia berada di atas Kubernetes. Semua yang Helm install pada akhirnya adalah resource Kubernetes biasa: Pod, Deployment, Service, dan seterusnya. Jika kalian tidak memahami apa yang Helm ciptakan, kalian tidak akan bisa membaca output helm get manifest, mendebug kegagalan install, atau menilai apakah sebuah chart aman untuk dipakai. Inilah resource yang wajib kalian pahami sebelum lanjut.
| Resource | Fungsi | Analogi |
|---|---|---|
| Pod | Unit terkecil yang berjalan: satu atau lebih container yang berbagi network dan storage | Gerbong tempat container hidup |
| Deployment | Mengelola sekumpulan replica Pod, mendukung rolling update dan rollback | Manajer tim yang memastikan jumlah anggota selalu sesuai |
| Service | Pintu akses stabil ke Pod yang IP-nya selalu berganti | Resepsionis: alamat tetap, orang di belakangnya boleh berganti |
| ConfigMap | Menyimpan konfigurasi non-rahasia sebagai pasangan key-value | Papan pengumuman konfigurasi |
| Secret | Menyimpan data sensitif (password, token) terenkripsi di etcd | Brankas data rahasia |
| Namespace | Memisahkan cluster menjadi beberapa lingkungan logis | Pembagian ruangan dalam satu gedung kantor |
| Ingress | Gerbang masuk HTTP/HTTPS dari luar cluster, diteruskan ke Service | Resepsionis utama gedung |
Pahami bukan hanya definisinya, tapi hubungan antar resource: Ingress → Service → Deployment → Pod → ConfigMap/Secret. Inilah alur yang akan kalian lihat di hampir semua chart Helm. Coba buat sendiri di lab: sebuah Deployment nginx yang membaca index.html dari ConfigMap, diekspos lewat Service, lalu dilindungi Ingress. Jika kalian bisa menjelaskan alur itu tanpa membuka catatan, fondasi kalian sudah kuat.
Note
Perhatikan satu detail yang sering disalahpahami: Deployment tidak mengelola Pod secara langsung. Ia mengelola ReplicaSet, dan ReplicaSet-lah yang menciptakan serta mempertahankan jumlah Pod. Pemahaman rantai Deployment → ReplicaSet → Pod ini penting saat kita membahas upgrade dan rollback di episode 5.
Helm menjembatani kalian dengan Kubernetes API server — tetapi kubectl adalah tangan kanan untuk verifikasi. Ketika Helm bilang "release terinstall", kalian tidak langsung percaya; kalian verifikasi dengan kubectl. Kuasai perintah-perintah berikut sampai mengalir tanpa berpikir:
| Perintah | Kegunaan |
|---|---|
kubectl get pods | Daftar Pod beserta statusnya |
kubectl get all -n default | Semua resource utama dalam satu namespace |
kubectl describe pod <nama> | Detail lengkap + event terbaru (alat debugging nomor satu) |
kubectl apply -f <file> | Menerapkan manifest |
kubectl logs -f <pod> | Streaming log aplikasi |
kubectl port-forward svc/<nama> 8080:80 | Terowongan akses ke aplikasi di dalam cluster |
kubectl delete -f <file> | Menghapus resource |
Sebagian besar debugging di series ini mengikuti pola yang sama: helm install → gagal → kubectl get pods → Pod CrashLoopBackOff → kubectl describe pod → baca bagian Events → kubectl logs → temukan akar masalah. Jika alur ini masih terasa asing, latih dulu di episode ini.
Tip
Biasakan membaca bagian Events pada output kubectl describe — di situlah Kubernetes menulis cerita lengkap: image gagal di-pull, liveness probe gagal, resource tidak cukup, dan seterusnya. Bagian ini akan menjadi sahabat kalian di seluruh series.
Semua resource Kubernetes ditulis dalam YAML — dan semua chart Helm pada akhirnya merender YAML. Dua konsep YAML yang wajib kalian kuasai: mapping (pasangan key-value, ditandai indentasi) dan sequence (list, ditandai tanda hubung). Indentasi adalah segalanya — YAML tidak mengenal tab, dan dua spasi adalah konvensi Kubernetes.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-demo
labels:
app: nginx-demo
spec:
replicas: 3
selector:
matchLabels:
app: nginx-demo
template:
metadata:
labels:
app: nginx-demo
spec:
containers:
- name: nginx
image: nginx:1.27
ports:
- containerPort: 80Perhatikan strukturnya: apiVersion, kind, metadata, dan spec adalah mapping. Di bawah containers ada sequence (tanda hubung), dan setiap item-nya adalah mapping. Kelak, ketika Helm merender template, output akhirnya berbentuk persis seperti ini — bedanya, bagian yang berubah (nama, image, jumlah replica) diambil dari variable template, bukan ditulis manual.
Kalian mungkin sudah akrab dengan npm untuk JavaScript atau pip untuk Python. Helm dibangun di atas mental model yang sama — dan inilah kunci agar pemahaman kalian cepat terbentuk:
.tgz di npm.MAJOR.MINOR.PATCH.Perbedaan penting dengan npm: npm mengelola library yang dieksekusi di dalam program; Helm mengelola infrastruktur deklaratif — file YAML yang dikirim ke API server Kubernetes. Tapi pola mentalnya identik: satu perintah untuk install, satu perintah untuk upgrade, satu perintah untuk uninstall, dan sebuah "registry" untuk berbagi paket.
Note
Ada satu konsep templating yang akan membayangi series ini: satu chart, banyak release. Satu chart nginx bisa di-install sepuluh kali dengan nama release berbeda (dan values berbeda) di cluster yang sama — persis seperti satu package npm yang bisa di-install di banyak proyek.
Kalian butuh cluster Kubernetes untuk latihan. Untuk series ini, cluster lokal lebih dari cukup — bahkan lebih baik karena murah, cepat, dan aman untuk dihancurkan berkali-kali. Pilihannya:
| Tool | Cara Kerja | Kelebihan | Kekurangan |
|---|---|---|---|
| Minikube | VM tunggal berisi cluster kecil | Paling ramah pemula, banyak addon | Butuh VM driver, agak lambat |
| Kind | Cluster berjalan di dalam container Docker | Super cepat, populer untuk CI | Cluster "asli" tapi berjalan dalam container |
| K3s | Distribusi Kubernetes ringan | Sangat ringan, cocok untuk edge dan lab | Sedikit berbeda dari Kubernetes penuh |
| EKS/GKE/AKS | Cluster managed di cloud | Skala nyata, persis produksi | Berbayar, lebih kompleks untuk latihan |
Rekomendasi untuk series ini: Minikube untuk pemula, atau Kind jika kalian sudah nyaman dengan Docker. Keduanya menjalankan Kubernetes asli (bukan simulasi) — semua perintah Helm di series ini bekerja identik di cluster lokal maupun produksi.
Important
Pastikan mesin kalian memenuhi syarat minimum: RAM 8 GB ke atas (cluster lokal nyaman di 8 GB, sangat nyaman di 16 GB), ruang disk kosong 10 GB untuk image dan data, serta koneksi internet stabil untuk menarik image container dan chart. Developer Mac/Windows dengan Docker Desktop bisa memakai Kind; pengguna Linux bebas memilih Minikube atau Kind.
kubectl adalah CLI resmi Kubernetes — jembatan pertama kalian ke cluster. Instalasi paling portabel lewat binary resmi, tapi manajer paket juga valid:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
kubectl version --clientPerhatikan kubectl version memiliki dua bagian output: Client Version dan Server Version. Saat baru menginstal, bagian server belum ada karena cluster belum dibuat. Yang penting saat ini: Client Version tampil dan versinya berjarak maksimal satu versi minor dari versi server kelak. Setelah cluster siap, verifikasi koneksi:
kubectl version
kubectl cluster-info
kubectl get nodesOutput kubectl cluster-info menampilkan URL API server, dan kubectl get nodes menunjukkan node yang Ready — tanda resmi bahwa kubectl kalian sudah bisa berbicara dengan cluster.
Helm 3 adalah satu binary client tanpa daemon server — setelah terpasang, ia langsung siap dipakai. Cara tercepat dan paling banyak dipakai di mesin lokal adalah script installer resmi (pembahasan lengkap semua metode ada di episode 3):
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
helm versionhelm version menampilkan versi client Helm beserta versi Go yang dipakai membangunnya, contohnya version.BuildInfo{Version:"v3.16.0"}. Pastikan angka utama (major) adalah 3 — seluruh series ini memakai Helm 3. Berbeda dengan kubectl, Helm tidak punya bagian "server version" karena ia berkomunikasi langsung dengan API server Kubernetes melalui kubeconfig yang sama dengan kubectl.
Tip
Helm membaca file kubeconfig yang sama dengan kubectl (default di ~/.kube/config). Selama kubectl get nodes berhasil, helm akan otomatis bisa berbicara ke cluster yang sama — tidak ada konfigurasi tambahan yang perlu di-set.
Selain kubectl dan Helm, siapkan alat pendukung berikut:
go install github.com/yannh/kubeconform/cmd/kubeconform@latest atau binary dari halaman release GitHub.-o json dari kubectl maupun Helm. Instalasi: sudo apt install -y jq.git version merespons.kubeconform -v
jq --version
git --version
echo "Tools OK"Inilah "tes tensi" episode ini: jalankan pod pertama di cluster dan pastikan semuanya bekerja dari hulu ke hilir — kubectl berbicara ke API server, scheduler menempatkan pod, kubelet menarik image dan menjalankan container.
kubectl create deployment hello-k8s --image=nginx:1.27
kubectl get pods
kubectl port-forward deployment/hello-k8s 8080:80Buka http://localhost:8080 — jika halaman selamat datang nginx muncul, environment kalian resmi siap untuk seluruh series. kubectl port-forward adalah keterampilan yang akan kalian pakai berulang kali di episode-episode berikutnya untuk mengakses aplikasi di dalam cluster tanpa mengeksposnya ke publik. Setelah selesai, bersihkan lab:
kubectl delete deployment hello-k8sThe connection to the server localhost:8080 was refused. Solusi: buat cluster dulu (minikube start atau kind create cluster), lalu cek kubectl config current-context.minikube start --memory 4096 atau tambah RAM mesin.Warning
Sepanjang series, bedakan dua konteks: sebelum apply dan sesudah apply. Helm bekerja sebelum apply — ia merender dan menyusun manifest. kubectl bekerja sesudah apply — ia mengamati dan mendebug resource yang sudah hidup di cluster. Kebingungan antara dua konteks ini adalah sumber frustrasi terbesar pemula Helm.
Di episode 0 ini kalian telah memastikan lima fondasi: skill Kubernetes (Pod, Deployment, Service, ConfigMap, Secret, Namespace, Ingress beserta alurnya), kebiasaan kubectl (get, describe, apply, logs, port-forward), pemahaman YAML sebagai bahasa manifest, mental model package manager (Chart ≈ paket, Repository ≈ registry, Release ≈ instalasi), serta cluster lokal dengan kubectl dan Helm CLI yang terverifikasi — dibuktikan dengan pod pertama yang berhasil berjalan.
Poin yang harus kalian bawa:
Ingat, series Belajar Helm Chart terdiri dari 30 episode yang saling membangun. Episode 0 adalah batu bata pertama — dan kalian baru saja meletakkannya dengan sempurna. Di episode 1 selanjutnya kita mundur sejenak untuk memahami sejarah, latar belakang, dan mengapa Helm lahir: tantangan deployment di Kubernetes, evolusi dari Helm 1 ke Helm 3, kisah Tiller yang dihapus karena masalah keamanan, serta perbandingan jujur Helm melawan Kustomize dan kubectl murni. Sampai jumpa di episode 1, dan selamat membangun laboratorium Kubernetes kalian!