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.
Bisakah kamu menemukan bug di DevOps?
Satu potongan kode nyata, satu bug tersembunyi, satu percobaan per hari. Tanpa akun untuk mencoba.

Ditulis oleh
Anthony Fillion-MailletPendiri SharpSkill
Developer fullstack selama lebih dari 10 tahun. Ia menjalankan SharpSkill dan bertanggung jawab atas semua yang diterbitkan di sini.
Diperbarui 23 Juli 2026
Bagikan
Artikel terkait

Keamanan Pipeline DevOps di 2026: SAST, DAST, Supply Chain dan Pertanyaan Interview
Panduan lengkap keamanan pipeline DevOps 2026: implementasi SAST, DAST, SCA, deteksi secrets, SBOM, dan pertanyaan interview DevSecOps.

Keamanan Pipeline DevOps 2026: Praktik Terbaik DevSecOps dan Pertanyaan Wawancara
Panduan lengkap tentang keamanan pipeline DevOps di tahun 2026, mencakup praktik terbaik DevSecOps, implementasi CI/CD yang aman, dan pertanyaan wawancara teknis untuk persiapan karir.

Manajemen Secrets Kubernetes 2026: External Secrets, Vault, dan Pertanyaan Interview
Panduan lengkap manajemen secrets Kubernetes dengan External Secrets Operator dan HashiCorp Vault. Termasuk konfigurasi produksi, rotasi otomatis, dan pertanyaan interview DevOps.