Kubernetes Helm Charts: Uygulama Paketleme ve Dağıtım
z
zafer ak
Yazar
29 October 2025
12 dakika okuma
633 görüntülenme
Helm ile Kubernetes uygulamalarını paketleyin. Chart oluşturma, values, templates ve repository yönetimi.
Helm Nedir?
Helm, Kubernetes için paket yöneticisidir. Charts adı verilen paketler ile karmaşık uygulamaları kolayca deploy edebilirsiniz.
Helm Kurulumu
# macOS
brew install helm
# Linux
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
# Versiyon kontrolü
helm version
Temel Komutlar
# Repo ekleme
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
# Chart arama
helm search repo nginx
# Chart kurulumu
helm install my-nginx bitnami/nginx
# Release listesi
helm list
# Upgrade
helm upgrade my-nginx bitnami/nginx --set replicaCount=3
# Rollback
helm rollback my-nginx 1
# Uninstall
helm uninstall my-nginx
Custom Chart Oluşturma
# Yeni chart oluştur
helm create myapp
# Dizin yapısı
myapp/
├── Chart.yaml # Chart metadata
├── values.yaml # Default değerler
├── charts/ # Bağımlı chartlar
├── templates/ # Kubernetes manifests
│ ├── deployment.yaml
│ ├── service.yaml
│ ├── ingress.yaml
│ ├── _helpers.tpl # Template helpers
│ └── NOTES.txt # Post-install notlar
└── .helmignore
Chart.yaml
apiVersion: v2
name: myapp
description: A Laravel application Helm chart
type: application
version: 0.1.0
appVersion: "1.0.0"
dependencies:
- name: postgresql
version: "12.x.x"
repository: https://charts.bitnami.com/bitnami
condition: postgresql.enabled
- name: redis
version: "17.x.x"
repository: https://charts.bitnami.com/bitnami
condition: redis.enabled
values.yaml
replicaCount: 2
image:
repository: myapp
tag: "latest"
pullPolicy: IfNotPresent
service:
type: ClusterIP
port: 80
ingress:
enabled: true
className: nginx
hosts:
- host: myapp.example.com
paths:
- path: /
pathType: Prefix
resources:
limits:
cpu: 500m
memory: 512Mi
requests:
cpu: 100m
memory: 128Mi
env:
APP_ENV: production
APP_DEBUG: "false"
postgresql:
enabled: true
auth:
database: myapp
username: myapp
redis:
enabled: true
Template Örneği
# templates/deployment.yaml
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: {{ .Values.service.port }}
env:
{{- range $key, $value := .Values.env }}
- name: {{ $key }}
value: {{ $value | quote }}
{{- end }}
resources:
{{- toYaml .Values.resources | nindent 12 }}
Chart Test ve Deploy
# Template render test
helm template myapp ./myapp
# Dry-run
helm install myapp ./myapp --dry-run --debug
# Değerlerle kurulum
helm install myapp ./myapp \
--set image.tag=v1.2.3 \
--set replicaCount=3 \
-f production-values.yaml
Sonuç
Helm, Kubernetes deployment'larını yönetilebilir ve tekrarlanabilir hale getirir. Kendi chart'larınızı oluşturarak DevOps süreçlerinizi hızlandırın.