Ekim 17 2026

Ekrana Bakmaktan Kurtulamayanlar İçin: Boyun ve Omuz Mobilite Protokolü

Şu an bu satırları okurken boynunun açısına hiç dikkat ettin mi? Eğer masa başında çalışan ortalama bir modern insansan, muhtemelen çenen göğsüne doğru yaklaşmış, omuzların kulaklarına tırmanmış ve omurgan hafifçe haşlanmış bir karides formunu almış durumda. Günümüz dünyasında ofis sağlığı giderek lüks bir kavrama dönüşürken, kronikleşen boyun ağrısı neredeyse profesyonel hayatın kaçınılmaz bir parçası gibi kabul ediliyor. Oysa durum böyle olmak zorunda değil; doğru bir mobilite yaklaşımı ve birkaç küçük egzersiz ile fiziksel sağlık dengeni hızla geri kazanabilirsin.

Neden Böyle Oluyor? Başımızın Ağırlığı ve Yerçekimi

İnsan kafası nötr pozisyondayken —yani kulaklar omuzlarla aynı hizada durduğunda— yaklaşık 4.5 ila 5.5 kilogram ağırlığındadır. Ancak kafamızı ekrana, telefona veya klavyeye doğru öne eğdiğimiz her derece, omurgaya binen yükü katlayarak artırır. Biyomekanik araştırmalar gösteriyor ki, başımızı sadece 45 derece öne eğmek, boyun omurlarına binen yükü yaklaşık 22 kilograma çıkarıyor. Bu, gün boyu boynunda 8 yaşında bir çocuğu taşımakla neredeyse aynı şey!

Vücut bu yükün altında ezilmemek için savunma mekanizmasını çalıştırır: Üst sırt ve boyun kasları sürekli kasılarak kafayı geride tutmaya çalışır. Sonuç? Sertleşmiş trapezius kasları, donmuş kürek kemikleri ve tıp literatüründe artık “Tech Neck” (teknolojik boyun) olarak adlandırılan o meşhur tutulma.

Sadece Esnemek Neden İşe Yaramıyor?

Boynun ağrıdığında ilk refleksin kafanı sağa sola çekip esnetmek olabilir. Bu geçici bir ferahlama sağlasa da sorunu kökten çözmez. Çünkü o kaslar güçsüzlükten ve sürekli gergin kalmaktan yorulmuştur, sadece boyları kısaldığı için değil. Bize gereken şey pasif bir çekme değil; eklem hareket açıklığını artıran ve kaslara yeniden doğru çalışmayı öğreten aktif bir mobilite protokolüdür.

Önemli Uyarı: Bu hareketler masa başındaki mekanik gerginlikleri rahatlatmak içindir. Eğer kollarında uyuşma, karıncalanma, belirgin bir his kaybı veya keskin, batıcı bir ağrı yaşıyorsan egzersizleri durdurmalı ve bir fizik tedavi uzmanına ya da doktora danışmalısın.

5 Dakikalık Ofis İçi Mobilite Protokolü

Masanın başından bile kalkmadan, sadece sandalyeni biraz geriye çekerek uygulayabileceğin bu mini rutin, kas spazmlarını kırıp eklem kapsüllerini uyarır. Günde iki kez (özellikle öğleden sonra o malum çöküş anında) tekrarlayabilirsin.

1. Gıdı Çıkarma Sanatı: Chin Tuck (10 Tekrar)

Bu hareket dışarıdan komik görünse de boyun derin fleksör kaslarını aktive eden altın standarttır.

  • Sırtın dik otur, karşıya bak.
  • Kafanı aşağı eğmeden, sanki birisi burnunun ucuna dokunacakmış gibi çeneni geriye doğru kaydır (çift gıdı yapıyormuş gibi).
  • Geride 2 saniye bekle, boynunun arkasındaki uzamayı hisset ve serbest bırak.

2. Torasik Açılma: Sandalye Arkalığı Esnetmesi (8 Tekrar)

Boyun ağrısının asıl suçlusu genellikle boyun değil, hareketsiz kalmış üst sırttır (torasik omurga).

  • Ellerini başının arkasında birleştir, dirseklerini yanlara aç.
  • Sandalyenin sırt desteğini pivot noktası olarak kullanarak, nefes vererek yavaşça geriye doğru yaslan ve göğsünü tavana doğru aç.
  • Bunu yaparken belini aşırı çukurlaştırmamaya dikkat et; hareket sadece göğüs kafesi hizasından gelmeli. 2 saniye dur ve başlangıca dön.

3. Kürek Kemiği Sıkıştırma: W-V Hareketi (10 Tekrar)

Öne yuvarlanan omuzları orijinal yuvasına geri göndermek için kürek kemiklerini uyandırmamız gerek.

  • Kollarını yukarı kaldırarak ‘V’ harfi oluştur.
  • Ardından dirseklerini geriye ve aşağıya doğru çekerek gövdenle ‘W’ harfi yap.
  • Dirseklerini aşağı çekerken kürek kemiklerinin arasında bir ceviz kırmaya çalışıyormuş gibi hisset. 2 saniye sık ve tekrar yukarı uzan.

4. Göğüs Açıcı Kapı Pervazı Gerdirme (30 Saniye)

Sürekli öne doğru çalıştığımız için pektoral kaslar kısalır ve omuzları öne çeker.

  • En yakın kapı pervazına veya ofis bölmesine git. Kolunu 90 derece açıyla pervaza daya.
  • Bir adım öne çık ve göğsünü hafifçe zıt yöne çevir.
  • Göğüs kaslarında derin bir açılma hissedeceksin. Derin nefes alarak 30 saniye boyunca bekle, ardından diğer kola geç.

Uzun Vadeli Strateji: Çevre Tasarımı

Araştırmalar gösteriyor ki, gün boyu sabit bir pozisyonda kalındığında en ergonomik koltuk bile ağrıyı tek başına engelleyemez. Ergonomi bir başlangıçtır, ancak beden harekete göre evrilmiştir. Bu yüzden:

  • Monitörünü Göz Hizasına Al: Ekranının üst üçte birlik kısmı göz hizanla paralel olmalı. Bu, boynunun doğal eğriliğini korur.
  • Saat Başı 30 Saniye Kuralı: Her 50 dakikada bir yerinden kalk, omuzlarını geriye doğru üç kez yuvarla ve derin bir diyafram nefesi al.

Kendi bedenine bir makine gibi davranmayı bırakıp biyolojik bir sistem olarak yaklaştığında, küçük hareketlerin günün toplamında devasa farklar yarattığını göreceksin. Şimdi bu yazıyı kapat, dikleş, çeneni geriye çek ve boynuna derin bir nefes aldır!

Category: Genel | LEAVE A COMMENT
Ekim 17 2026

Kubernetes’te ‘Ghost’ Resource’ları Bulmak: Zombie Pod Avcılığı

Modern bir devops ekibinin yönettiği multi-tenant production cluster’ında her şeyin dashboard üzerinde yemyeşil görünmesi, her şeyin yolunda olduğu anlamına gelmez. Kümeler büyüdükçe, microservice mimarileri dallanıp budaklandıkça ve continuous delivery hatları günde onlarca kez release çıktıkça arka planda sessiz bir felaket birikir: “Ghost” (hayalet) resource’lar. Sağlıklı bir resource-management stratejisi ve keskin observability pratikleri kurgulamadığınızda, kubernetes worker node’larınız aslında hiçbir iş yapmayan, hiçbir trafiğe yanıt vermeyen ama faturayı kabartan “zombie pod” sürüleriyle dolar taşar.

Bu yazıda 5+ yıl deneyimli bir mühendisin bildiği o temel kavramları bir kenara bırakıyoruz. Pod nedir, replica nedir anlatmayacağım. Doğrudan sahaya inip kümedeki hayaletleri avlayacağız; neden oluştuklarını analiz edecek, gerçek komutlar, PromQL sorguları ve otomasyon script’leriyle bu yükü kümeden kazıyacağız.

Zombie Pod Nedir ve Neden Türer?

Kubernetes ekosisteminde bir kaynağa “zombie” veya “ghost” dememiz için ille de CrashLoopBackOff hatası alması gerekmez. Hatta en tehlikelisi, cluster’a göre kusursuz çalışanlardır. Bir pod şu durumlarda zombie statüsüne düşer:

  • Lich Podlar (Stuck in Terminating): Kapatılma sinyali (SIGTERM) almış fakat unmount edilemeyen volume veya takılı kalan bir finalizer yüzünden günlerdir Terminating durumunda bekleyenler.
  • Avare (Orphaned/Headless) Podlar: Bir Service selector’ı ile eşleşmeyen, ingress rotası olmayan veya Helm release’i purge edildiği halde etcd tutarsızlığı nedeniyle silinmeyenler.
  • Sıfır Yüklü “Over-provisioned” Podlar: Geliştiricinin debug amacıyla ayağa kaldırdığı, arkasında 4 vCPU / 16 GiB request unuttuğu ve haftalardır 0.001 Core tüketen test artıkları.
  • StatefulSet Kalıntıları (Unbound/Dangling PVCs): StatefulSet scale down edildiğinde Kubernetes mimari gereği PVC’leri silmez. Pod gitmiştir ama arkasında pahalı SSD block storage’lar yatmaya devam eder.

1. Adım: Terminating State’te Çakılı Kalan Podları Avlamak

En sık karşılaşılan senaryo, storage unmount işlemlerinin node üzerinde kilitlenmesi veya custom controller’ların yazdığı finalizer’ların reconcile edilememesidir. Bu podlar CPU/RAM harcamasa bile IP pool’unu (özellikle AWS-VPC CNI veya Calico kullanıyorsanız) rezerve tutar ve node drain işlemlerini bloklar.

Kümedeki tüm namespace’ler genelinde 1 saatten uzun süredir Terminating durumunda olan podları bulalım:

kubectl get pods -A --field-selector=status.phase!=Running \
  -o json | jq -r '
  .items[] | 
  select(.metadata.deletionTimestamp != null) | 
  select((now - (.metadata.deletionTimestamp | fromdateiso8601)) > 3600) | 
  "Namespace: " + .metadata.namespace + " | Pod: " + .metadata.name + " | Waiting: " + ((now - (.metadata.deletionTimestamp | fromdateiso8601))/3600 | tostring) + " hours"'

Birçok mühendis burada hemen kubectl delete pod <pod-name> --force --grace-period=0 komutuna sarılır. Yapmayın. Neden? Çünkü arkasında asılı bir CSI volume kilidi bırakırsanız, ileride o node’a schedule edilecek yeni pod Multi-Attach error for volume hatasıyla patlayacaktır.

Bunun yerine pod’un neden takıldığını görmek için metadata finalizer alanına bakın:

kubectl get pod <zombie-pod-name> -n <namespace> -o jsonpath='{.metadata.finalizers}'

Eğer storage driver çoktan node üzerinden çekildiyse ve controller yanıt vermiyorsa, finalizer’ı JSON merge patch ile söküp atın:

kubectl patch pod <zombie-pod-name> -n <namespace> \
  -p '{"metadata":{"finalizers":null}}' --type=merge

2. Adım: Arkasında Servis Olmayan “Sağır” Podları Yakalamak

CI/CD pipeline’ları çöktüğünde bazen Deployment silinir ancak pod bağımsız bir şekilde çalışmaya devam eder. Ya da deployment label’ları güncellenir fakat Service manifest’indeki selector güncellenmeyi unutulur. Sonuç: Pod CPU ve Memory tüketir ama gelen tek bir HTTP isteği dahi almaz.

Herhangi bir Service’in Endpoints veya modern Kubernetes kümelerinde EndpointSlice objesi tarafından hedeflenmeyen podları tespit etmek için bu pratik bash one-liner’ını çalıştırın:

#!/usr/bin/env bash
# Namespace bazlı hedefsiz pod kontrolü
NAMESPACE="production"

# Tüm geçerli endpoint IP'lerini al
VALID_IPS=$(kubectl get endpointslices -n "$NAMESPACE" -o jsonpath='{.items[*].endpoints[*].addresses[*]}' | tr ' ' '\n' | sort -u)

# Çalışan podların IP'lerini karşılaştır
for POD in $(kubectl get pods -n "$NAMESPACE" -o jsonpath='{range .items[?(@.status.phase=="Running")]}{.metadata.name}{":"}{.status.podIP}{"\n"}{end}'); do
    POD_NAME=$(echo "$POD" | cut -d: -f1)
    POD_IP=$(echo "$POD" | cut -d: -f2)

    if ! echo "$VALID_IPS" | grep -q "$POD_IP"; then
        # DaemonSet ve standalone jobları hariç tutmak isteyebilirsiniz
        OWNER=$(kubectl get pod "$POD_NAME" -n "$NAMESPACE" -o jsonpath='{.metadata.ownerReferences[0].kind}')
        if [[ "$OWNER" != "DaemonSet" && "$OWNER" != "Job" ]]; then
            echo "[ZOMBIE DETECTED] Pod: $POD_NAME (IP: $POD_IP) - Hiçbir Service arkasında değil!"
        fi
    fi
done

Bu senaryo özellikle preview environment’larda çok yaşanır. Pull Request merge edilir, ingress kalkar, service kalkar ama pod orada sonsuza dek sessizce yaşar.

3. Adım: Observability ile Kaynak İsrafını Ortaya Çıkarma

FinOps dünyasında en tehlikeli ghost pod, “iş yapıyor gibi durup hiçbir şey yapmayan” poddur. Geliştirici deployment manifest’inde cpu: "2" ve memory: "4Gi" talep etmiştir. Kubernetes scheduler bu talebi garanti altına almak için node üzerinde ilgili kaynağı rezerve eder (allocatable space düşer). Ancak pod arka planda sadece idle beklemektedir.

Bu israfı yakalamak için Prometheus ve Thanos üzerinde çalıştıracağımız PromQL sorguları devreye girer. Son 7 gün boyunca talep ettiği CPU kaynağının %1’inden azını kullanan podları listeleyelim:

# Prometheus / Thanos PromQL
(
  sum(rate(container_cpu_usage_seconds_total{container!=""}[1h])) by (namespace, pod)
  /
  sum(kube_pod_container_resource_requests{resource="cpu"}) by (namespace, pod)
) * 100 < 1

Bu sorgunun çıktısı size direkt olarak kümenizdeki “zombi rezervasyonları” verir. Pod fiziki olarak ölü değildir, ama maliyet açısından tam bir hayalettir. Node Autoscaler (Karpenter veya Cluster Autoscaler) bu pod yüzünden yeni ec2/compute instance ayağa kaldırmak zorunda kalır.

4. Adım: Sahipsiz StatefulSet Kalıntıları (Ghost PVC’ler)

Storage israfı, compute israfından daha sinsi seyreder çünkü disk saatlik değil, provizyon edildiği toplam boyut üzerinden (GB/ay) faturalandırılır. Bir StatefulSet’in replica sayısını 5’ten 2’ye indirdiğinizde Kubernetes, veri kaybını önlemek adına 3 adet PVC’yi cluster içinde Bound statüsünde tutmaya devam eder.

Peki bu diskleri kullanan aktif bir pod var mı? Görelim:

kubectl get pvc -A -o json | jq -r '
  .items[] | 
  select(.status.phase == "Bound") | 
  select(.metadata.annotations["volume.kubernetes.io/selected-node"] == null and .metadata.ownerReferences == null) | 
  "Namespace: " + .metadata.namespace + " | Unmounted PVC: " + .metadata.name + " | Size: " + .spec.resources.requests.storage'

Burada listelenen PVC’ler, Kubernetes API server düzeyinde kilitli kalmış, pod’u çoktan yok edilmiş disklere işaret eder. Eğer Retain politikasına sahip bir StorageClass kullanıyorsanız, deployment tamamen silinse bile AWS EBS veya GCP Persistent Disk konsolunda faturayı şişirmeye devam eder.

Otomasyon: Zombie Avını Sürekli Kılmak

Her hafta terminal başına geçip bu script’leri çalıştırmak sürdürülebilir bir SRE yaklaşımı değildir. Bunu engellemenin en temiz yolu, kuralları policy engine seviyesinde cluster’a enjekte etmektir.

Completed (başarıyla bitmiş) job podlarının cluster’da günlerce yer kaplamasını engellemek için manifest’lerinize mutlaka ttlSecondsAfterFinished ekleyin veya bir Kyverno policy’si ile bunu zorunlu kılın:

apiVersion: batch/v1
kind: Job
metadata:
  name: nightly-backup-sync
spec:
  # Pod tamamlandıktan 300 saniye (5 dk) sonra kendini imha eder
  ttlSecondsAfterFinished: 300
  template:
    spec:
      containers:
      - name: sync-worker
        image: custom-sync:v1.2
      restartPolicy: OnFailure

Aynı şekilde Kyverno veya OPA Gatekeeper kullanarak, her Deployment için memory/cpu limit ve request oranının belirli bir çarpanı (örneğin request limitin %50’sinden az olamaz kuralı) aşmasını admission webhook aşamasında engelleyebilirsiniz.

Sonuç: FinOps Salt Fatura İncelemek Değildir

DevOps dünyasında maliyet optimizasyonu (FinOps), ay sonunda AWS veya GCP faturasındaki grafikleri inceleyip “Compute Engine çok harcamış” demekten ibaret değildir. Asıl optimizasyon, runtime seviyesinde etcd ve scheduler üzerindeki gereksiz yükleri ayıklamaktır.

Terminating state’te kalan podlar IP tüketir, selector’ı kopmuş podlar gereksiz compute harcar, dangling PVC’ler storage faturasını patlatır. Kümelerinizde periyodik olarak bu kontrolleri pipeline’larınıza veya cron job’larınıza entegre edin. Ghost resource’ları temizlemek sadece faturayı düşürmekle kalmaz, scheduler gecikmelerini (scheduling latency) ve control plane üzerindeki memory overhead’ini doğrudan azaltır.

Category: Genel | LEAVE A COMMENT
Ekim 16 2026

Evde Fermentasyon Sanatı: Bağırsak Sağlığı İçin Kombucha ve Kefir Rehberi

Porsiyon: Yaklaşık 2 Litre | Hazırlık Süresi: 15 Dakika | Fermantasyon Süresi: 7-10 Gün (Kombucha) / 24 Saat (Kefir)

Kabul edelim: Market raflarında “canlı kültürlü” etiketiyle minik şişelerde satılan içeceklere servet dökmekten hepimiz biraz yorulduk. Oysa sağlıklı yaşam arayışında bedenimize yapabileceğimiz en büyük iyiliklerden biri olan bağırsak sağlığı, aslında mutfak tezgahında sessizce bekleyen bir kavanozda başlıyor. Binlerce yıllık bir gelenek olan fermentasyon; hem bütçeyi korumanın hem de mikrobiyotamıza hak ettiği ilgiyi göstermenin en kestirme, lezzetli ve tatmin edici yoludur.

Peki neden fermente gıdalar? Çünkü modern beslenme tarzımız bağırsaktaki iyi bakterileri adeta aç bırakıyor. Evde kendi kombucha veya kefir içeceğinizi hazırladığınızda, dışarıdan aldığınız pastörize ve ömrü uzatılmış ürünlerin aksine, trilyonlarca canlı ve aktif mikroorganizmayı doğrudan sindirim sisteminize davet etmiş olursunuz.

Malzemeler: Mutfağı Laboratuvara Dönüştürmeden

Korkutucu ekipmanlara hiç gerek yok. İhtiyacımız olan şeyler oldukça sade. Temel olarak Kombucha üzerinden ilerleyeceğiz ama Kefir için gereken minik dokunuşu da listeye ekliyoruz:

  • Su: 2 litre klorsuz, içme suyu (Klor bakterileri öldürür, aman dikkat).
  • Çay: 4-5 poşet veya 2 yemek kaşığı siyah ya da yeşil çay (Aromasız, sade çay tercih edin; bergamotlu earl grey içindeki yağlar fermantasyonu bozar).
  • Şeker: 1 su bardağı (yaklaşık 150 gr) beyaz toz şeker. Alternatif: Kamış şekeri de olur. “Şeker zararlı değil mi?” demeyin; o şekeri siz değil, SCOBY tüketecek!
  • SCOBY ve Başlangıç Sıvısı: 1 adet kombucha kültürü ve 1 çay bardağı önceden mayalanmış kombucha sıvısı. (Bir arkadaştan isteyin ya da güvenilir yerlerden temin edin).
  • Kefir Alternatifi İçin: 1 litre günlük tam yağlı süt ve 1 yemek kaşığı aktif kefir mayası.

Adım Adım Ev Yapımı Kombucha

Meşgul bir takviminiz olsa bile bu süreç haftada sadece 15 dakikanızı alır. Geri kalan işi mikroplar halleder.

  1. Çayı Demleyin: 2 litre suyu kaynatın, ocaktan alıp şekeri içinde tamamen eritin. Çayı ekleyin ve 15-20 dakika demlenmeye bırakın. Ardından çay yapraklarını/poşetlerini süzün.
  2. Tamamen Soğutun: Burası kritik. Çayın oda sıcaklığına (20-25°C) gelmesini bekleyin. Sıcak çay, canlı kültürünüzü anında öldürür. Acelemiz yok, bırakın soğusun.
  3. Kavanozda Buluşturun: Soğuyan tatlı çayı temiz bir cam kavanoza aktarın. Üzerine başlangıç sıvısını ve temiz ellerinizle SCOBY’yi bırakın. SCOBY dibe çökebilir ya da yüzebilir; ikisi de normaldir.
  4. Nefes Almasını Sağlayın: Kavanozun ağzını temiz bir tülbent veya kağıt havluyla kapatıp lastikle sabitleyin. Kapağı sıkıca kapatmayın; bakterilerin oksijene ihtiyacı var.
  5. Karanlıkta Dinlendirin: Kavanozu doğrudan güneş almayan, ılık ve havadar bir köşeye (örneğin mutfak dolabının bir köşesine) kaldırın. 7 ila 10 gün dokunmayın.

Bonus: Hızlı Çözüm Arayanlara Kefir Yolu

Eğer “Ben 10 gün bekleyemem, hemen probiyotik lazım” diyorsanız; 1 litre oda sıcaklığındaki süte 1 yemek kaşığı kefir tanesini atın, kavanozun kapağını hafif gevşek kapatıp karanlık bir dolapta 24 saat bekletin. Plastik bir süzgeçten geçirdiğiniz anda taze, kıvamlı kefirinizi içmeye hazırsınız!

Püf Noktası: Fermantasyonun İki Altın Kuralı

Evde fermentasyon yaparken başarının sırrı hijyen ve kullanılan araç gereçtedir. İşte asla atlamamanız gereken detaylar:

  • Metale Kesinlikle Hayır: Ne kombucha ne de kefir hazırlarken metal kaşık, kap veya süzgeç kullanın. Metal, fermente edici bakterileri zayıflatır ve asitle tepkimeye girer. Yalnızca cam, ahşap ya da kaliteli plastik/silikon kullanın.
  • Tadarak Karar Verin: Kombuchanızı 7. günden itibaren temiz bir pipet yardımıyla tadın. Çok tatlıysa fermantasyon bitmemiştir; elma sirkesi gibi keskinleşmişse fazla beklemiştir. Damak zevkinize göre tatlı-ekşi dengesini yakaladığınız an şişeleyip buzdolabına kaldırın. Soğuk, fermantasyonu durdurur.

Kendi içeceğinizi üretmek bir hobi değil, bedeninize gösterdiğiniz samimi bir özendir. İlk partiyi kurun, gerisini doğanın küçük mucizelerine bırakın!

Category: Genel | LEAVE A COMMENT
Ekim 15 2026

Agentic AI Döneminde GitLab: Kod Yazmaktan Sistem Yönetmeye Geçiş

Yazılım geliştirme dünyasında işler çok hızlı değişiyor. Dün sadece kod tamamlama araçlarına şaşırırken, bugün Agentic AI kavramı gündemimizin tam ortasına oturdu. Klasik yapay zeka araçları biz soru sorduğumuzda tek bir cevap üretirken, “ajan” tabanlı sistemler verilen bir hedef doğrultusunda plan yapıyor, kararlar alıyor, araçları kullanıyor ve işi uçtan uca bitiriyor. İşte bu noktada GitLab, sunduğu derinlemesine otomasyon ve DevOps entegrasyonuyla yeni nesil geliştirici platformları yarışında farklı bir kulvara göz kırpıyor.

Peki bu yeni dönem gerçekten yazılımcıların hayatını kolaylaştırıyor mu, yoksa pazarlama departmanlarının yeni bir cilası mı? GitLab Duo Workflow’u masaya yatırdık, test ettik ve neler vaat ettiğine yakından baktık.

“Agentic” Ne Demek ve Neden Birdenbire Önemli Oldu?

Kısa ve net bir benzetme yapalım: GitHub Copilot gibi ilk nesil asistanlar, yanınızda oturan ve siz kod yazarken bir sonraki satırı tahmin etmeye çalışan hevesli bir stajyer gibiydi. Agentic AI ise ona “Bu issue’daki bug’ı çöz, testleri çalıştır, pipeline geçerse bana merge request aç” dediğiniz ve gidip kahve içebildiğiniz bir çalışma arkadaşı modeli.

Yani sadece metin üretmiyor; dosya ağacını geziyor, terminalde komut çalıştırıyor, CI/CD çıktısını okuyor ve hata aldığında kendi kodunu tekrar düzeltiyor. GitLab’in bu alandaki hamlesi olan GitLab Duo Workflow, tam olarak bu mantık üzerine inşa edilmiş durumda.

[Görsel: GitLab Duo arayüzünde arka planda çalışan yapay zeka ajanının pipeline loglarını analiz ettiği ve önerilen çözüm adımlarını listelediği ekran]

Gerçek Bir Test: Gece Kırılan CI/CD Pipeline’ı

Bunu somut bir senaryoyla test ettik. Küçük bir Node.js mikroservisinde bilerek bir tip uyuşmazlığı ve kırık bir unit test bıraktık. Normalde geliştiricinin süreci bellidir: Pipeline fail olur, terminale gidilir, loglar taranır, hata bulunur, düzeltilip tekrar push edilir.

GitLab Duo’nun Root Cause Analysis (Kök Neden Analizi) ajanını devreye soktuğumuzda akış şöyle ilerledi:

# GitLab CI Runner çıktısı:
FAIL src/auth/token.spec.ts
● Test suite failed to run: Type 'string | undefined' is not assignable to type 'string'.

Ajan, hatanın satırını bulmakla kalmadı; ilgili commit geçmişini kontrol etti, ortam değişkenlerindeki eksik kontrolü fark etti ve doğrudan şu formatta bir düzeltme önerdi:

# Duo Workflow'un pipeline logundan çıkardığı otomatik çözüm:
- const token: string = process.env.AUTH_SECRET;
+ const token: string = process.env.AUTH_SECRET ?? '';

Buradaki kritik detay hız değil; bağlam (context). GitLab zaten kodunuzu, CI/CD pipeline’ınızı, issue listenizi ve güvenlik taramalarınızı tuttuğu için ajan harici bir araca göre çok daha fazla bağlama sahip. Ajan dışarıdan gelmiyor, deponun (repo) mutfağında yaşıyor.

Duo Workflow ile Çalışırken Neler Fark Ettik?

Kağıt üzerinde her şey kusursuz görünse de pratikte birkaç pürüz var. Her şeyden önce, bir ajana güvenip merge tuşuna basmak için henüz çok erken. Ajan bazen güvenlik açıklarını kapatırken uygulamanın iş mantığını (business logic) bozacak kestirme yollar seçebiliyor. Kodu incelerken gözünüzü dört açmanız şart.

[Görsel: GitLab Issue panosunda otomatik oluşturulan Merge Request ve ajan tarafından eklenen detaylı açıklama metni]

Artılar ve Eksiler

Platformu birkaç hafta boyunca gerçek projelerde gözlemledikten sonra çıkardığımız bilanço şu şekilde:

Özellik / Durum Artılar (+) Eksiler (-)
Entegrasyon CI/CD, Issue ve Security taramalarıyla tam entegre çalışır. Harici API bağlamaya gerek kalmaz. GitLab ekosistemine sıkı sıkıya bağımlıdır; lokal geliştirme ortamında esnekliği kısıtlıdır.
Hata Çözümü Pipeline hatalarını terminal loglarını okuyarak saniyeler içinde tespit eder. Karmaşık mimarilerde bazen yüzeysel çözümler önerip ana sorunu ıskalayabilir.
Gizlilik & Güvenlik Kod verileriniz modelleri eğitmek için kullanılmaz; kurumsal regülasyonlara uygundur. Özelleştirilmiş şirket içi modelleri GitLab SaaS üzerinde doğrudan çalıştırmak zordur.

Fiyatlandırma ve Cep Yakan Detaylar

Gelelim cüzdan kısmına. GitLab Duo özellikleri ne yazık ki tamamen ücretsiz sunulmuyor.

  • GitLab Duo Pro: Kullanıcı başına aylık $19 (Mevcut Premium veya Ultimate lisansınıza ek olarak ödenir). Kod tamamlama ve chat içerir.
  • GitLab Duo Enterprise: Kullanıcı başına aylık $39. Asıl “agentic” yetenekler, kök neden analizi ve güvenlik açığı giderme özellikleri bu pakette toplanmış.

Bütçesi kısıtlı ekipler veya bireysel geliştiriciler için bu rakamlar yüksek gelecektir. Peki ücretsiz veya açık kaynaklı alternatifler yok mu? Elbette var:

  • Aider: Terminalinizde çalışan, yerel Git deponuzla konuşan ve kendi kendine commit atan şahane bir açık kaynak CLI aracı.
  • Continue.dev: VS Code ve JetBrains için açık kaynaklı eklenti. Kendi API anahtarınızla (veya yerel Ollama modelleriyle) çalıştırabilirsiniz.
  • OpenDevin (All-Hands AI): GitLab Duo Workflow mantığını açık kaynak olarak inşa etmeyi hedefleyen, tarayıcı ve terminal kontrolü yapabilen topluluk projesi.

Geliştiriciler Bu Yeni Döneme Nasıl Hazırlanmalı?

Görünen köy kılavuz istemez: Önümüzdeki 2-3 yıl içinde vaktimizin çoğunu sıfırdan satır satır kod yazarak değil, ajanların yazdığı kodları denetleyerek (code review) geçireceğiz. Bu dönüşüme ayak uydurmak için şimdiden yapabileceğiniz üç şey var:

  1. Daha İyi Dokümantasyon Yazın: Ajanlar projenizin README’sini, CONTRIBUTING rehberini ve mimari şemalarını okuyarak kararlar alır. Bağlam ne kadar netse, ajanın çıktısı o kadar isabetli olur.
  2. Test Kapsamını Artırın: Kod yazan bir yapay zekanız varsa, o kodun doğruluğunu kanıtlayacak sağlam unit ve integration testlerine dünden daha çok ihtiyacınız var.
  3. Küçük Görevlerle Başlayın: Ajanlara doğrudan tüm mimariyi teslim etmek yerine; döküman güncelleme, bağımlılık versiyonu yükseltme ve kırık testleri onarma gibi rutin işleri devrederek sınırlarını öğrenin.

Son Söz

GitLab, Agentic AI dalgasını sadece bir sohbet kutusu eklemek olarak görmüyor; tüm DevOps döngüsünün beyni haline getirmeye çalışıyor. Henüz mükemmel değil, zaman zaman saçmalıyor ve fiyatı küçük ekipler için tuzlu. Ancak yazılım geliştirme süreçlerinin geleceği tam olarak burada şekilleniyor. İşi tamamen yapay zekaya bırakmak akıllıca değil; fakat bir ajanla birlikte çalışmayı öğrenmemek yakında büyük bir dezavantaja dönüşecek.

Category: Genel | LEAVE A COMMENT
Ekim 12 2026

Yeşil DevOps: CI/CD Pipeline’larınızın Karbon Ayak İzini Nasıl Takip Edersiniz?

Modern mühendislik ekipleri olarak FinOps dashboard’larına bakıp AWS faturasından yüzde üç kırpınca kendimizi zafer kazanmış sayıyoruz. Ancak altyapı maliyetini optimize ederken gözden kaçırdığımız çok daha somut bir parametre var: Watt tüketimi. CI/CD süreçlerimizin tükettiği ham enerji ve açığa çıkardığı karbon ayak izi, yazılım dünyasında sürdürülebilirlik başlığı altında artık doğrudan ölçülebilir bir mühendislik metriği. Carbon-Aware DevOps yaklaşımı, bu süreci “ağaç diktik” sertifikalarından çıkarıp doğrudan pipeline konfigürasyonlarına, Prometheus metriklerine ve eBPF seviyesine indiriyor.

Her PR açıldığında tetiklenen devasa entegrasyon testleri, gereksiz katman inşa eden Docker build’leri ve 32 vCPU’luk runner’larda 2 dakika koşan linter’lar sadece fatura değil, şebekeden doğrudan kirli elektrik tüketiyor. Peki bu tüketimi hissi yaklaşımlarla değil, production-grade araçlarla nasıl ölçer ve optimize ederiz?

SCI (Software Carbon Intensity) ve Ölçüm Mantığı

Green Software Foundation tarafından standardize edilen SCI spesifikasyonu karmaşık bir fizik denklemi değil. Bir CI/CD pipeline’ı için denklemi şu şekilde özetleyebiliriz:

SCI = ((E * I) + M) / R

  • E (Energy): Pipeline çalışırken harcanan toplam enerji (kWh).
  • I (Location-Based Carbon Intensity): İşlemin yapıldığı veri merkezinin bağlı olduğu elektrik şebekesindeki emisyon oranı (gCO2eq/kWh).
  • M (Embodied Carbon): Sunucu donanımının üretimi ve bertarafından düşen amortisman payı.
  • R (Functional Unit): Bizim durumumuzda tek bir “Pipeline Run”, “Build Başına PR” veya “Deployment”.

Geliştirici ortamında M parametresini çoğunlukla sabit kabul ederiz. Mühendislik olarak doğrudan müdahale edebileceğimiz iki değişken var: Harcanan enerji (E) ve bu enerjinin tüketildiği andaki grid karbon yoğunluğu (I).

Runner Seviyesinde Enerji Tüketimini Ölçmek: Kepler ve eBPF

Eğer self-hosted runner kullanıyorsanız (Kubernetes üzerinde Actions Runner Controller – ARC veya GitLab Runner), bare-metal ya da sanal makine seviyesindeki enerji tüketimini RAPL (Running Average Power Limit) sayaçları ve eBPF kullanarak pod bazında ayrıştırabilirsiniz. Bu noktada sektör standardı araç Kepler (Kubernetes-based Efficient Power Level Exporter).

Kepler, eBPF tracing ile CPU döngülerini, bellek erişimlerini pod ve container seviyesinde dinler; ardından RAPL arayüzünden okunan watt değerini bu metriklerle ilişkilendirir. Kubernetes tabanlı runner kümenize Kepler’i Helm ile deploy etmek oldukça yalındır:

helm repo add kepler https://sustainable-computing-io.github.io/kepler-helm-chart
helm repo update

helm install kepler kepler/kepler \
  --namespace kepler-system \
  --create-namespace \
  --set serviceMonitor.enabled=true \
  --set canMount.usrSrc=true

Kepler ayağa kalktıktan sonra, CI runner’larınızın namespace’i için Prometheus üzerinden doğrudan anlık tüketimi Joule cinsinden sorgulayabilirsiniz. Tek bir pipeline pod’unun toplam enerji tüketimini (kWh cinsinden) çıkarmak için şu PromQL sorgusu işinizi görür:

# Belirli bir CI pod'unun tükettiği toplam enerji (kWh)
sum(
  increase(kepler_container_joules_total{container_namespace="ci-runners", pod_name=~"runner-build-.*"}[1h])
) / 3600000

3.600.000’e bölmemizin nedeni Joule’ü kWh’a çevirmek. Elinizde artık soyut bir “build 8 dakika sürdü” verisi değil, “bu build 0.042 kWh tüketti” metrik verisi var.

Carbon-Aware Scheduling: Testleri Ne Zaman Koşmalı?

CI pipeline’larını sadece “hızlı bitsin” diye tasarlamak yerine, işin doğasına göre sınıflandırmak gerekir. Kritik bir hotfix PR’ı hemen koşmalıdır; ancak nightly build’ler, periyodik regression testleri veya end-to-end sentetik yük testleri zamana duyarlı değildir. İşte burada Carbon-Aware Execution devreye girer.

Elektrik şebekesindeki karbon yoğunluğu rüzgar ve güneş üretimine göre gün içinde radikal biçimde değişir. Örneğin Almanya (eu-central-1) şebekesi öğlen saatlerinde güneş panelleri devredeyken 150 gCO2eq/kWh seviyesindeyken, akşam rüzgar kesildiğinde ve kömür devreye girdiğinde 600 gCO2eq/kWh seviyesine fırlayabilir.

Aşağıdaki GitHub Actions workflow örneğinde, Electricity Maps API’sini kullanarak o anki grid karbon yoğunluğunu sorguluyoruz. Eğer emisyon eşik değerin üzerindeyse ve acil olmayan bir batch job koşuyorsak, build’i postpone ediyoruz veya düşük karbonlu bir bölgedeki runner’a route ediyoruz:

name: Carbon-Aware Integration Suite

on:
  schedule:
    - cron: '0 * * * *' # Saatlik tetikleme
  workflow_dispatch:

jobs:
  check-carbon-intensity:
    runs-on: ubuntu-latest
    outputs:
      should_run: ${{ steps.carbon_check.outputs.should_run }}
    steps:
      - name: Fetch Carbon Intensity
        id: carbon_check
        env:
          EMAPS_API_TOKEN: ${{ secrets.ELECTRICITY_MAPS_TOKEN }}
          ZONE: "DE" # Almanya şebekesi
          THRESHOLD: 250 # gCO2eq/kWh sınırı
        run: |
          RESPONSE=$(curl -s -H "auth-token: $EMAPS_API_TOKEN" \
            "https://api.electricitymap.org/v3/carbon-intensity/latest?zone=$ZONE")
          
          INTENSITY=$(echo $RESPONSE | jq '.carbonIntensity')
          echo "Güncel Karbon Yoğunluğu: $INTENSITY gCO2eq/kWh"

          if [ "$INTENSITY" -lt "$THRESHOLD" ]; then
            echo "Şebeke temiz. Pipeline çalıştırılıyor."
            echo "should_run=true" >> $GITHUB_OUTPUT
          else
            echo "Şebeke kirli. Ağır testler erteleniyor."
            echo "should_run=false" >> $GITHUB_OUTPUT
          fi

  heavy-tests:
    needs: check-carbon-intensity
    if: needs.check-carbon-intensity.outputs.should_run == 'true'
    runs-on: arc-runner-set
    steps:
      - uses: actions/checkout@v4
      - name: Run E2E Tests
        run: make test-e2e

Neden Böyle Yapıyoruz?

Çünkü saatte 200 kWh tüketen devasa bir staging test kümeniz varsa, sadece çalıştırma saatini kaydırarak (carbon-shifting) pipeline altyapısına tek bir satır kod optimizasyonu yapmadan emisyonu yüzde 40 ila 60 oranında azaltabilirsiniz. Bu, production iş yüklerini taşımaktan çok daha risksiz ve anında etki eden bir yöntemdir.

Pipeline Seviyesinde Optimizasyon: Boşa Yanan CPU Döngülerini Kesmek

Yalnızca zamanlama yetmez; tüketilen ham enerjiyi (E) kısmak için pipeline anatomisini elden geçirmek gerekir. Tipik kurumsal CI/CD süreçlerinde en çok enerji israfına yol açan pratikler ve çözümleri şunlardır:

1. Docker Katman Önbelleği (BuildKit Cache Thrashing)

CI ortamında her build’de sıfırdan pip install veya npm ci yapmak sadece pipeline süresini uzatmaz; runner üzerinde disk I/O ve network adaptörü aracılığıyla gereksiz CPU watt tüketimi üretir. GitHub Actions Cache veya harici S3/Registry cache backend kullanmak doğrudan enerji tasarrufudur.

# Kaniko veya Buildx ile GitHub Actions Cache backend kullanımı
docker buildx build \
  --cache-to type=gha,mode=max \
  --cache-from type=gha \
  --tag my-service:${{ github.sha }} \
  --file Dockerfile .

mode=max kullanımı sadece son imajı değil, ara katmanları da saklar. Bu sayede multi-stage build’lerde dependency stage’i değişmediği sürece CPU neredeyse rölanti modunda kalır.

2. Mimari Değişimi: x86_64 Yerine ARM64 Runner’lar

AWS Graviton veya Ampere Altra tabanlı ARM64 instance’lar, modern Intel/AMD eşdeğerlerine kıyasla Watt başına kayda değer oranda daha yüksek işlem kapasitesi sunar (Performance-per-Watt). CI/CD runner filolarınızı ARM mimarisine taşımak, build sürelerini dramatik olarak değiştirmese bile doğrudan tüketilen toplam enerjiyi yüzde 20-30 oranında aşağı çeker.

Aşağıdaki gibi basit bir Docker buildx multi-arch matrix konfigürasyonu yerine derlemeyi doğrudan hedef donanımda (native) yapmak CPU emülasyon maliyetini (QEMU overhead) ortadan kaldırır:

# QEMU üzerinden emüle edilmiş ARM build (YÜKSEK ENERJİ TÜKETİMİ - KAÇININ)
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
docker buildx build --platform linux/arm64 -t app:latest .

# DOĞRU YAKLAŞIM: Native ARM64 Runner ayağa kaldırıp doğrudan derlemek
# GitHub Actions: runs-on: [self-hosted, linux, arm64]

Emülasyon ile derleme yapmak CPU döngülerini 4 ila 10 kat artırarak ciddi bir enerji israfı yaratır. Build’i native runner’a devretmek doğrudan watt tasarrufudur.

Emisyon Verisini PR Seviyesine İndirmek

Mühendise geri bildirim vermediğiniz hiçbir metrik iyileşmez. Code-coverage raporu veya lint hatası gibi, her pull request’in ne kadar karbon emisyonuna yol açtığını PR yorumu olarak basmak ekip kültürünü dönüştürür. Açık kaynak araçlardan Eco-CI bu iş için doğrudan GitHub Actions içine entegre olabilen hazır step’ler sağlar:

steps:
  - name: Eco-CI Init
    uses: green-coding-solutions/eco-ci-energy-estimation@v4
    with:
      task: start-measurement

  - name: Build and Test Project
    run: |
      mvn clean verify

  - name: Eco-CI Measurement
    uses: green-coding-solutions/eco-ci-energy-estimation@v4
    with:
      task: get-measurement
      label: 'Maven Test Suite'

  - name: Eco-CI PR Comment
    uses: green-coding-solutions/eco-ci-energy-estimation@v4
    with:
      task: display-results
      send-pr-comment: true

Bu konfigürasyon, GitHub API üzerinden PR altına çalıştırılan donanımın ortalama enerji katsayılarına göre tüketilen kWh ve üretilen CO2eq gramajını yazar. Bir geliştirici, yazdığı verimsiz bir integration testinin pipeline süresini 10 dakika uzatmasının sadece kendisini değil, ölçülebilir bir emisyonu tetiklediğini gördüğünde optimizasyon soyut bir hedef olmaktan çıkar.

Sonuç: FinOps ve GreenOps Ayrımı Ortadan Kalkıyor

Yeşil DevOps, marjinal bir çevreci PR çalışması değil; modern sistem mimarisinin kaçınılmaz bir optimizasyon evresidir. Pipeline’larınızdaki CPU kullanımını optimize etmek, katmanları doğru önbelleğe almak, runner’ları doğru mimariye geçirmek ve zamana duyarsız işleri şebekenin temiz olduğu anlara kaydırmak teknik borcu azaltır. Daha az CPU döngüsü, daha az fatura ve nihayetinde daha düşük bir karbon ayak izi demektir.

Category: Genel | LEAVE A COMMENT
Ekim 11 2026

Geliştiriciler İçin Mutfak Otomasyonu: Sous-Vide ile Veri Odaklı Beslenme

Porsiyon: 2 Kişilik | Hazırlık Süresi: 10 Dakika | Pişirme Süresi: 60 Dakika (Eller serbest)

Kod yazarken deploy süreçlerini otomatikleştiriyoruz da neden akşam yemeğinde bir tavuk göğsünün başında nöbet tutuyoruz? Yoğun çalışma temposunda healthy eating alışkanlığını sürdürmek genelde can sıkıcı bir hal alır; fakat sous-vide tekniği sayesinde meal preparation süreçlerinizi adeta arka planda çalışan bir cron job’a dönüştürebilir, günlük productivity kaybı yaşamadan restoran kalitesinde tabaklar çıkarabilirsiniz.

Deterministik Yemek Pişirme: Sous-Vide Nedir?

Sous-vide (Fransızca “vakum altında”), gıdaların kilitli veya vakumlu bir torbaya konulup hassas bir ısı kontrol cihazıyla su banyosunda yavaşça pişirilmesi yöntemidir. Klasik tavada ısı dıştan içe hızla akar; bu da dışın yanmasına, için ise çiğ kalmasına yol açar. Sous-vide’de ise suyun sıcaklığı tam olarak hedeflediğiniz iç sıcaklığa ayarlanır. Yani tavuk göğsünüzü 64°C banyoya bırakırsanız, 1 saat sonra da 3 saat sonra da tam 64°C kalır. Aşırı pişme, kuruma ya da yanma riski matematiksel olarak imkânsızdır.

Malzemeler

  • 2 adet kemiksiz, derisiz tavuk göğsü (yaklaşık 400-500g)
  • 1 yemek kaşığı sızma zeytinyağı
  • 1 diş ezilmiş sarımsak (veya 1 çay kaşığı sarımsak tozu)
  • 1 dal taze biberiye veya kekik
  • 1 çay kaşığı tuz
  • Yarım çay kaşığı taze çekilmiş karabiber
  • Yarım limonun kabuğu (rendelenmiş)

Alternatif Malzeme Önerisi: Tavuk yerine somon fileto kullanabilirsiniz. Somon için cihazı 52°C’ye ayarlayıp süreyi 35 dakikaya indirmeniz yeterlidir. Vegan bir alternatif arıyorsanız, aynı baharat dengesini ekstra sıkı tofu veya kalın dilimlenmiş istiridye mantarı ile deneyebilirsiniz.

Adım Adım Hazırlanışı

  1. Suyu Isıtın: Sous-vide cihazınızı derin bir tencereye sabitleyin. Suyu 64°C’ye ayarlayın ve cihazın hedef ısıya ulaşmasını bekleyin.
  2. Marine ve Paketleme: Tavuk göğüslerini kurulayın. Tuz, karabiber, zeytinyağı, sarımsak, taze otlar ve limon kabuğu ile hafifçe ovun. Tavukları kilitli fermuarlı poşete (ziploc) veya vakum poşetine yerleştirin.
  3. Havayı Tahliye Edin: Vakum makineniz yoksa poşeti yavaşça suya daldırarak suyun basıncıyla havanın yukarı çıkmasını sağlayın (su yer değiştirme yöntemi) ve ağzını tam su seviyesinde kapatın.
  4. Pişirmeye Başlayın: Torbayı 64°C’deki suya bırakın ve timer’ı 60 dakikaya kurun. Şimdi bilgisayarınızın başına dönüp kodunuza odaklanabilirsiniz; yemek kendi kendine güvenle pişecektir.
  5. Mühürleme (Opsiyonel ama Tavsiye Edilir): Süre dolduğunda tavukları torbadan çıkarıp kağıt havluyla kurulayın. Döküm bir tavayı yüksek ateşte iyice ısıtın, çok az yağ ekleyin ve her iki tarafını sadece 45’er saniye mühürleyip servis yapın.

Püf Noktası

Sous-vide torbasından çıkan et soluk görünür çünkü su banyosunda Maillard reaksiyonu (karamelize lezzet kabuğu) gerçekleşmez. Eti tavaya atmadan önce yüzeyindeki tüm nemi kağıt havluyla mutlaka alın. Et ne kadar kuru olursa, tavada o kadar hızlı renk alır ve iç sıcaklığı yükselmeden dışı çıtırlaşır. 45 saniyeyi kesinlikle aşmayın; içerideki sululuğu korumak asıl amacımız.

Batch Cooking ile Haftayı Kurtarın

Pazar günü bu işlemi tek seferde 6-8 adet tavuk göğsüyle yapın. Pişirme biter bitmez torbaları buzlu suya atarak şoklayın ve ardından buzdolabına kaldırın. Hafta içi yoğun bir sprint koşarken tek yapmanız gereken torbayı açıp salatanıza doğramak ya da 1 dakika tavada ısıtmak. Sağlıklı beslenmek artık irade savaşı değil, sadece iyi kurulmuş bir sistem meselesi.

Category: Genel | LEAVE A COMMENT
Ekim 11 2026

Biyohackerlar İçin ‘Brain Food’: Bilişsel Performansı Artıran Akıllı Beslenme Listesi

Öğleden sonra saat tam 14:30. Önünde açık duran 42 sekme, teslim edilmesi gereken kritik bir proje ve kafanın içinde yankılanan o tanıdık ses: “Bir şekerleme yapsam dünya kurtulur mu?” Eğer zihinsel bir işte çalışıyorsan, beyninin en büyük düşmanı tembellik değil; ani çöken glikoz krizleridir. İşte burada biohacking devreye giriyor. Modern sağlıklı yaşam trendleri bize sadece uzun yaşamayı değil, o an masada otururken maksimum odaklanma ve berraklıkla çalışmayı da vaat ediyor. İşin sırrı ise doğru beslenme stratejisinde saklı.

Bugün Michelin yıldızlı şef önlüğünü takmana gerek yok. Mutfakta saatler harcamak istemediğini, ama beynine de çöp yakıt atmaktan bıktığını biliyorum. Sana derin çalışma (deep work) seanslarını roketleyecek, kan şekerini sabit tutacak ve beyin sisini dağıtacak nefis bir “Zihin Açıcı Nootropik Kase” hazırlıyoruz.

Zihin Açıcı ‘Deep Work’ Somon Kasesi

Bu öğün, beyninin %60’ını oluşturan yağ tabakasını beslemek ve dopamin üretimini tetiklemek için tasarlandı.

Porsiyon: 1 Kişilik
Hazırlık Süresi: 10 dakika
Pişirme Süresi: 12 dakika

Gereken Malzemeler

  • 150 g somon fileto (Derisi üzerinde, iyi bir Omega-3 kaynağı)
  • 1/2 su bardağı haşlanmış kinoa (Kompleks karbonhidrat ve lif için)
  • Yarım olgun avokado (Sağlıklı tekli doymamış yağlar)
  • 1 avuç dolusu taze bebek ıspanak (Folat ve demir deposu)
  • 4-5 adet ceviz içi (Beyne benzemesi tesadüf değil; alfa-linolenik asit barındırır)
  • 1 tatlı kaşığı kabak çekirdeği (Çinko desteği)
  • Sosu için: 1 yemek kaşığı soğuk sıkım sızma zeytinyağı, yarım limonun suyu, 1 çay kaşığı elma sirkesi, bir çimdik kaya tuzu.

Adım Adım Hazırlanışı

  1. Kinoayı aradan çıkar: Kinoayı önceden haşlamadıysan, 1 ölçü kinoaya 2 ölçü su koyup 12 dakikada kısık ateşte haşla. Vaktin yoksa bu adımı atla, alternatiflere bak!
  2. Somonu mühürle: Yapışmaz tavayı orta-yüksek ateşte ısıt. Somonun deri kısmını tavaya bırak. 4-5 dakika çıtırlaşana kadar dokunma, ardından çevirip 3-4 dakika daha pişir. İçi hafif pembe kalsın; suyunu kaybetmesin.
  3. Yeşillik tabanını kur: Geniş bir kaseye bebek ıspanakları ser. Üzerine ılık kinoayı ekle.
  4. Yağları diz: Avokadoyu dilimle, kaseye yerleştir. Pişen somonu kinoanın üzerine koy.
  5. Çıtır dokunuş ve sos: Cevizleri elinle ufalayarak serp, kabak çekirdeklerini ekle. Zeytinyağı, limon, elma sirkesi ve tuzla çırptığın sosu kasede gezdir. Afiyet olsun.

Püf Noktası

Somonun derisini sakın atma. Deri altındaki yağ tabakası, DHA ve EPA adı verilen Omega-3 formları açısından en zengin kısımdır. Eğer tavayı yeterince ısıtıp deriyi kurutmadan mühürlersen çıtır bir cips gibi olur; hem lezzet hem zihinsel berraklık kazanırsın.

Dolapta Bunlar Yoksa Ne Yapacağız? (Pratik Alternatifler)

Biohacking esnek olmak demektir. Malzemeleri bulamadın diye teslim bayrağını çekme:

  • Somon yerine: İyi kalite konserve sardalya veya ton balığı. Vegan dostlar için marine edilmiş ve hafif kızartılmış sert tofu.
  • Kinoa yerine: Karnabahar pilavı (daha da düşük karbonhidrat) veya esmer pirinç.
  • Ispanak yerine: Roka veya karalahana (kale).

Neden Bu Tabak Beyin Sisi Yaratmıyor?

Basit karbonhidratlar (makarna, beyaz ekmek, hamur işleri) kan şekerini hızla yükseltir. Vücut devasa bir insülin dalgası salgılar ve şekerin aniden düşer. İşte o meşhur “ağırlaşma” hissi bundan kaynaklanır. Bu kasede ise lifler (kinoa ve ıspanak), sağlıklı yağlar (avokado, zeytinyağı, ceviz) ve yüksek kaliteli protein bir aradadır.

Bu kombinasyon sindirimi yavaşlatır, beynine saatler boyunca kesintisiz, stabil bir glikoz akışı sağlar. Sonuç? Saat 16:00’da üçüncü kahvene uzanmak yerine işine odaklanan keskin bir zihin.

Category: Genel | LEAVE A COMMENT
Ekim 10 2026

Long-Running AI Agents İçin Runtime Seçimi: Cloud Function vs. Dedicated Worker

Modern bir LLM tabanlı uygulama geliştirirken ilk reflex genellikle aynıdır: Birkaç satır kod yaz, yerelde çalıştır, ardından modern cloud architecture standartlarına uyup kodu bir serverless fonksiyona at. Ancak basit sohbet botlarından çıkıp otonom AI agents dünyasına adım attığınızda, seçtiğiniz runtime ortamı birdenbire en büyük kabusunuz haline gelebilir.

Kendi kendine web taraması yapan, kod derleyen, hata aldığında strateji değiştiren ve nihai bir rapor hazırlayan o harika ajanınız, sunucuya çıktığı anda 504 Gateway Timeout duvarına çarpıyorsa yalnız değilsiniz. Bu yazıda lafı dolandırmadan deneyeceğiz, ölçeceğiz ve şu sorunun cevabını arayacağız: Uzun süren (long-running) ajan işleri için hafif Cloud Function modelleri mi, yoksa arkada sessizce çalışan Dedicated Worker makineleri mi doğru tercih?

“5 Dakikada Biter Sanmıştım”: Serverless Neden Çuvallıyor?

Geleneksel web mimarisinde sunucusuz fonksiyonlar (AWS Lambda, Google Cloud Run functions vb.) harika bir felsefeye sahiptir: İstek gelir, kod birkaç yüz milisaniyede çalışır, veritabanına yazar ve yok olur. Sıfır boşta bekleme maliyeti, pürüzsüz ölçeklenme.

Fakat çok adımlı bir yapay zeka ajanı geleneksel bir web isteği gibi davranmaz. Bir ajan döngüsü kabaca şuna benzer:

Düşün -> Tool Seç -> Web Sayfasına Git (Bekle 4sn) -> Sayfayı Oku -> LLM'e Sor (Bekle 12sn) -> Kod Yaz -> Sandbox'ta Çalıştır (Bekle 8sn) -> Hata Aldı, Başa Dön...

Burada CPU sürekli tam gaz çalışmaz; vaktin %80’i dış API çağrılarını ve ağ gecikmelerini beklemekle geçer. İşte serverless mimarinin tıkandığı üç kritik nokta:

  • Sert Zaman Aşımı (Hard Timeouts): Birçok API gateway 30 saniyede bağlantıyı keser. AWS Lambda en fazla 15 dakika çalışabilir. Kapsamlı bir araştırma yapan ajanın 20 dakika sürmesi işten bile değildir.
  • Durumsuzluk (Statelessness) Laneti: Fonksiyon kapandığı an belleğindeki tüm context uçar. Ajanın o anki çalışma belleğini (scratchpad) harici bir Redis veya veritabanına taşımak ciddi bir ek gecikme yaratır.
  • Bekleme Süresine Para Ödemek: Serverless servisler genelde tahsis edilen RAM ve geçen milisaniye üzerinden fatura keser. LLM’in token üretmesini boş boş beklerken faturanız tıkır tıkır yazmaya devam eder.

[Görsel: Cloud Function üzerinde 30. saniyede kesilen API gateway timeout hatası ve agent’ın yarım kalmış düşünce zinciri log ekranı]

Test Senaryosu: Derin Araştırma Ajanı Masada

Konuyu netleştirmek için laboratuvara indik. Basit bir senaryo kurguladık: Ajanımız verilen bir şirket hakkında 10 farklı web sayfasını scrape edecek, sayfaları parseleyip bir LLM’e (GPT-4o) özetletecek ve sonuçları birleştirip tek bir analiz raporu üretecek.

Bu ajanı iki farklı ortamda aynı görevle 10’ar kez koşturduk:

  1. Kurulum A: AWS Lambda (2 GB RAM, Node.js runtime).
  2. Kurulum B: Dedicated Worker (Hetzner üzerinde en ucuz CPX11 VPS + Docker).

Sonuç: AWS Lambda tarafında 10 denemenin 4’ü ağ gecikmeleri ve API rate limit bekleme süreleri yüzünden 15 dakikalık hard timeout sınırına takılıp çöpe gitti. Çalışan 6 testin ortalama maliyeti, sürekli açık tutulan küçük bir VPS’in günlük masrafını ikiye katladı. Dedicated Worker ise işleri sırayla, hiç acele etmeden, kesintisiz bir biçimde 6-8 dakika aralığında başarıyla tamamladı.

Karşılaştırma: Cloud Function vs. Dedicated Worker

Mesele sadece “çalıştı / çalışmadı” ikiliği değil. Mimari kararlar bakımından iki yaklaşımın net bir röntgenini çekelim:

Kriter Cloud Function (Serverless) Dedicated Worker (VPS / Container)
Maksimum Çalışma Süresi Kısıtlı (Genelde 15 dk sınır) Sınırsız (Günlerce sürebilir)
State & Bellek Yönetimi Zor; her adımda dış DB’ye yazılmalı Kolay; süreç boyunca RAM’de tutulabilir
Ölçeklenme (Scaling) Otomatik, sıfırdan binlere anında Kuyruk (queue) yönetimi ve manuel yapılandırma gerektirir
Maliyet Modeli Kullanım başına ödeme (Bekleme dahil) Sabit aylık ödeme
Lokal Araçlar (Browser, Sandbox) Çok zor (Lambda layer boyut limitleri) Çok kolay (Playwright, Docker-in-Docker rahatça çalışır)

Modern Çözüm: Hibrit Mimari ve Workflow Motorları

“Peki her agent için devasa sunucular mı kiralamak zorundayız?” Tabii ki hayır. 2024 ve sonrasında modern bulut dünyası bu ikilemi çözmek için yeni nesil ara katmanlar geliştirdi.

1. Durable Execution Motorları (Temporal, Inngest, Trigger.dev)

Bu araçlar ajanın kodunu adım adım (step-by-step) yürütür. Ajan bir web sayfasını beklerken veya LLM yanıt üretirken süreci durdurur (suspend eder). Yanıt geldiğinde kaldığı değişken değerleriyle devam eder. Böylece hem serverless gibi kaynak tasarrufu yaparsınız hem de timeout endişeniz kalmaz.

[Görsel: Trigger.dev panelinde adım adım duraklatılarak (wait for event) ilerleyen bir AI agent akışının zaman çizelgesi]

2. Container-Based On-Demand Runtimes (Fly.io, Modal)

Özellikle Modal veya Fly.io Machines gibi yapılar, bir ajan tetiklendiğinde bir Docker konteynerini saniyeler içinde ayağa kaldırır. Konteyner 45 dakika boyunca ajanın işini bitirmesini bekler, iş bitince kendini imha eder. Klasik serverless gibi kullanılır ama timeout limitleri saatlerle ölçülür.

Cüzdan Raporu: Fiyatlar ve Ücretsiz Alternatifler

Mühendislik kararları günün sonunda bütçeye bağlanır. Projenizin büyüklüğüne göre maliyet tablosu şu şekilde şekilleniyor:

  • Sıfır Bütçe / Hobi Projeleri:
    • Fly.io: Ücretsiz planda sunduğu kaynaklarla ufak bir worker konteynerini sürekli açık tutabilirsiniz.
    • AWS Lambda Free Tier: Ayda 1 milyon istek ücretsiz. Ancak ajanınız 5 dakikadan uzun sürmüyorsa ve browser otomasyonu gibi ağır kütüphaneler barındırmıyorsa.
  • Giriş Seviyesi Üretim (Production):
    • Hetzner Cloud (CPX11/CPX21): Ayda ~4 – 8 Euro bandında sabit ücret. Arkasına bir BullMQ veya Celery kuyruğu bağlayarak yüzlerce ajan görevini kafanız rahat yönetirsiniz.
    • Modal: Her ay 30 dolar ücretsiz kullanım kredisi veriyor. GPU ve uzun süren CPU işleri için şu an piyasadaki en pratik ortam.

Hangisini Seçmelisiniz? Karar Ağacı

Yol haritanızı çizmek için şu basit formülü kullanabilirsiniz:

Eğer ajanın yapacağı iş deterministik ise, yani 2-3 API çağrısıyla en geç 30 saniyede biteceği belliyse: Serverless / Cloud Function tercih edin. Altyapı yönetmekle uğraşmayın.

Ancak ajanın ne zaman duracağı önceden kestirilemiyorsa, kendi kendine internette gezinecekse (Playwright/Puppeteer), lokalde Python kodu çalıştırıp çıktıları analiz edecekse: Hiç düşünmeden bir Dedicated Worker veya Workflow Engine (Inngest/Temporal) mimarisine geçin. Timeout hatalarını debug etmekle harcayacağınız saatler, birkaç dolarlık sunucu faturasından çok daha pahalıdır.

Category: Genel | LEAVE A COMMENT
Ekim 10 2026

Mutfakta ‘Batch Cooking’ ve Inventory Yönetimi: Yazılımcı Gibi Yemek Yapmak

Saat akşam yedi buçuk. Ekranı kapattınız, karnınız zil çalıyor ve buzdolabının kapağını açtığınızda karşınızda sadece yarım bir limon ve yalnız bir kavanoz salça var. İşte bu, hayatın fırlattığı en acımasız Unhandled Exception anıdır. Oysa doğru bir Batch Cooking stratejisi kurarak mutfak verimliliği sağlamak, hem dengeli beslenme rutinine sadık kalmanızı hem de değerli bir zaman yönetimi kazanmanızı sağlar. Kod yazarken DRY (Don’t Repeat Yourself) prensibini uyguluyoruz da neden mutfakta her akşam soğanı sıfırdan doğruyoruz?

Gelin, mutfağı bir CI/CD pipeline’ı gibi kuralım: Malzemeleri önceden hazırla (staging), tek seferde pişir (build), hafta boyunca farklı şekillerde tüket (deploy). İşte bu hafta hayatınızı kurtaracak modüler fırın tepsisi prototipi.

Porsiyon: 4 Porsiyon (Modüler taban)
Hazırlık Süresi: 10 dakika
Pişirme Süresi: 25 dakika

Modüler ‘Base Component’: Fırında Baharatlı Protein ve Sebze

Bu tarif tek bir yemek değil; dürüme, salataya, pirinç pilavının üzerine veya tek başına tabağa girebilecek çok amaçlı bir temel bileşen. Tıpkı tekrar kullanılabilir bir React componenti gibi.

# Mutfağa girmeden önce inventory kontrolü yapalım
$ check-fridge --target="protein,veg,sauce"
Status: 200 OK. Ready to batch cook.

Malzemeler

  • 500 g Tavuk Göğsü: Kuşbaşı doğranmış (Alternatif: Tofu, nohut veya hindi göğsü).
  • 2 adet Orta Boy Tatlı Patates: Küp doğranmış (Alternatif: Normal patates veya balkabağı).
  • 1 baş Brokoli: Çiçeklerine ayrılmış (Alternatif: Karnabahar veya kabak).
  • 1 adet Kırmızı Biber: İri parçalar halinde.
  • 3 yemek kaşığı Zeytinyağı: Bağlayıcı ajanımız.
  • Baharat Karışımı: 1 tatlı kaşığı toz kırmızı biber, 1 çay kaşığı sarımsak tozu, tuz, karabiber, kekik.

Adım Adım Hazırlanış

  1. Fırını ısıtın: Fırını 200°C’ye (fanlı) ayarlayın. Büyük boy bir fırın tepsisine pişirme kağıdı serin.
  2. Parçala ve birleştir: Doğranmış sebzeleri ve tavuk parçalarını geniş bir kasede zeytinyağı ve baharat karışımıyla güzelce harmanlayın. Bütün yüzeylerin kaplandığından emin olun.
  3. Tek katmana yay: Malzemeleri tepsiye üst üste gelmeyecek şekilde yayın. Aralarında hava boşluğu kalması sebzelerin haşlanmak yerine çıtır çıtır kızarmasını sağlar.
  4. Fırınlayın: Yaklaşık 22-25 dakika, tavuklar sulu kalıp sebzeler hafifçe karamelize olana kadar pişirin.
  5. Soğut ve porsiyonla: Tepsiyi tezgaha alın. Tamamen soğumasını bekledikten sonra cam saklama kaplarına eşit bölün.

Püf Noktası: Memory Leak Yaşamayın!

Hazırladığınız yiyeceklerin bozulmasını önlemek için iki altın kuralımız var:

1. Sıcakken kapatmayın: Yiyecekleri kaba sıcak koyup kapağını kapatırsanız kapta buhar oluşur; bu nem, yemeğin ömrünü yarı yarıya düşürür. Mutlaka oda sıcaklığına gelmesini bekleyin.

2. Sosları ayrı tutun: Hafta içi yemeği tüketeceğiniz ana kadar yoğurtlu, tahinli veya limonlu sosları ana karışıma eklemeyin. Sosları küçük kavanozlarda saklayın, yemeden 1 dakika önce “inject” edin.

Inventory Yönetimi: FIFO Prensibi

Yazılımda kuyruk (Queue) yapılarında kullandığımız First-In, First-Out (FIFO) mantığını buzdolabına uyarlayın. Yeni aldığınız ürünleri rafın arkasına, açılmış veya daha önce pişmiş olanları ön tarafa yerleştirin. Böylece buzdolabının görünmeyen derinliklerinde çürüyen sebzelerden doğan kaynak israfını sıfıra indirirsiniz.

Category: Genel | LEAVE A COMMENT
Ekim 9 2026

Quantum-Safe DevOps: Mevcut CI/CD Pipeline’larınızı Kriptografik Borçtan Koruyun

Modern devops pratiklerinde güvenlik genellikle pipeline’a bir SAST/DAST aracı sıkıştırmak, image’ları Trivy ile taramak ve artifact’leri RSA-2048 ile imzalamaktan ibaret sanılıyor. Oysa kapıda sessizce büyüyen devasa bir problem var: Kriptografik borç. Kuantum bilgisayarlar pratik ölçeğe ulaştığında, bugün asimetrik cryptography temelleri üzerine inşa ettiğimiz tüm pipeline security mimarisi domino taşı gibi devrilecek. Daha da kötüsü, tehdit “o gün” başlamayacak; Harvest Now, Decrypt Later (HNDL) saldırıları sebebiyle bugünden depolanan imzalar ve şifreli trafik yarın aleyhimize delil olarak kullanılacak. Bu yazıda teorik fizik tartışmalarına girmeden, doğrudan production hatlarında uygulayabileceğiniz quantum-safe dönüşüm stratejilerini ve pratik konfigürasyonları masaya yatırıyoruz.

Neden Şimdi? Moska Teoremi ve CI/CD Gerçekliği

Kuantum tehdidini konuşurken çoğu mühendisin düştüğü hata, “Q-Day gelene kadar en az 8-10 yılımız var” rehavetine kapılmaktır. Kriptograf Michele Mosca’nın denklemi durumu çok net özetler: X + Y > Z ise sisteminiz zaten risk altındadır. Burada X verinizin gizli kalması gereken süre, Y sistemlerinizi kuantum dirençli hale getirme süreniz, Z ise kuantum bilgisayarların RSA/ECC’yi kıracağı tahmini tarihtir.

Bir bankanın veya fintech girişiminin CI/CD pipeline’ında build edilen artifact’lerin, firmware imajlarının veya Git commit’lerinin imza geçerlilik ömrü bazen 10-15 yılı bulur. Eğer bugün artifact imzalarken ML-DSA (CRYSTALS-Dilithium) veya stateful hash-based imzalara geçiş yapmazsanız, 2030’da geçmişe dönük supply chain doğrulamalarınızın hiçbir matematiksel güvencesi kalmayacaktır.

1. Git İletişimi: OpenSSH Hibrit Anahtar Değişimine Geçiş

Git runner’larınız repository’lere SSH üzerinden bağlanıyorsa, aradaki trafik bugün kaydedilip gelecekte çözülebilir. OpenSSH 9.0 ve üzeri sürümler, varsayılan olarak Streamlined NTRU Prime ve X25519 hibrit algoritmasını (sntrup761x25519-sha512@openssh.com) destekliyor. Bu hibrit yapı şu anlama gelir: Klasik X25519 kırılsa bile kuantum-dirençli katman sizi korur; yeni algoritmada bilinmeyen bir açık çıksa bile klasik katman güvence sağlar.

CI/CD runner’larınızın ve Git sunucularınızın (GitLab, self-hosted Gitea vs.) SSH konfigürasyonunu zorunlu olarak hibrit moda geçirmek için /etc/ssh/ssh_config (veya sunucu tarafında sshd_config) dosyasında KexAlgorithms direktifini güncelleyin:

# /etc/ssh/sshd_config veya CI Runner ~/.ssh/config
KexAlgorithms sntrup761x25519-sha512@openssh.com,curve25519-sha256,curve25519-sha256@libssh.org

# Host key olarak klasik Ed25519 kullanmaya devam etseniz bile,
# oturum anahtarı değişimi (KEX) kuantum dirençli hale gelir.
HostKeyAlgorithms ssh-ed25519,rsa-sha2-512

Runner üzerinde bağlantının hibrit algoritma kullanıp kullanmadığını doğrulamak için şu komutla debug çıktısını inceleyin:

ssh -vvv git@gitlab.internal.corp 2>&1 | grep "kex: algorithm:"
# Çıktıda şunu görmelisiniz:
# debug1: kex: algorithm: sntrup761x25519-sha512@openssh.com

2. Artifact İmzalama: Cosign ve Post-Quantum Algoritmalar

Yıllardır Cosign ile container imzalıyoruz. Peki o imzalar neye güveniyor? ECDSA P-256 veya RSA-4096. Shor algoritması çalışan bir kuantum bilgisayar karşısında P-256’nın ömrü birkaç saniyedir. NIST, Ağustos 2024’te resmi FIPS standartlarını yayımladı: FIPS 203 (ML-KEM), FIPS 204 (ML-DSA) ve FIPS 205 (SLH-DSA).

Şu an üretim ortamlarında saf PQC (Post-Quantum Cryptography) kullanmak imza boyutları nedeniyle (RSA’in 256 baytına karşılık Dilithium-3’ün ~3.3 KB boyutu) overhead yaratabilir. Bu yüzden ara çözüm Hibrit İmzalar veya liboqs entegrasyonudur. Sigstore ekosistemi PQC desteğini deneysel olarak sürdürürken, build pipeline’ınızda OpenSSL 3.x ve oqsprovider kullanarak kendi post-quantum PKI altyapınızı ayağa kaldırabilirsiniz.

Runner container’ı içerisinde ML-DSA-65 (Dilithium3) tabanlı bir keypair üretip artifact imzalamak için örnek bir yaklaşım:

# liboqs ve oqsprovider kurulu bir base image üzerinde:
# 1. Post-Quantum Private Key üret (FIPS 204 / ML-DSA-65)
openssl req -x509 -new -newkey mldsa65 \
  -keyout pqc_private.key \
  -out pqc_cert.crt \
  -nodes -subj "/CN=CI-PQC-Signer/O=KertenKerem" \
  -provider oqsprovider -provider default

# 2. Release artifact'ının (örneğin binary veya tarball) SHA-256 hash'ini al
sha256sum release-v1.4.0.tar.gz | awk '{print $1}' > artifact.digest

# 3. Hash'i ML-DSA anahtarıyla imzala
openssl dgst -sign pqc_private.key \
  -provider oqsprovider -provider default \
  -out artifact.sig artifact.digest

# 4. Doğrulama testi (Deployment aşamasında çalışacak kod)
openssl dgst -verify <(openssl x509 -in pqc_cert.crt -pubkey -noout -provider oqsprovider) \
  -signature artifact.sig \
  -provider oqsprovider -provider default \
  artifact.digest

Bu akışın klasik Cosign akışına göre tek farkı, kullanılan matematiksel yapının lattice-based (örgü tabanlı) olmasıdır. Bir imzayı production cluster’ında Admission Controller seviyesinde doğrulamak istiyorsanız, gatekeeper veya Kyverno pod’larınızın da liboqs kütüphanesini tanıyan OpenSSL/BoringSSL runtime’larına sahip olması gerektiğini unutmayın.

3. Kriptografik Envanter: CBOM (Cryptographic Bill of Materials)

SBOM (Software Bill of Materials) çıkarmayı öğrendik; peki uygulamanızın hangi şifreleme kütüphanelerine, hangi anahtar uzunluklarına ve hangi TLS versiyonlarına bağımlı olduğunu biliyor musunuz? Kodunuz doğrudan crypto/tls çağırıyor olabilir ama üçüncü parti bir Go paketi derleme anında RSA-1024’e hardcode edilmiş eski bir algoritma kullanıyor olabilir.

CycloneDX standardı, CBOM konseptiyle kriptografik varlıkların taranmasını ve listelenmesini destekler. CI aşamasına ekleyeceğiniz bir CBOM adımı, kuantum göçü (migration) başladığında envanter çıkarmak için harcayacağınız ayları kurtarır.

# Syft ile projenin kriptografik bağımlılıklarını içeren SBOM JSON çıktısı üretme
syft dir:. -o cyclonedx-json=bom.json

# bom.json içerisindeki zayıf kriptografik bağımlılıkları CI aşamasında filtreleme
jq '.components[] | select(.name | test("crypto|tls|ssl|ssh")) | {name: .name, version: .version}' bom.json

Eğer pipeline’ınızda kurumsal bir tarama yapıyorsanız, IBM CBOM Toolkit veya benzeri statik analiz araçlarını derleme öncesi kancalara (pre-commit / CI gate) entegre ederek kod tabanında crypto.GenerateKey(rsa.Reader, 2048) gibi çağrıları CI seviyesinde hata verdirerek engelleyebilirsiniz:

# semgrep ile CI pipeline'ında kuantum-zayıf anahtar kullanımını fail etme örneği
semgrep --config=p/crypto \
  --lang=go \
  --pattern='rsa.GenerateKey($R, 2048)' \
  --error \
  ./src

4. HashiCorp Vault ve Transit Secret Motoru

Pipeline içerisinde hassas environment variable’ları şifrelemek (envelope encryption) için yaygın olarak HashiCorp Vault Transit Engine kullanılır. Mevcut transit engine konfigürasyonunuz büyük olasılıkla aes256-gcm96 ile data encryption, anahtar değişimi için ise ECDSA/RSA kullanıyordur. AES-256, kuantum bilgisayarlar karşısında güvenlidir (Grover algoritması anahtar arama uzayını 2^128’e düşürür ki bu hâlâ pratikte kırılamaz bir seviyedir). Buradaki asıl problem, Vault client ile server arasındaki mTLS oturumu ve transit key’lerin wrap edilme yöntemidir.

Vault mTLS iletişimini güvenceye almak için, reverse proxy ve ingress seviyesinde TLS 1.3 zorunlu tutulmalı ve desteklenen cipher suite’ler sınırlandırılmalıdır:

# NGINX veya Cloud Ingress TLS 1.3 konfigürasyonu
ssl_protocols TLSv1.3;
# Kuantum sonrası anahtar değişimini destekleyen hibrit gruplar (X25519MLKEM768)
# Envoy / Nginx son sürümlerinde BoringSSL desteği ile aktifleştirilebilir
ssl_ecdh_curve X25519MLKEM768:x25519:secp384r1;

Cloudflare ve Google Chrome’un halihazırda üretimde kullandığı X25519MLKEM768 hibrit anahtar değişim mekanizması, pipeline runner’larınız ile internal API’larınız arasındaki veri trafiğini HNDL saldırılarına karşı bugünden korur.

DevOps Mühendisleri İçin Aksiyon Planı

Kriptografik dönüşüm, son gün yapabileceğiniz bir “hotfix” değildir. Bugün almanız gereken aksiyonlar şunlardır:

1. SSH Altyapısını Denetleyin: Tüm CI runner ve bastion host’larda OpenSSH 9.0+ sürümüne geçin ve hibrit KEX algoritmalarını zorunlu kılın.
2. CBOM Üretin: Build süreçlerinize SBOM yanında kriptografik varlık taramalarını ekleyin; kütüphanelerinizdeki sert kodlanmış asimetrik anahtar boyutlarını tespit edin.
3. AES-128’i Terk Edin: Simetrik şifrelemede taban çizgisi olarak her yerde AES-256 ve ChaCha20-Poly1305 kullanın.
4. Kriptografik Esneklik (Crypto-Agility) Kazanın: Kod içinde algoritma isimlerini string parametre olarak geçmeyin; anahtar yönetimini soyutlayan provider katmanları kullanın ki NIST FIPS 204/205 kütüphaneleri genel paket yöneticilerine tam girdiğinde sadece config değiştirerek göç edebilin.

Kuantum çağı geldiğinde pipeline’ları baştan yazmak zorunda kalmamak için mimarideki kriptografik borcu bugünden amorti etmeye başlayın.

Category: Genel | LEAVE A COMMENT