Dipublikasikan 10 Juni 2026
Deploy aplikasi ke Kubernetes secara manual dengan kubectl bisa efisien untuk proyek kecil, tetapi semakin kompleks infrastrukturmu, semakin sulit mengelola manifest YAML yang menumpuk. Helm hadir sebagai package manager untuk Kubernetes yang memungkinkan kita mendefinisikan, menginstall, dan mengupgrade aplikasi menggunakan template yang reusable. Artikel ini akan membimbingmu membuat Helm chart dari nol dan mendeploy aplikasi ke cluster Kubernetes dengan pendekatan yang terstruktur dan mudah dikelola.
Bayangkan kamu memiliki sepuluh microservices yang masing-masing memerlukan Deployment, Service, ConfigMap, dan Ingress. Mengelola ratusan file YAML secara manual rentan terhadap human error dan inkonsistensi antar environment. Helm charts mengatasi masalah ini dengan template engine yang memungkinkan satu set manifest ditulis sekali lalu digunakan di development, staging, dan production dengan nilai variabel yang berbeda. Selain itu, Helm menyediakan fitur versioning dan rollback yang kritis untuk deployment di production.
Sebelum memulai, pastikan kamu sudah memiliki cluster Kubernetes yang aktif. Kamu bisa menggunakan Minikube, Kind, Docker Desktop Kubernetes, atau cluster cloud managed seperti GKE, EKS, atau AKS. Selain itu, install kubectl dan pastikan konfigurasi context sudah mengarah ke cluster yang benar. Helm CLI juga harus terinstall di mesin lokal. Artikel ini menggunakan Helm v3 yang tidak memerlukan Tiller di cluster, sehingga lebih aman dan sederhana.
Helm tersedia untuk Linux, macOS, dan Windows. Untuk Linux, jalankan perintah berikut:
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
helm version
Perintah tersebut mengunduh binary Helm terbaru dan menempatkannya di /usr/local/bin. Verifikasi instalasi dengan menjalankan helm version. Jika output menampilkan versi semantik, instalasi berhasil. Untuk macOS, gunakan Homebrew: brew install helm. Windows user bisa menggunakan Chocolatey atau mengunduh binary dari GitHub releases Helm.
Helm menyediakan command scaffolding untuk membuat struktur chart baru. Jalankan:
helm create myapp
Command ini menghasilkan folder myapp dengan struktur standar: Chart.yaml, values.yaml, folder templates, dan charts untuk dependency. Buka Chart.yaml dan sesuaikan metadata seperti nama, deskripsi, versi aplikasi, dan versi chart. File ini adalah identitas chart kamu di registry atau repository. Pastikan versi chart mengikuti semantic versioning agar upgrade dan rollback berjalan lancar.
File values.yaml adalah tempat kamu mendefinisikan default value untuk template. Pisahkan konfigurasi yang sering berubah seperti replica count, image tag, dan resource limit ke sini:
replicaCount: 2
image:
repository: myapp
tag: "1.0.0"
pullPolicy: IfNotPresent
service:
type: ClusterIP
port: 80
ingress:
enabled: true
host: myapp.example.com
resources:
limits:
cpu: 500m
memory: 256Mi
requests:
cpu: 250m
memory: 128Mi
Dengan struktur ini, kamu bisa mengganti image tag saat deployment tanpa harus mengedit file template. Tim DevOps juga bisa mengoverride value tertentu melalui command line atau file values terpisah untuk masing-masing environment.
Buka folder templates dan periksa file deployment.yaml. Helm menggunakan Go template syntax dengan helper function dari library Sprig. Berikut contoh template Deployment yang sudah dimodifikasi:
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "myapp.fullname" . }}
labels:
{{- include "myapp.labels" . | nindent 4 }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
{{- include "myapp.selectorLabels" . | nindent 6 }}
template:
metadata:
labels:
{{- include "myapp.selectorLabels" . | nindent 8 }}
spec:
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
ports:
- containerPort: 80
resources:
{{- toYaml .Values.resources | nindent 12 }}
Perhatikan penggunaan {{ include }} dan {{ .Values }}. Fungsi nindent memastikan indentasi YAML tetap valid. Template ini akan menghasilkan manifest yang valid untuk setiap kombinasi value yang diberikan. Kamu juga bisa menambahkan ConfigMap dan Secret template untuk environment variable dan credential.
Sebelum deploy, validasi chart dengan perintah berikut:
helm lint myapp
helm template myapp ./myapp > /tmp/manifest.yaml
helm install myapp-release ./myapp --dry-run --debug
Perintah helm lint memeriksa sintaksis chart. helm template menampilkan manifest yang dihasilkan tanpa mengirimkannya ke cluster. Dry-run memberikan simulasi deployment lengkap. Setelah yakin, jalankan deployment sesungguhnya:
helm install myapp-release ./myapp
kubectl get pods -l app.kubernetes.io/name=myapp
kubectl get svc myapp-release
Periksa status pod dan service. Jika aplikasi memerlukan ingress, pastikan controller Ingress seperti NGINX Ingress Controller sudah aktif di cluster. Helm akan melacak release history sehingga kamu bisa melihat revisi dan melakukan rollback jika terjadi masalah.
Untuk environment production, gunakan Helm repository untuk menyimpan chart yang sudah terverifikasi. Integrasikan Helm dengan pipeline CI/CD menggunakan command helm upgrade --install agar deployment bersifat idempotent. Selalu tentukan resource requests dan limits untuk mencegah pod mengonsumsi resource cluster secara berlebihan. Gunakan helm rollback jika deployment baru menyebabkan error. Terakhir, pertimbangkan menggunakan Helmfile atau ArgoCD untuk mengelola multiple charts secara declarative di skala besar.
Helm charts mengubah cara kita mengelola aplikasi Kubernetes dari sekumpulan file YAML statis menjadi template yang dinamis dan reusable. Dengan memahami struktur chart, values, dan template syntax, kamu bisa mendeploy aplikasi lebih konsisten di berbagai environment. Mulai dari scaffolding chart, konfigurasi values, hingga verifikasi dry-run, setiap langkah memastikan deployment berjalan dengan prediktabilitas tinggi. Pelajari lebih lanjut di dokumentasi resmi Helm dan Kubernetes Concepts.
Dapatkan feedback, users, dan eksposur dari komunitas kreator, developer, dan entrepreneur digital Indonesia.
Submit Produk → Pelajari Dulu