2026'da Kubernetes Helm Charts: Paketleme, Dağıtım ve Mülakat Soruları

Kubernetes için Helm charts konusunda uzmanlaşın: chart yapısı, şablonlama, bağımlılıklar, dağıtım stratejileri ve DevOps mühendisleri için sık sorulan mülakat soruları.

2026'da Kubernetes Helm Charts: Paketleme, Dağıtım ve Mülakat Soruları

Kubernetes Helm Charts, tüm Kubernetes kaynaklarını tek bir sürümlenmiş yapıya paketleyerek uygulama dağıtımını basitleştirir. Güncel kararlı sürüm olan Helm 3, Tiller gereksinimini ortadan kaldırır ve OCI registry desteği sunarak chart dağıtımını daha güvenli ve standart hale getirir. Bu rehber chart oluşturma, şablonlama, dağıtım stratejileri ve en sık sorulan mülakat sorularını kapsar.

Helm 3 Hızlı Referans

Helm charts Chart.yaml (meta veriler), values.yaml (varsayılanlar) ve Kubernetes manifestlarını içeren templates/ dizininden oluşur. helm install komutu şablonları değerlerle render eder ve cluster'a uygular.

Helm Chart Yapısı ve Bileşenlerini Anlama

Bir Helm chart, önceden tanımlanmış bir yapıya sahip bir dizindir. Chart adı dizin adı olur ve her dosya paketleme ve dağıtım sürecinde belirli bir amaca hizmet eder.

yaml
# Chart.yaml
apiVersion: v2
name: my-application
description: A production-ready web application
type: application
version: 1.0.0
appVersion: "2.1.0"
dependencies:
  - name: postgresql
    version: "15.x"
    repository: "https://charts.bitnami.com/bitnami"
    condition: postgresql.enabled

apiVersion: v2 Helm 3 uyumluluğunu belirtir. version alanı chart değişikliklerini takip ederken, appVersion dağıtılan uygulama sürümünü yansıtır. Bağımlılıklar, bu chart'ın gerektirdiği diğer chart'ları isteğe bağlı koşullarla birlikte bildirir.

yaml
# values.yaml
replicaCount: 3

image:
  repository: myregistry.io/app
  tag: "2.1.0"
  pullPolicy: IfNotPresent

service:
  type: ClusterIP
  port: 8080

resources:
  limits:
    cpu: 500m
    memory: 512Mi
  requests:
    cpu: 100m
    memory: 128Mi

postgresql:
  enabled: true
  auth:
    database: appdb

Değerler, kullanıcıların kurulum sırasında geçersiz kıldığı yapılandırma varsayılanlarını tanımlar. Değerleri anlamlı anahtarlar altında gruplamak, yapılandırmaları düzenli ve kendi kendini belgeleyen halde tutar.

Helm Şablonları ile Kubernetes Deployment Oluşturma

Helm şablonları, Kubernetes manifestlarını dinamik olarak oluşturmak için Sprig fonksiyonları ile Go şablonlama kullanır. {{ .Values }} nesnesi values.yaml içeriğine erişim sağlarken, {{ .Release }} dağıtım meta verilerini içerir.

yaml
# templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ include "my-application.fullname" . }}
  labels:
    {{- include "my-application.labels" . | nindent 4 }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      {{- include "my-application.selectorLabels" . | nindent 6 }}
  template:
    metadata:
      labels:
        {{- include "my-application.selectorLabels" . | nindent 8 }}
    spec:
      containers:
        - name: {{ .Chart.Name }}
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}
          ports:
            - containerPort: {{ .Values.service.port }}
          resources:
            {{- toYaml .Values.resources | nindent 12 }}

nindent fonksiyonu yeni satır ve girinti ekler ki bu YAML oluşturma için kritik öneme sahiptir. Adlandırılmış şablonlarla (_helpers.tpl'de tanımlanan) include kullanmak, şablonları DRY ve bakımı kolay tutar.

yaml
# templates/_helpers.tpl
{{- define "my-application.fullname" -}}
{{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- $name := default .Chart.Name .Values.nameOverride }}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- end }}

{{- define "my-application.labels" -}}
helm.sh/chart: {{ include "my-application.chart" . }}
app.kubernetes.io/name: {{ include "my-application.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}

Yardımcı şablonlar, tüm kaynaklar için adlandırma kurallarını ve etiketleri standartlaştırarak Kubernetes önerilen etiketleriyle tutarlılık sağlar.

Helm Chart Bağımlılıkları ve Alt Chartlar

Karmaşık uygulamalar genellikle veritabanları, önbellekler veya mesaj kuyrukları gerektirir. Helm bağımlılıkları bunları alt chart olarak gömmeye izin vererek kurulum sırasında otomatik yönetim sağlar.

bash
# Paketlemeden önce bağımlılıkları güncelle
helm dependency update ./my-application

# Bağımlılıkları oluştur (charts/ dizini oluşturur)
helm dependency build ./my-application

helm dependency update komutu bağımlılıkları charts/ dizinine indirir. Koşullu bağımlılıklar dahil etmeyi değiştirmek için değerleri kullanır:

yaml
# values.yaml
postgresql:
  enabled: true

redis:
  enabled: false
yaml
# Chart.yaml
dependencies:
  - name: postgresql
    version: "15.x"
    repository: "https://charts.bitnami.com/bitnami"
    condition: postgresql.enabled
  - name: redis
    version: "19.x"
    repository: "https://charts.bitnami.com/bitnami"
    condition: redis.enabled

Bu kalıp, üretimin yönetilen servisleri kullandığı, geliştirmenin ise cluster içi veritabanlarını kullandığı ortama özgü yapılandırmaları mümkün kılar.

OCI Registry Desteği

Helm 3.8+ Docker Hub, GitHub Container Registry ve AWS ECR gibi OCI uyumlu registrylerde chart depolamayı destekler. Chartları helm push my-app-1.0.0.tgz oci://registry.example.com/charts komutuyla gönderin.

Release Yönetimi ile Helm Charts Dağıtımı

Helm dağıtımları release olarak takip ederek sürümlü geri almalar ve yükseltmeler sağlar. Her release denetim ve kurtarma için geçmişi korur.

bash
# Özel değerlerle chart kurulumu
helm install my-release ./my-application \
  --namespace production \
  --create-namespace \
  --values production-values.yaml \
  --set image.tag=2.1.1

# Mevcut release'i yükseltme
helm upgrade my-release ./my-application \
  --namespace production \
  --values production-values.yaml \
  --set image.tag=2.2.0 \
  --atomic \
  --timeout 5m

--atomic bayrağı başarısız yükseltmelerin otomatik geri alınmasını sağlar. --timeout bayrağı Helm'in kaynakların hazır olmasını başarısızlık bildirmeden önce ne kadar bekleyeceğini belirler.

bash
# Release geçmişini görüntüle
helm history my-release -n production

# Önceki revizyona geri al
helm rollback my-release 2 -n production

# Release'i kaldır
helm uninstall my-release -n production --keep-history

--keep-history bayrağı kaldırma sonrasında bile release kayıtlarını korur ki bu uyumluluk ve hata ayıklama için kullanışlıdır.

DevOps mülakatlarında başarılı olmaya hazır mısın?

İnteraktif simülatörler, flashcards ve teknik testlerle pratik yap.

Helm Chart Test ve Doğrulama Stratejileri

Dağıtımdan önce Helm chartlarını test etmek, şablon hatalarını ve yapılandırma sorunlarını erken yakalar. Helm, linting ve dry-run testi için yerleşik araçlar sağlar.

bash
# Chartı hatalar ve en iyi uygulamalar için lintleme
helm lint ./my-application

# Dağıtmadan şablonları yerel olarak render etme
helm template my-release ./my-application \
  --values production-values.yaml \
  > rendered-manifests.yaml

# Cluster API'sine karşı dry-run
helm install my-release ./my-application \
  --dry-run \
  --debug \
  --namespace production

helm template komutu manifestları yerel olarak render eder ki bu oluşturulan YAML'ı doğrulayan CI pipeline'ları için kullanışlıdır. --dry-run bayrağı manifestları kaynak oluşturmadan doğrulama için Kubernetes API sunucusuna gönderir.

yaml
# templates/tests/test-connection.yaml
apiVersion: v1
kind: Pod
metadata:
  name: "{{ include "my-application.fullname" . }}-test"
  labels:
    {{- include "my-application.labels" . | nindent 4 }}
  annotations:
    "helm.sh/hook": test
spec:
  containers:
    - name: curl
      image: curlimages/curl:8.7.1
      command: ['curl']
      args: ['{{ include "my-application.fullname" . }}:{{ .Values.service.port }}/health']
  restartPolicy: Never

helm.sh/hook: test ile Helm hookları helm test my-release sonrasında çalışarak kurulum sonrası dağıtımların doğru çalıştığını doğrular.

İleri Düzey Helm Şablonlama Teknikleri

Üretim chartları koşullu mantık, döngüler ve veri dönüşümü gerektirir. Sprig fonksiyonları Go şablonlarını string manipülasyonu, kodlama ve akış kontrolü için yardımcı programlarla genişletir.

yaml
# templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ include "my-application.fullname" . }}-config
data:
  {{- range $key, $value := .Values.config }}
  {{ $key }}: {{ $value | quote }}
  {{- end }}
  
  {{- if .Values.features.enabled }}
  FEATURE_FLAGS: {{ .Values.features.flags | join "," | quote }}
  {{- end }}
yaml
# templates/secrets.yaml
apiVersion: v1
kind: Secret
metadata:
  name: {{ include "my-application.fullname" . }}-secrets
type: Opaque
data:
  {{- range $key, $value := .Values.secrets }}
  {{ $key }}: {{ $value | b64enc }}
  {{- end }}

range fonksiyonu map ve listeler üzerinde iterasyon yapar. b64enc fonksiyonu Kubernetes secretları için değerleri base64 olarak kodlar. Pipe operatörleri veri dönüşümü için fonksiyonları zincirler.

Secret Yönetimi

Secretları values.yaml içinde saklamak bunları sürüm kontrolünde açığa çıkarır. Üretim dağıtımları için HashiCorp Vault, External Secrets Operator ile AWS Secrets Manager veya SOPS şifreli values dosyaları gibi harici secret yöneticilerini kullanın.

Helm Charts Mülakat Soruları ve Cevapları

Teknik mülakatlar sıklıkla kavramsal ve pratik sorularla Helm bilgisini test eder. Aşağıda en sık sorulan konular yer almaktadır.

helm install ile helm upgrade --install arasındaki fark nedir?

helm install yeni bir release oluşturur ve release zaten varsa başarısız olur. helm upgrade --install (--install bayrağıyla) release yoksa yeni bir release oluşturur veya varsa günceller. CI/CD pipeline'ları genellikle idempotent dağıtımlar için helm upgrade --install kullanır.

Helm chartlarına hassas veriler nasıl aktarılır?

Üç yaklaşım mevcuttur: harici secret yöneticileri (Vault, AWS Secrets Manager), şifreli values dosyaları (SOPS, sealed-secrets) veya Helm dışında oluşturulup şablonlarda referans verilen Kubernetes secretları. Sürüm kontrolüne commit edilen düz metin values.yaml dosyalarında secret saklamaktan kaçının.

Helm hookları nedir ve ne zaman kullanılmalıdır?

Hooklar release yaşam döngüsünün belirli noktalarında çalışır: pre-install, post-install, pre-upgrade, post-upgrade, pre-delete, post-delete, pre-rollback, post-rollback ve test. Yaygın kullanımlar arasında yükseltmelerden önce veritabanı migrasyonları, dağıtımlardan sonra bildirim gönderme veya entegrasyon testleri çalıştırma yer alır.

Chart sürümleme nasıl yönetilir?

Chart.yaml'daki version alanı semantik sürümleme kullanarak chart değişikliklerini takip eder. appVersion alanı dağıtılan uygulama sürümünü takip eder. Uygulama sürümü aynı kalsa bile her chart değişikliği için version artırın.

.helmignore'un amacı nedir?

.gitignore'a benzer şekilde, .helmignore dosyaları chart paketlemesinden hariç tutar. Tipik girişler arasında *.tgz (önceki derlemeleri paketlemekten kaçınma), .git/, çalışma zamanında gerekli olmayan *.md belgeleri ve CI yapılandırma dosyaları bulunur.

Daha fazla Kubernetes mülakat hazırlığı için SharpSkill'deki Kubernetes Temelleri ve Kubernetes İleri Düzey soru modüllerini inceleyin.

Sonuç

Helm chartları ile çalışmak için pratik çıkarımlar:

  • Chartları Chart.yaml meta verileri, values.yaml varsayılanları ve Kubernetes manifestlarını içeren templates dizini arasında net bir ayrımla yapılandırın
  • Tüm kaynaklar için adlandırma ve etiketleri standartlaştırmak üzere _helpers.tpl'de yardımcı şablonlar kullanın
  • Ortama özgü yapılandırmalar için koşullu etkinleştirme ile Chart.yaml aracılığıyla bağımlılıkları yönetin
  • Üretime dağıtmadan önce chartları helm lint, helm template ve helm install --dry-run ile test edin
  • Release'leri anlamlı isimlerle takip edin ve başarısız yükseltmelerde otomatik geri alma için --atomic bayrağını kullanın
  • Secretları düz metin values dosyaları yerine harici yöneticilerde saklayın

Pratik yapmaya başla!

Mülakat simülatörleri ve teknik testlerle bilgini test et.

Paylaş

İlgili makaleler