Recraftory

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 helm

Linux

curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

Verifikasi

helm version

Command Helm

Repository

helm repo add stable https://charts.helm.sh/stable
helm repo update
helm search repo nginx

Install 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=3

Manage Release

helm list
helm status my-release
helm upgrade my-release stable/nginx
helm rollback my-release 1
helm uninstall my-release

Membuat 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.yaml

Chart.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: false

Template 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 lint untuk validasi chart
  • Gunakan helm template untuk preview manifest
  • Pin versi chart untuk reproducibility