Mert Özen Her Satırda Daha İleri

Blog

Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.

Seriler
19 yazı bulundu
Kubernetes Nedir, Ne Zaman Gerekmez? Control Plane, Node ve Desired State
DevOps SERİ 01

Kubernetes Nedir, Ne Zaman Gerekmez? Control Plane, Node ve Desired State

Kubernetes, ne istediğini bildirdiğin ve gerçek durumu sürekli o isteğe çeken bir container orchestration platformu. Silinen pod'un nasıl geri geldiğini, control plane ile node bileşenlerinin rolünü, kapanan bir node'da gerçekte ne kadar beklendiğini, yılda üç sürümlük destek takvimini ve Kubernetes'in ne zaman gereksiz bir maliyet olduğunu görüyoruz.

8 Kas 2026 12 dk 3
Lokal Kubernetes Cluster'ı ve kubectl: kind, k3d, minikube, Context'ler ve Namespace'ler
DevOps SERİ 02

Lokal Kubernetes Cluster'ı ve kubectl: kind, k3d, minikube, Context'ler ve Namespace'ler

Seride kind kullanıyoruz: üç node'lu cluster tek bir YAML dosyasıyla 20 saniyede kuruluyor, lokal image kind load ile node'lara yükleniyor. kind, k3d, minikube ve Docker Desktop'ı karşılaştırıyor; kubeconfig, context ve namespace'leri, yanlış context'te sessizce çalışan komutları, :latest tag'inin ErrImagePull tuzağını, server dry run'ı, kubectl diff ile drift'i ve kubectl sürüm uyumunu gerçek çıktılarla görüyoruz.

8 Kas 2026 10 dk 2
Kubernetes Pod: .NET Container'ını Çalıştırmak, Lifecycle, Init Container ve Native Sidecar
DevOps SERİ 03

Kubernetes Pod: .NET Container'ını Çalıştırmak, Lifecycle, Init Container ve Native Sidecar

Pod, aynı ağı paylaşan container'ların çalıştırma birimi; .NET 8+ image'ları port 8080'i dinler, chiseled image non-root ve shell'siz gelir, tam aspnet image'ı ise runAsNonRoot'a takılır. Pod phase'lerini, CrashLoopBackOff'un ikiye katlanan backoff'unu, wait-for-db init container'ının sınırlarını, 1.33'te stable olan native sidecar'ı ve SIGTERM'ü yok sayan bir sidecar'ın pod silmeyi neden 30 saniye uzattığını gerçek çıktılarla görüyoruz.

8 Kas 2026 11 dk 3
Kubernetes Deployment ve ReplicaSet: Label'lar, Rolling Update, Rollout Geçmişi ve Geri Alma
DevOps SERİ 04

Kubernetes Deployment ve ReplicaSet: Label'lar, Rolling Update, Rollout Geçmişi ve Geri Alma

Deployment pod'larını label selector ile tanır, her pod template'i için bir ReplicaSet yaratır ve rolling update'i maxSurge, maxUnavailable ve minReadySeconds ile yürütür. Dört replica'lık rollout'u saniye saniye izliyor, var olmayan bir tag'in progressDeadlineSeconds'a takılmasını, rollout undo'nun Git'le yarattığı farkı, pause ile tek rollout'u, change-cause tuzağını ve immutable image tag'lerini gerçek çıktılarla görüyoruz.

8 Kas 2026 10 dk 2
Kubernetes Service: ClusterIP, NodePort, LoadBalancer, DNS ve EndpointSlice
DevOps SERİ 05

Kubernetes Service: ClusterIP, NodePort, LoadBalancer, DNS ve EndpointSlice

Service, değişen pod IP'lerinin önüne sabit bir sanal IP ve api.bookstore.svc.cluster.local gibi bir DNS adı koyar; adresleri EndpointSlice'tan, yönlendirmeyi kube-proxy kurallarından alır. Named targetPort'u, bağlantı başına load balancing'in HttpClient'a etkisini, readiness'ın bütün pod'ları trafikten çekmesini, NodePort, LoadBalancer ve headless farkını, externalIPs'in 1.36'daki deprecation'ını ve boş endpoint tuzaklarını gerçek çıktılarla görüyoruz.

8 Kas 2026 10 dk 3
Kubernetes'te Dış Trafik: Ingress, ingress-nginx'in Emekliliği ve Gateway API ile HTTPRoute
DevOps SERİ 06

Kubernetes'te Dış Trafik: Ingress, ingress-nginx'in Emekliliği ve Gateway API ile HTTPRoute

Ingress API'si donduruldu, ingress-nginx Mart 2026'da emekli oldu; yeni yol GatewayClass, Gateway ve HTTPRoute'a bölünmüş Gateway API. kind'da Envoy Gateway kuruyor, /api isteklerini .NET'e, geri kalanını Angular'a yönlendiriyor, PathPrefix'in /apifoo'yu neden yakalamadığını, route status'larını, TLS ve forwarded header notlarını ve ingress2gateway ile geçişin uyarılarını gerçek çıktılarla görüyoruz.

8 Kas 2026 10 dk 2
ConfigMap ve Secret ile .NET Configuration: Environment Variable, Volume ve Değişikliklerin Yansıması
DevOps SERİ 07

ConfigMap ve Secret ile .NET Configuration: Environment Variable, Volume ve Değişikliklerin Yansıması

ConfigMap ve Secret, .NET configuration'ına environment variable (ConnectionStrings__Default) ya da volume'daki dosya olarak girer; env hiç, subPath mount'u hiç güncellenmez, klasör mount'u 10–80 saniyede güncellenir. kind'daki ölçümde .NET 10'un varsayılan watcher'ı ConfigMap değişikliğini görmedi, polling watcher gördü. Provider sırası tuzağını, rollout tetiklemeyi, immutable ConfigMap'i, base64'ün şifreleme olmadığını ve Angular config.json'u gerçek çıktılarla görüyoruz.

8 Kas 2026 10 dk 2
Kubernetes Health Probe'ları: Startup, Liveness, Readiness ve ASP.NET Core Health Check'leri
DevOps SERİ 08

Kubernetes Health Probe'ları: Startup, Liveness, Readiness ve ASP.NET Core Health Check'leri

Startup probe açılışı bekler, liveness takılan process'i yeniden başlatır, readiness pod'u trafikten çeker; ASP.NET Core'da tag'li health check'lerle her probe'a ayrı endpoint verilir. 40 saniyelik ısınmanın liveness ile sonsuz restart döngüsüne girmesini, startupProbe ile sıfır restart'ı, liveness'a veritabanı koyunca iki dakikada dörder restart'lık zinciri ve probe sürelerinin hesabını gerçek çıktılarla görüyoruz.

8 Kas 2026 10 dk 3
Resource Request ve Limit'ler: QoS, OOMKilled, CPU Throttling ve Container'da .NET GC
DevOps SERİ 09

Resource Request ve Limit'ler: QoS, OOMKilled, CPU Throttling ve Container'da .NET GC

Request scheduler'a ayrılacak yeri, limit kernel'e aşılamayacak sınırı söyler; bellek limit'i aşan process OOMKilled olur, CPU limit'ine çarpan throttle edilir. 500m limit'te .NET'in ProcessorCount'u 1'e inip Server GC'yi kapatmasını, heap limit'in limit'in yüzde 75'i olmasını, managed bellekte OutOfMemoryException ile native bellekte OOMKilled farkını, GCHeapHardLimitPercent'in hex tuzağını, throttling'i ve quota'yı gerçek çıktılarla görüyoruz.

8 Kas 2026 9 dk 3
Graceful Shutdown: SIGTERM, terminationGracePeriodSeconds, preStop ve .NET HostOptions
DevOps SERİ 10

Graceful Shutdown: SIGTERM, terminationGracePeriodSeconds, preStop ve .NET HostOptions

Pod silinince SIGTERM ile endpoint'ten çıkarılma aynı anda ve senkronizasyonsuz başlar; bu yarış, her şey doğru yapılmış bir rollout'ta bile 23–26 hataya yol açtı, 5 saniyelik preStop sleep action ile sıfıra indi. .NET'in SIGTERM'de istekleri ve BackgroundService'leri sırayla bitirmesini, ShutdownTimeout ve grace period'un birbirini nasıl kestiğini, chiseled image'da exec sleep'in başarısızlığını gerçek çıktılarla görüyoruz.

8 Kas 2026 8 dk 2
Kubernetes'te Scaling: HPA, VPA, In-Place Resize, KEDA ve PodDisruptionBudget
DevOps SERİ 11

Kubernetes'te Scaling: HPA, VPA, In-Place Resize, KEDA ve PodDisruptionBudget

HPA CPU yüzdesini node'a değil container'ın request'ine göre hesaplar; request yoksa hiç ölçeklemez. HPA v2 behavior ayarlarını, in-place resize sonrası .NET GC'nin yeni limiti görmemesini ve GC.RefreshMemoryLimit çözümünü, KEDA ile RabbitMQ queue'suna göre scale-to-zero'yu, drain'i kilitleyen PodDisruptionBudget'ı ve topology spread tuzağını gerçek kind çıktılarıyla görüyoruz.

8 Kas 2026 14 dk 4
Kubernetes'te Storage ve Stateful Uygulamalar: Volume, PersistentVolumeClaim, StatefulSet ve Veritabanı Kararı
DevOps SERİ 12

Kubernetes'te Storage ve Stateful Uygulamalar: Volume, PersistentVolumeClaim, StatefulSet ve Veritabanı Kararı

Birden fazla replica'nın aynı dosyaya yazması gerekiyorsa çözüm PVC değil object storage'dır; ReadWriteOnce tek pod değil tek node demektir. emptyDir sizeLimit eviction'ını, StorageClass ve reclaim policy'yi, StatefulSet ile PostgreSQL 18'i (yeni PGDATA yolu dahil), managed DB ile operator kararını ve replica'lar arasında kırılan ASP.NET Core Data Protection key ring'ini gerçek çıktılarla görüyoruz.

8 Kas 2026 11 dk 2
Blog Haritası