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ı.

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 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.
# 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.enabledapiVersion: 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.
# 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: appdbDeğ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.
# 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.
# 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.
# 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-applicationhelm 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:
# values.yaml
postgresql:
enabled: true
redis:
enabled: false# 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.enabledBu 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.
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.
# Ö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.
# 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.
# 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 productionhelm 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.
# 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: Neverhelm.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.
# 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 }}# 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.
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 templatevehelm install --dry-runile test edin - Release'leri anlamlı isimlerle takip edin ve başarısız yükseltmelerde otomatik geri alma için
--atomicbayrağı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

Prometheus vs Grafana vs Datadog 2026: Monitoring Karşılaştırması ve DevOps Mülakat Soruları
Prometheus, Grafana ve Datadog 2026 monitoring karşılaştırması. Mimari, PromQL, alerting, Kubernetes entegrasyonu, TCO analizi ve observability üzerine tipik DevOps mülakat soruları.

ArgoCD ve GitOps 2026: Kubernetes Continuous Deployment ve Mülakat Soruları
ArgoCD ve GitOps ile Kubernetes üzerinde continuous deployment rehberi. Application CRD, sync waves, ApplicationSets, ArgoCD vs Flux karşılaştırması ve DevOps mülakat soruları.

CI/CD Pipeline Mülakat Soruları: 2026'da GitHub Actions, GitLab CI ve Jenkins
2026 yılında CI/CD pipeline mülakat sorularına hazırlanın. GitHub Actions, GitLab CI ve Jenkins arasındaki farkları, güvenlik pratiklerini ve gerçek dünya yapılandırmalarını keşfedin.