Helm Dasar
Package manager untuk Kubernetes
Apa itu Helm
- Package manager untuk Kubernetes
- Memudahkan deploy aplikasi kompleks
- Menggunakan konsep chart (package) dan release (instance)
- Versioning dan rollback untuk deployment
Konsep Helm
Chart
- Kumpulan file YAML template untuk aplikasi
- Terstruktur dan reusable
- Dapat dipublish ke repository
Release
- Instance chart yang sudah di-deploy ke cluster
- Satu chart dapat di-deploy berkali-kali
Repository
- Tempat menyimpan dan mendistribusikan chart
- Public: Artifact Hub, Helm Hub
- Private: Chartmuseum, OCI registry
Instalasi Helm
macOS
brew install helmLinux
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bashVerifikasi
helm versionCommand Helm
Repository
helm repo add stable https://charts.helm.sh/stable
helm repo update
helm search repo nginxInstall Chart
helm install my-release stable/nginx
helm install my-release stable/nginx --values custom-values.yaml
helm install my-release stable/nginx --set replicaCount=3Manage Release
helm list
helm status my-release
helm upgrade my-release stable/nginx
helm rollback my-release 1
helm uninstall my-releaseMembuat Chart Sendiri
Struktur Chart
mychart/
├── Chart.yaml # Metadata chart
├── values.yaml # Default values
├── charts/ # Dependensi chart
└── templates/ # File template YAML
├── deployment.yaml
├── service.yaml
└── ingress.yamlChart.yaml
apiVersion: v2
name: my-app
description: A Helm chart for my application
type: application
version: 1.0.0
appVersion: "1.0"values.yaml
replicaCount: 1
image:
repository: my-app
tag: latest
pullPolicy: IfNotPresent
service:
type: ClusterIP
port: 80
ingress:
enabled: falseTemplate dengan Values
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "my-app.fullname" . }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: {{ include "my-app.name" . }}
template:
spec:
containers:
- name: app
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
ports:
- containerPort: {{ .Values.service.port }}Helper Functions
{{/* templates/_helpers.tpl */}}
{{- define "my-app.fullname" -}}
{{- printf "%s-%s" .Release.Name .Chart.Name | trunc 63 | trimSuffix "-" -}}
{{- end -}}Helm Hook
- Menjalankan job pada fase tertentu dalam lifecycle release
- Pre-install, post-install, pre-delete, post-delete
- Berguna untuk migrasi database atau backup
Best Practice
- Gunakan semver untuk versioning chart
- Pisahkan values per environment (values-dev.yaml, values-prod.yaml)
- Gunakan
helm lintuntuk validasi chart - Gunakan
helm templateuntuk preview manifest - Pin versi chart untuk reproducibility