Kubernetes'te PodDisruptionBudget ve Düğüm Boşaltma: Bütçe Nasıl Yazılır, Bakım Neden Kilitlenir
PodDisruptionBudget yalnızca gönüllü kesintileri sınırlar ve yanlış yazıldığında ya hiçbir şeyi korumaz ya da düğüm boşaltmayı süresiz kilitler. minAvailable ile maxUnavailable arasındaki seçim, sağlıksız pod politikası ve drain sırasındaki tuzaklar.
Bir Kubernetes kümesinde düğümleri güncellemek, ölçeklendirici fazla düğümü kapatmak ya da donanım değiştirmek için düğüm boşaltılır. Bu işlemlerin hepsi gönüllü kesintidir: kümeyi işleten taraf bir pod'u bilerek yerinden eder. PodDisruptionBudget (PDB) tam bu anlar için vardır ve "bu uygulamadan aynı anda en fazla şu kadarı gidebilir" kuralını koyar. Kâğıt üzerinde basit bir nesnedir, ama yanlış yazıldığında iki uç sonuç üretir: ya hiçbir şeyi korumaz ya da bütün bakım işlerini süresiz kilitler.
PDB neyi korur, neyi korumaz
PDB yalnızca Eviction API üzerinden gelen istekleri sınırlar. kubectl drain, küme otomatik ölçeklendiricisi ve yönetilen servislerin düğüm havuzu güncellemeleri bu API'yi kullanır. Bütçe izin vermezse API isteği 429 koduyla reddeder ve çağıran taraf bir süre sonra yeniden dener.
Korumadığı durumlar ise en az bunlar kadar önemlidir:
Düğümün çökmesi, çekirdek paniği, bellek yetersizliği nedeniyle sürecin öldürülmesi gibi gönülsüz kesintiler. PDB bunları engelleyemez, yalnızca bu kesintiler bütçeden düşülür ve ardından gelen gönüllü boşaltmalar daha temkinli olur.
kubectl delete pod ile doğrudan silme. Silme işlemi Eviction API'den geçmez.
Deployment'ın kendi kademeli güncellemesi. Yeni sürüm yayılırken kaç pod'un aynı anda gideceğini maxUnavailable ve maxSurge belirler, PDB değil.
Bu ayrım önemlidir çünkü ekipler sık sık "PDB koyduk, artık kesinti olmaz" diye düşünür. PDB yalnızca kümeyi işleten tarafın uygulamaya saygı göstermesini sağlar.
minAvailable mı maxUnavailable mı
İki alan vardır ve bir PDB'de yalnızca biri kullanılabilir. İkisi de tam sayı ya da yüzde alır.
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: api
spec:
maxUnavailable: 1
selector:
matchLabels:
app: api
Tercihim çoğu durumda maxUnavailable. Gerekçesi şu: minAvailable: 2 yazıldığında bu değer replika sayısından bağımsızdır. Uygulama ileride 2 replikaya indirilirse bütçe sıfır kesintiye düşer ve düğüm boşaltma kilitlenir. maxUnavailable: 1 ise replika sayısı değişse de aynı anda bir pod'un gitmesine izin verir ve ölçeklendirmeyle birlikte doğru davranmaya devam eder.
minAvailable'ın doğru seçim olduğu yer, mutlak bir alt sınırın olduğu durumlardır. Üç üyeli bir uzlaşı (quorum) kümesinde en az iki üyenin ayakta kalması gerekir; burada minAvailable: 2 niyeti en açık anlatan yazımdır. Yine de üç üyede maxUnavailable: 1 aynı sonucu verir ve üye sayısı beşe çıkarıldığında daha esnek kalır.
Yüzde kullanırken küçük replika sayılarında yuvarlamanın sonucu beklenenden farklı olabilir. Tahmin etmek yerine PDB'yi uyguladıktan sonra kubectl get pdb çıktısındaki ALLOWED DISRUPTIONS sütununa bakın. O sütun sıfırsa boşaltma o uygulamada bekleyecektir.
Boşaltmanın sırası
Elle yapılan bir düğüm bakımı tipik olarak şöyle ilerler:
cordon düğümü yeni pod almaz hâle getirir. drain aynı işi yapar ve ardından pod'ları tahliye eder. DaemonSet pod'ları zaten her düğümde koştuğu için atlanır; emptyDir kullanan pod'lar için verinin kaybolacağını kabul ettiğinizi bayrakla açıkça belirtmeniz gerekir. Bir denetleyiciye bağlı olmayan çıplak pod'lar varsa drain durur, çünkü bu pod'lar tahliye edildiğinde hiçbir yerde yeniden oluşturulmaz. --force bu kontrolü geçer, ama o pod gerçekten kaybolur.
--timeout vermezseniz drain bütçe açılana kadar süresiz bekler. Otomasyonda her zaman bir süre sınırı koyun ve sınır aşıldığında süreci başarısız sayın; sessizce sonraki düğüme geçen bir betik yarım kalmış bakımları biriktirir.
Tuzaklar
Tek replikalı uygulamaya PDB.minAvailable: 1 ya da maxUnavailable: 0 ile korunan tek replikalı bir Deployment hiçbir zaman tahliye edilemez. Düğüm boşaltma o pod'da sonsuza kadar bekler. Yönetilen servislerde davranış değişir: bazıları belirli bir süreden sonra bütçeyi yok sayıp zorla siler, bazıları güncellemeyi başarısız sayar. Her iki sonuç da istediğiniz şey değildir. Tek replikalı bir uygulama kesintiye zaten açıktır; bunu PDB ile gizlemek yerine ya replikayı artırın ya da PDB koymayın ve kesintiyi kabul edin.
Sağlıksız pod'lar bütçeyi kilitler. PDB, hazır (Ready) durumdaki pod'ları sayar. Bir uygulamanın pod'larından biri sürekli çöküyorsa bütçe zaten tükenmiş görünür ve sağlıklı pod'lar da tahliye edilemez. Daha kötüsü, bozuk pod'un kendisi de tahliye edilemez. Kubernetes 1.27'den beri varsayılan olarak açık olan unhealthyPodEvictionPolicy: AlwaysAllow ayarı, hazır olmayan pod'ların bütçeye bakılmadan tahliye edilmesine izin verir. Çoğu durumsuz servis için bu doğru ayardır; bozuk bir pod'u korumanın kimseye faydası yoktur.
spec:
maxUnavailable: 1
unhealthyPodEvictionPolicy: AlwaysAllow
selector:
matchLabels:
app: api
Hazır olma süresi boşaltmayı yavaşlatır. Tahliye edilen pod'un yerine gelen pod hazır olmadan bütçe yeniden açılmaz. Açılışı birkaç dakika süren, önbelleğini ısıtan ya da büyük bir veri yükleyen uygulamalarda yirmi düğümlük bir havuzun güncellemesi saatler alır. Hazır olma kontrolünün gerçekten trafik almaya hazır olmayı ölçtüğünden ve gereksiz yere geciktirilmediğinden emin olun.
Seçici ile gerçek pod'lar uyuşmuyor. PDB'nin seçicisi hiçbir pod'la eşleşmezse hata vermez, sadece hiçbir şeyi korumaz. Etiketler yeniden adlandırıldığında bu durum fark edilmeden oluşur. Tersi de sorundur: bir pod birden fazla PDB'nin seçicisine düşerse Eviction API o pod için isteği reddeder ve boşaltma takılır. Her uygulama için tek PDB, seçicisi Deployment'ın seçicisiyle birebir aynı olsun.
Replikalar aynı düğümde. PDB aynı anda kaç pod'un gidebileceğini söyler, pod'ların nereye yerleşeceğini söylemez. Üç replikanın üçü de aynı düğümdeyse o düğüm çöktüğünde PDB'nin yapabileceği bir şey yoktur. topologySpreadConstraints ile replikaları düğümlere ve mümkünse bölgelere yayın. PDB ile yayılım birlikte çalışır; biri olmadan diğeri eksiktir.
Kapasite yoksa bütçe açılmaz. Boşaltılan düğümdeki pod'ların gidebileceği boş kapasite yoksa yeni pod'lar beklemede kalır, hazır olmazlar ve bütçe kapalı kalır. Düğüm güncellemelerinde önce yeni düğüm ekleyip sonra eskisini boşaltan bir sıra izleyin. Yönetilen servislerin çoğu bunu "surge" ayarıyla sunar.
Ne zaman PDB koymamalı
Tek replikalı ve kesintiyi tolere edebilen işler, toplu işler (Job) ve geliştirme ortamları için PDB genellikle zarardan başka bir şey getirmez. Toplu işlerde tahliye işi baştan başlatır, ama PDB ile korumak düğüm bakımını işin süresine bağlar; bunun yerine işi yeniden başlatılabilir yazmak daha sağlam bir yoldur.
Benzer şekilde, düğüm havuzu güncellemelerini otomatik yapan bir ortamda her takımın kendi PDB'sini serbestçe yazmasına izin vermek, bir tek hatalı bütçenin tüm kümenin güncellemesini durdurmasına yol açabilir. Bunu önlemenin pratik yolu, kabul denetleyicisi ya da politika motoruyla maxUnavailable: 0 gibi kilitleyici değerleri reddetmek ve tek replikalı iş yüklerine PDB eklenmesini engellemektir.
Kısa kontrol listesi
Her durumsuz servis için en az iki replika, maxUnavailable: 1, unhealthyPodEvictionPolicy: AlwaysAllow ve replikaları düğümlere yayan bir yerleşim kuralı makul bir başlangıçtır. Uzlaşı gerektiren durumlu servislerde bütçeyi uzlaşı matematiğine göre yazın ve hazır olma kontrolünü üyenin gerçekten kümeye katıldığını gösterecek şekilde tanımlayın. Son olarak, bu ayarları bir bakım gününde değil, sıradan bir günde bir düğümü boşaltarak deneyin. ALLOWED DISRUPTIONS sıfır olan her uygulama, gerçek bakımda sizi bekletecek olan uygulamadır.
1-5 tab geçiş ·
tab sonraki ·
esc geri al ·
↓ kaydır
> ls -lah ~/services/ --sort=tier
[OK] 25 records · 8 featured · 1 retainer · 16 standard
/02 hizmetler
services.tree
> note
· Fiyatlar USD cinsindendir. 6-12 günlük projelerde %7, 13+ günlük projelerde %14 hacim indirimi uygulanmaktadır. 100 adam-gün ve üzeri kapsamlı programlarda proje bazlı özel fiyatlandırma yapılır. Fiyatlar kapsam, aciliyet ve uzun dönem iş birliğine göre müzakere edilebilir.
> ls ~/products/ --open-source
[OK] 2 entries · 1 live · 1 pre-release
/03 ürünler
products.list
liveaçık kaynak · mit/prod/01
filex
her yere gömülebilen self-hosted dosya yöneticisi
tek go binary · vue/react/web-component embed · 5 storage sürücüsü · realtime collab · rbac · native multi-tenancy · ai ajanları için mcp server
Altyapıyı kurar, otomasyonu sağlar, sistemi ayakta tutar.
BRF Teknoloji, Bursa merkezli bir DevSecOps ve yazılım danışmanlık firmasıdır. Kubernetes cluster yönetiminden serverless platform kurulumuna, CI/CD pipeline tasarımından AI agent geliştirmeye kadar 25 farklı hizmet alanında çalışıyoruz.
İşimizin özü basit: sisteminizi ayağa kaldırır, otomatize eder ve gece 3'te sizi uyandırmayacak hale getiririz. Terraform ile altyapınızı kodlar, ArgoCD ile deploy sürecinizi GitOps'a taşır, Prometheus ile her şeyi izleriz. Bir şey bozulursa — biz bozulmadan önce müdahale ederiz.
Vendor lock-in'e karşıyız. Açık kaynak araçlarla, self-hosted çözümlerle ve endüstri standardı teknolojilerle çalışırız. Knative üzerinde kendi serverless platformunuzu kurarız, Kata Containers ile izole ederiz, Vault ile secret'larınızı yönetiriz. Her projeyi net kapsam, net süre, net fiyatla teslim ederiz.
DevSecOps & CI/CD
Kubernetes & Serverless
Infrastructure as Code
AI & Agent (MCP/ACP)
Güvenlik & Sıfır Güven
Full-Stack Geliştirme
Self-Hosted Çözümler
> grep -i question ~/faq.md
[OK] 3 entries · click to expand
[?]BRF Teknoloji'nin DevOps çözümleri hangi hizmetleri içerir?▾
CI/CD pipeline kurulumu, Kubernetes cluster yönetimi, container migrasyonu, Terraform ile altyapı otomasyonu, monitoring & alerting, şirket içi teknoloji kurulumları ve DevOps danışmanlık hizmetleri sunuyoruz.
[?]Yazılım geliştirme hizmetleriniz nelerdir?▾
MVP geliştirme, mevcut yazılım performans optimizasyonu, backend API geliştirme (Node.js, Go, Python) ve tam stack uygulama geliştirme hizmetleri sunuyoruz. Her projede teknik borç minimumda tutularak teslim edilir.
[?]Hangi DevOps araçlarıyla çalışıyorsunuz?▾
Kubernetes ve Docker’dan Talos Linux’a, Terraform ve OpenTofu’dan Ansible’a, Jenkins, GitLab CI/CD, GitHub Actions, ArgoCD, Flux, Helm ve Rancher’a kadar endüstri standardı araçlarla çalışıyoruz. İzleme ve hata takibinde Prometheus, Grafana, Loki, Tempo, OpenTelemetry ve GlitchTip; ağ katmanında Cilium ve Envoy; test otomasyonunda Playwright, Cypress, k6, Locust, Testcontainers ve Trivy kullanıyoruz. Projenizin ihtiyacına göre en uygun araç setini birlikte belirliyoruz.
brf.sh / 2026
·bursa/tr·
timezone utc+3·
tüm sistemler nominal
> ./connect --target=brf.sh
/05 iletişim
contact.txt
> cat contact.txt
[email][email protected] [phone]+90 530 871 2248 [location] Üçevler Mah. İzmir Yolu Cad 241D 16120 Nilüfer/Bursa [hours] Hafta içi 09:00 — 18:00 UTC+3 [eta] <24s iş günü
[OK] handshake ready
· turnstile enabled
· yanıt süresi: <24s · saat dilimi UTC+3 / bursa
CI/CD Pipeline Kurulumu
GitHub Actions, GitLab CI/CD ile otomatik build, test ve deploy süreçleri.
Mevcut ya da sıfırdan bir repo için otomatik build, test ve deploy pipeline'ı kurulur. GitHub Actions, GitLab CI/CD veya tercih edilen araç kullanılır. Staging + production ortamları için ayrı akışlar tanımlanır.
Mevcut uygulamaların container mimarisine taşınması.
Mevcut uygulamaların container mimarisine taşınması. Docker image tasarımı, Compose yapılandırması ve Kubernetes manifest'lerine dönüştürme. İleri düzey izolasyon için Kata Containers / gVisor dahil edilebilir.
Prometheus, Grafana, Loki ile altyapı ve servis izleme.
Prometheus + Grafana stack kurulumu, servis ve altyapı metrikleri için dashboard'lar, kritik eşikler için alert tanımları. İsteğe bağlı: Zabbix, Loki log aggregation.
GitLab, Nextcloud, VPN, mail sunucusu gibi şirket içi araçlar.
GitLab, Mattermost, Nextcloud, mail sunucusu, VPN, iç monitoring gibi araçların şirket sunucularında kurulumu. Docker Compose veya Kubernetes üzerinde deploy edilir.
MCP/ACP agent'lar, RAG pipeline, multi-agent orchestration, model serving.
LLM entegrasyonu (OpenAI, Claude, Gemini, lokal modeller), MCP (Model Context Protocol) ve ACP (Agent Communication Protocol) ile tool-augmented AI agent'lar. RAG pipeline, multi-agent orchestration, model serving (vLLM/Ollama). Mevcut iş süreçlerine yapay zeka katmanı.
Apache Kafka, RabbitMQ, NATS ile event-driven data pipeline. Apache Airflow ile ETL/ELT orkestrasyon, real-time data akışı, CDC (Change Data Capture). Data lake/warehouse tasarımı, schema registry, dead letter queue yönetimi.
Paketler
Kafka/RabbitMQ kurulumu + temel producer/consumer
$3,500
5–7 adam/gün
ETL pipeline (Airflow + source → warehouse)
$5,200
8–12 adam/gün
Tam event-driven architecture (CDC + streaming + DLQ)
ELK Stack veya Loki + Grafana ile merkezi log yönetimi. OpenTelemetry ile distributed tracing, Jaeger/Tempo entegrasyonu. Log retention politikası, structured logging standartları, anomaly detection. Tüm servislerde uçtan uca observability.
Playwright, Cypress ile E2E test otomasyonu, k6/Gatling ile yük testi. CI/CD pipeline'a entegre pre-deploy quality gate, test coverage raporlama, visual regression testing. AI-assisted test generation ile test yazım süresini %60'a kadar düşürme.
Backstage veya Port ile internal developer portal kurulumu. Self-service ortam oluşturma, golden path template'leri, service catalog, TechDocs entegrasyonu. Developer experience (DX) metrikleri, DORA metrics takibi, cognitive load azaltma.
Paketler
Backstage/Port kurulumu + service catalog
$3,900
6–8 adam/gün
Golden path templates + self-service ortam
$6,500
10–14 adam/gün
Tam platform (portal + templates + DORA + DX metrikleri)
Toplanan Kişisel Verileriniz, Toplanma Yöntemi ve Hukuki Sebebi
Kimliğinizi belirli ya da belirlenebilir kılan her türlü bilgi "kişisel veri" olarak kabul edilmektedir. Web sitemizi ziyaret ettiğinizde veya hizmetlerimizi kullandığınızda; ad, soyad, e-posta adresi, telefon numarası gibi iletişim bilgileriniz, IP adresiniz ve tarayıcı çerez verileri otomatik ya da yarı-otomatik yollarla toplanabilir. Bu veriler, 6698 sayılı Kişisel Verilerin Korunması Kanunu'nun 5. maddesinde belirtilen "bir sözleşmenin kurulması veya ifasıyla doğrudan doğruya ilgili olması" ve "ilgili kişinin temel hak ve özgürlüklerine zarar vermemek kaydıyla, veri sorumlusunun meşru menfaatleri için veri işlenmesinin zorunlu olması" hukuki sebeplerine dayanılarak işlenmektedir.
Kişisel Verilerinizin İşlenme Amacı
Toplanan kişisel verileriniz; hizmetlerimizin sunulması ve iyileştirilmesi, müşteri taleplerinin karşılanması, yasal yükümlülüklerin yerine getirilmesi, bilgi güvenliği süreçlerinin yürütülmesi ve iletişim faaliyetlerinin yönetilmesi amaçlarıyla işlenmektedir. Verileriniz, belirtilen amaçlarla sınırlı ve ölçülü olarak işlenir; amacın ortadan kalkması halinde silinir, yok edilir veya anonim hale getirilir.
Toplanan Kişisel Verilerin Kimlere ve Hangi Amaçlarla Aktarılabileceği
Kişisel verileriniz; yasal düzenlemelerin gerektirdiği hallerde kamu kurum ve kuruluşlarına, hizmetlerin sunulması amacıyla iş ortaklarımıza ve teknik altyapı sağlayıcılarına, hukuki uyuşmazlıklarda avukatlar ve danışmanlara aktarılabilir. Aktarım, Kanun'un 8. ve 9. maddelerine uygun olarak, gerekli teknik ve idari tedbirler alınarak gerçekleştirilir.
Kişisel Verileri İşlenen Kişi Olarak Haklarınız
6698 sayılı Kanun'un 11. maddesi uyarınca; kişisel verilerinizin işlenip işlenmediğini öğrenme, işlenmişse bilgi talep etme, işlenme amacını ve amacına uygun kullanılıp kullanılmadığını öğrenme, yurt içinde veya yurt dışında aktarıldığı üçüncü kişileri bilme, eksik veya yanlış işlenmişse düzeltilmesini isteme, Kanun'un 7. maddesindeki şartlar çerçevesinde silinmesini veya yok edilmesini isteme, yapılan işlemlerin aktarıldığı üçüncü kişilere bildirilmesini isteme, münhasıran otomatik sistemler vasıtasıyla analiz edilmesi suretiyle aleyhinize bir sonucun ortaya çıkmasına itiraz etme ve kanuna aykırı işleme sebebiyle zarara uğramanız halinde zararın giderilmesini talep etme haklarına sahipsiniz. Bu haklarınızı kullanmak için web sitemizdeki iletişim kanalları aracılığıyla bize başvurabilirsiniz.
Şartlar ve Koşullar
Şartlar ve Koşullar
1. Hizmet Kapsamı ve Değişiklikler
BRF Teknoloji, sunduğu yazılım geliştirme, DevOps danışmanlık, altyapı kurulumu ve teknik destek hizmetlerini bu şartlar ve koşullar çerçevesinde yürütür. Hizmet kapsamı, her proje için ayrıca belirlenir ve karşılıklı mutabakat ile kesinleştirilir. BRF Teknoloji, sunduğu hizmetlerin kapsamını, fiyatlandırmasını ve teknik detaylarını önceden bildirmek kaydıyla güncelleme hakkını saklı tutar.
2. Gizlilik Politikası
Hizmetlerimiz kapsamında toplanan kişisel veriler, Gizlilik Politikamız çerçevesinde işlenir. Detaylı bilgi için Gizlilik Politikası sayfamızı inceleyebilirsiniz.
3. Hizmet Kullanımı ve Sorumluluklar
Müşteriler, sunulan hizmetleri yalnızca yasal ve etik çerçevede kullanmayı kabul eder. Hizmetlerin kötüye kullanılması, üçüncü taraf haklarının ihlali veya yasa dışı faaliyetler için kullanılması durumunda BRF Teknoloji hizmeti askıya alma veya sonlandırma hakkına sahiptir. Müşteri, proje kapsamında sağladığı bilgilerin doğruluğundan ve güncelliğinden sorumludur.
4. Ödeme Şartları
Ödeme koşulları proje bazında belirlenir ve proje başlangıcında karşılıklı mutabakat ile kesinleştirilir. Aksi belirtilmedikçe, faturalar proje tesliminden itibaren 15 gün içinde ödenir. Geciken ödemelerde aylık %2 gecikme faizi uygulanabilir.
5. İptal ve İade Politikası
İptal talepleri, hizmetin başlangıç tarihinden en az 7 gün önce yazılı olarak bildirilmelidir. Başlamış projelerde, tamamlanan iş oranına göre ücretlendirme yapılır. Proje kapsamında özel olarak geliştirilen yazılım ve altyapı bileşenleri için iade yapılmaz.