Kubernetes Helm Charts 2026: Panduan Lengkap Packaging, Deployment, dan Pertanyaan Interview
Pelajari Helm Charts Kubernetes secara mendalam dengan tutorial praktis tentang pembuatan chart, templating, deployment, dan pertanyaan interview yang sering ditanyakan.

Kubernetes Helm Charts menyederhanakan deployment aplikasi dengan mengemas semua resource Kubernetes ke dalam satu artefak yang memiliki versi. Helm 3, versi stabil saat ini, menghilangkan kebutuhan akan Tiller dan memperkenalkan dukungan OCI registry, membuat distribusi chart lebih aman dan terstandarisasi. Tutorial ini membahas pembuatan chart, templating, strategi deployment, dan pertanyaan interview yang paling sering ditanyakan oleh tim rekrutmen.
Helm charts berisi Chart.yaml (metadata), values.yaml (nilai default), dan direktori templates/ dengan manifest Kubernetes. Perintah helm install merender template dengan values dan menerapkannya ke cluster.
Memahami Struktur dan Komponen Helm Chart
Helm chart adalah direktori dengan struktur yang telah ditentukan. Nama chart menjadi nama direktori, dan setiap file memiliki tujuan spesifik dalam proses packaging dan deployment.
# Chart.yaml
apiVersion: v2
name: my-application
description: A production-ready web application
type: application
version: 1.0.0
appVersion: "2.1.0"
dependencies:
- name: postgresql
version: "15.x"
repository: "https://charts.bitnami.com/bitnami"
condition: postgresql.enabledapiVersion: v2 menunjukkan kompatibilitas dengan Helm 3. Field version melacak perubahan chart, sementara appVersion mencerminkan versi aplikasi yang di-deploy. Dependencies mendeklarasikan chart lain yang dibutuhkan chart ini, dengan kondisi opsional untuk mengaktifkan atau menonaktifkannya.
# values.yaml
replicaCount: 3
image:
repository: myregistry.io/app
tag: "2.1.0"
pullPolicy: IfNotPresent
service:
type: ClusterIP
port: 8080
resources:
limits:
cpu: 500m
memory: 512Mi
requests:
cpu: 100m
memory: 128Mi
postgresql:
enabled: true
auth:
database: appdbValues mendefinisikan konfigurasi default yang dapat di-override pengguna saat instalasi. Mengelompokkan values di bawah key yang bermakna menjaga konfigurasi tetap terorganisir dan self-documenting.
Membuat Kubernetes Deployments dengan Helm Templates
Helm templates menggunakan Go templating dengan fungsi Sprig untuk menghasilkan manifest Kubernetes secara dinamis. Objek {{ .Values }} menyediakan akses ke konten values.yaml, sementara {{ .Release }} berisi metadata deployment.
# templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "my-application.fullname" . }}
labels:
{{- include "my-application.labels" . | nindent 4 }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
{{- include "my-application.selectorLabels" . | nindent 6 }}
template:
metadata:
labels:
{{- include "my-application.selectorLabels" . | nindent 8 }}
spec:
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- containerPort: {{ .Values.service.port }}
resources:
{{- toYaml .Values.resources | nindent 12 }}Fungsi nindent menambahkan newline dan indentasi, sangat penting untuk menghasilkan YAML yang valid. Menggunakan include dengan named templates (didefinisikan di _helpers.tpl) menjaga template tetap DRY dan mudah dipelihara.
# templates/_helpers.tpl
{{- define "my-application.fullname" -}}
{{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- $name := default .Chart.Name .Values.nameOverride }}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{- define "my-application.labels" -}}
helm.sh/chart: {{ include "my-application.chart" . }}
app.kubernetes.io/name: {{ include "my-application.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}Helper templates menstandardisasi konvensi penamaan dan label di semua resource, memastikan konsistensi dengan label yang direkomendasikan Kubernetes.
Helm Chart Dependencies dan Subcharts
Aplikasi kompleks sering bergantung pada database, cache, atau message queue. Helm dependencies memungkinkan penyematan ini sebagai subcharts, yang dikelola secara otomatis selama instalasi.
# Update dependencies sebelum packaging
helm dependency update ./my-application
# Build dependencies (membuat direktori charts/)
helm dependency build ./my-applicationPerintah helm dependency update mengunduh dependencies ke direktori charts/. Conditional dependencies menggunakan values untuk toggle penyertaan:
# values.yaml
postgresql:
enabled: true
redis:
enabled: false# Chart.yaml
dependencies:
- name: postgresql
version: "15.x"
repository: "https://charts.bitnami.com/bitnami"
condition: postgresql.enabled
- name: redis
version: "19.x"
repository: "https://charts.bitnami.com/bitnami"
condition: redis.enabledPola ini memungkinkan konfigurasi spesifik environment di mana production menggunakan managed services sementara development menggunakan database in-cluster.
Helm 3.8+ mendukung penyimpanan charts di OCI-compliant registries seperti Docker Hub, GitHub Container Registry, dan AWS ECR. Push charts dengan helm push my-app-1.0.0.tgz oci://registry.example.com/charts.
Deploy Helm Charts dengan Release Management
Helm melacak deployment sebagai releases, memungkinkan versioned rollback dan upgrade. Setiap release memelihara history untuk audit dan recovery.
# Install chart dengan custom values
helm install my-release ./my-application \
--namespace production \
--create-namespace \
--values production-values.yaml \
--set image.tag=2.1.1
# Upgrade release yang sudah ada
helm upgrade my-release ./my-application \
--namespace production \
--values production-values.yaml \
--set image.tag=2.2.0 \
--atomic \
--timeout 5mFlag --atomic memastikan upgrade yang gagal secara otomatis di-rollback. Flag --timeout mengatur berapa lama Helm menunggu resource menjadi ready sebelum dinyatakan gagal.
# Lihat release history
helm history my-release -n production
# Rollback ke revision sebelumnya
helm rollback my-release 2 -n production
# Uninstall release
helm uninstall my-release -n production --keep-historyFlag --keep-history menyimpan catatan release bahkan setelah uninstall, berguna untuk compliance dan debugging.
Siap menguasai wawancara DevOps Anda?
Berlatih dengan simulator interaktif, flashcards, dan tes teknis kami.
Strategi Testing dan Validasi Helm Chart
Menguji Helm charts sebelum deployment menangkap error template dan masalah konfigurasi lebih awal. Helm menyediakan tools bawaan untuk linting dan dry-run testing.
# Lint chart untuk error dan best practices
helm lint ./my-application
# Render templates secara lokal tanpa deploy
helm template my-release ./my-application \
--values production-values.yaml \
> rendered-manifests.yaml
# Dry-run terhadap cluster API
helm install my-release ./my-application \
--dry-run \
--debug \
--namespace productionPerintah helm template merender manifest secara lokal, berguna untuk CI pipelines yang memvalidasi YAML yang dihasilkan. Flag --dry-run mengirim manifest ke Kubernetes API server untuk validasi tanpa membuat resource.
# templates/tests/test-connection.yaml
apiVersion: v1
kind: Pod
metadata:
name: "{{ include "my-application.fullname" . }}-test"
labels:
{{- include "my-application.labels" . | nindent 4 }}
annotations:
"helm.sh/hook": test
spec:
containers:
- name: curl
image: curlimages/curl:8.7.1
command: ['curl']
args: ['{{ include "my-application.fullname" . }}:{{ .Values.service.port }}/health']
restartPolicy: NeverHelm hooks dengan helm.sh/hook: test berjalan setelah helm test my-release, memvalidasi deployment bekerja dengan benar setelah instalasi.
Teknik Advanced Helm Templating
Production charts memerlukan conditional logic, loops, dan transformasi data. Fungsi Sprig memperluas Go templates dengan utilitas untuk manipulasi string, encoding, dan flow control.
# templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ include "my-application.fullname" . }}-config
data:
{{- range $key, $value := .Values.config }}
{{ $key }}: {{ $value | quote }}
{{- end }}
{{- if .Values.features.enabled }}
FEATURE_FLAGS: {{ .Values.features.flags | join "," | quote }}
{{- end }}# templates/secrets.yaml
apiVersion: v1
kind: Secret
metadata:
name: {{ include "my-application.fullname" . }}-secrets
type: Opaque
data:
{{- range $key, $value := .Values.secrets }}
{{ $key }}: {{ $value | b64enc }}
{{- end }}Fungsi range melakukan iterasi pada maps dan lists. Fungsi b64enc melakukan base64-encode nilai untuk Kubernetes secrets. Pipe operators menghubungkan fungsi untuk transformasi data.
Menyimpan secrets di values.yaml mengeksposnya di version control. Gunakan external secret managers seperti HashiCorp Vault, AWS Secrets Manager dengan External Secrets Operator, atau file values yang dienkripsi SOPS untuk production deployments.
Pertanyaan Interview Helm Charts dan Jawabannya
Interview teknis sering menguji pengetahuan Helm melalui pertanyaan konseptual dan praktis. Bagian berikut mencakup topik yang paling sering ditanyakan.
Apa perbedaan antara helm install dan helm upgrade --install?
helm install membuat release baru dan gagal jika release sudah ada. helm upgrade --install (dengan flag --install) membuat release baru jika belum ada, atau meng-upgrade jika sudah ada. CI/CD pipelines biasanya menggunakan helm upgrade --install untuk idempotent deployments.
Bagaimana cara menyampaikan data sensitif ke Helm charts?
Ada tiga pendekatan: external secret managers (Vault, AWS Secrets Manager), file values terenkripsi (SOPS, sealed-secrets), atau Kubernetes secrets yang dibuat di luar Helm dan direferensikan di templates. Hindari menyimpan secrets di file values.yaml plain-text yang di-commit ke version control.
Apa itu Helm hooks dan kapan seharusnya digunakan?
Hooks dieksekusi pada titik tertentu dalam lifecycle release: pre-install, post-install, pre-upgrade, post-upgrade, pre-delete, post-delete, pre-rollback, post-rollback, dan test. Penggunaan umum termasuk database migrations sebelum upgrades, mengirim notifikasi setelah deployments, atau menjalankan integration tests.
Bagaimana cara menangani chart versioning?
Field version di Chart.yaml melacak perubahan chart menggunakan semantic versioning. Field appVersion melacak versi aplikasi yang di-deploy. Tingkatkan version untuk setiap modifikasi chart, bahkan jika versi aplikasi tetap sama.
Apa tujuan .helmignore?
Mirip dengan .gitignore, .helmignore mengecualikan file dari packaging chart. Entri tipikal termasuk *.tgz (hindari packaging build sebelumnya), .git/, dokumentasi *.md yang tidak diperlukan saat runtime, dan file konfigurasi CI.
Untuk persiapan interview Kubernetes lebih lanjut, eksplorasi modul pertanyaan Kubernetes Basics dan Kubernetes Advanced di SharpSkill.
Kesimpulan
Poin-poin praktis untuk bekerja dengan Helm charts:
- Strukturkan charts dengan pemisahan jelas antara metadata Chart.yaml, default values.yaml, dan direktori templates yang berisi Kubernetes manifests
- Gunakan helper templates di _helpers.tpl untuk menstandardisasi penamaan dan label di semua resource
- Kelola dependencies melalui Chart.yaml dengan conditional enablement untuk konfigurasi spesifik environment
- Uji charts dengan
helm lint,helm template, danhelm install --dry-runsebelum deploy ke production - Lacak releases dengan nama yang bermakna dan gunakan flag
--atomicuntuk automatic rollback pada upgrade yang gagal - Simpan secrets di external managers daripada file values plain-text
Mulai berlatih!
Uji pengetahuan Anda dengan simulator wawancara dan tes teknis kami.
Bagikan
Artikel terkait

Prometheus vs Grafana vs Datadog di Tahun 2026: Perbandingan Monitoring dan Pertanyaan Wawancara DevOps
Perbandingan mendalam Prometheus, Grafana, dan Datadog untuk monitoring di tahun 2026. Perbedaan arsitektur, harga, alerting, serta pertanyaan wawancara DevOps seputar observability.

ArgoCD dan GitOps untuk Kubernetes: Panduan Lengkap serta Pertanyaan Interview 2026
Pelajari cara mengimplementasikan GitOps dengan ArgoCD untuk continuous deployment di Kubernetes. Dilengkapi contoh konfigurasi, perbandingan dengan Flux, dan pertanyaan interview yang sering muncul.

Pertanyaan Wawancara CI/CD Pipeline: GitHub Actions, GitLab CI, dan Jenkins di Tahun 2026
Kumpulan pertanyaan wawancara CI/CD pipeline beserta jawaban untuk tahun 2026. Membahas workflow GitHub Actions, pipeline GitLab CI, Jenkins declarative pipeline, dan keamanan supply chain.