Helm Nedir? Kubernetes Chart Rehberi

## Helm Nedir, Hangi Sorunu Çözer? Kubernetes'e uygulama dağıtmak, birkaç YAML manifestosunu `kubectl apply` ile uygulamaktan ibaret görünür. Ancak o...

Helm Nedir? Kubernetes Chart Rehberi

Helm Nedir, Hangi Sorunu Çözer?

Kubernetes'e uygulama dağıtmak, birkaç YAML manifestosunu kubectl apply ile uygulamaktan ibaret görünür. Ancak ortam sayısı arttığında (geliştirme, test, üretim) aynı manifestoları elle kopyalayıp değiştirmek sürdürülemez hale gelir. Helm, bu manifestoları şablonlaştırıp değer dosyalarıyla parametreleştiren bir paket yöneticisidir. Bir Chart; Deployment, Service, ConfigMap gibi kaynakları tek bir sürümlenebilir paket altında toplar.

Bu rehber orta seviye geliştiriciler için yazıldı. Kubernetes temel kavramlarına (Pod, Deployment, Service) aşina olduğunuz varsayılır.

Önkoşullar ve Sürüm Kapsamı

  • Çalışan bir Kubernetes kümesi ve yapılandırılmış kubectl erişimi.
  • Helm kurulu olmalı. Helm 3, küme tarafında Tiller bileşenine ihtiyaç duymaz; bu rehber Helm 3 davranışını esas alır.
  • Manifest sözdizimi Go template diline dayanır.

Belirli bir Helm sürüm numarası vermiyorum; komutlar Helm 3'ün genel davranışını yansıtır. Kendi ortamınızdaki sürümü helm version ile doğrulayın.

Chart İskeleti Oluşturma

helm create demo-app

Bu komut standart bir dizin yapısı üretir:

demo-app/
  Chart.yaml          # Chart meta verisi (ad, sürüm, apiVersion)
  values.yaml         # Varsayılan değerler
  templates/          # Şablon dosyaları
    deployment.yaml
    service.yaml
    _helpers.tpl      # Yeniden kullanılabilir template parçaları
  charts/             # Bağımlılık chart'ları

Chart.yaml içindeki version chart'ın kendi sürümüdür; uygulamanızın sürümünü ise appVersion alanı taşır. Bu ikisini karıştırmak yaygın bir hatadır.

Şablonlama Mantığı

Helm, templates/ altındaki dosyaları Go template motoruyla işler ve values.yaml içeriğini .Values üzerinden şablonlara aktarır. Basit bir örnek:

# templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Release.Name }}-app
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app: {{ .Release.Name }}-app
  template:
    metadata:
      labels:
        app: {{ .Release.Name }}-app
    spec:
      containers:
        - name: app
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          ports:
            - containerPort: {{ .Values.containerPort }}

Karşılık gelen values.yaml:

replicaCount: 2
image:
  repository: nginx
  tag: "1.27"
containerPort: 80

Burada .Release.Name, helm install sırasında verdiğiniz sürüm adıdır. Kaynak isimlerini sürüm adına bağlamak, aynı chart'ı aynı kümeye birden fazla kez kurmayı mümkün kılar.

Kurulum, Güncelleme ve Geri Alma

# Şablonların ürettiği manifestoları küme uygulamadan önce görmek
helm template demo ./demo-app

# Kurulum
helm install demo ./demo-app

# Değer geçersiz kılarak kurulum
helm install demo ./demo-app --set replicaCount=3

# Değişiklik sonrası güncelleme
helm upgrade demo ./demo-app

# Sürüm geçmişi ve geri alma
helm history demo
helm rollback demo 1

helm template ve helm install --dry-run adımları, üretime gitmeden önce üretilen manifestoyu denetlemenizi sağlar. Şablon hatalarını yakalamanın en pratik yolu budur.

Değerleri Ortama Göre Ayırma

Aynı chart'ı farklı ortamlarda farklı değerlerle çalıştırmak için ayrı değer dosyaları kullanın:

helm upgrade demo ./demo-app -f values-prod.yaml

-f ile verilen dosyalar values.yaml üzerine birleştirilir; sonra gelen dosya öncekini geçersiz kılar. Üretim sırlarını (parola, token) düz metin değer dosyasına yazmak yerine Kubernetes Secret ya da harici bir sır yönetimi aracıyla beslemek daha güvenlidir.

Yaygın Hatalar

  • appVersion ile version karışıklığı: Chart sürümü ile uygulama sürümü farklı alanlardır.
  • Şablon içinde sabit değer gömme: Ortama göre değişmesi gereken değerleri values.yaml'a taşıyın, şablona gömmeyin.
  • helm upgrade sonrası beklenmeyen kaynak silinmesi: Şablondan çıkarılan bir kaynak, upgrade sırasında kümeden kaldırılır. Değişikliği helm diff benzeri araçlarla önceden inceleyin.
  • İsim çakışması: Kaynak adlarını .Release.Name ile öneklemek, aynı kümede çoklu kurulumda çakışmayı önler.

Güvenlik Notları

  • Değer dosyalarına gömülen sırlar sürüm kontrolüne sızabilir. Sırları ayrı tutun.
  • Chart'ları yalnızca güvendiğiniz kaynaklardan çekin; şablonlar kümede ayrıcalıklı kaynak üretebilir.
  • Üretimde helm upgrade öncesi değişiklikleri gözden geçirin; geri alma (rollback) her durumu eski haline getirmez, özellikle veri şeması değişikliklerinde.

Sonuç

Helm, tekrar eden manifestoları parametreleştirilebilir bir pakete dönüştürerek çok ortamlı dağıtımı yönetilebilir kılar. Doğru kullanımın anahtarı; değerleri şablondan ayırmak, sırları değer dosyalarından uzak tutmak ve her upgrade öncesi üretilen manifestoyu denetlemektir.

İLGİLİ İÇERİKLER

Bunları da Okumak İsteyebilirsiniz