Kubernetes Helm Charts: Uygulama Paketleme ve Dağıtım

z

zafer ak

Yazar

29 October 2025 12 dakika okuma 633 görüntülenme
Kubernetes Helm Charts: Uygulama Paketleme ve Dağıtım
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.

İlgili Yazılar