Mayıs 28 2026

DevOps’un Geleceği: 2025 ve Ötesinde AIOps, DevSecOps ve Platform Mühendisliği ile Süper Güçlere Ulaşmak!

Merhaba kod sihirbazları, sistem mimarları ve bulut kaşifleri! Klavyeleriniz hazır mı? Çünkü bugün, dijital evrenimizin en dinamik köşelerinden biri olan DevOps’un geleceğine, 2025 ve ötesine doğru heyecan verici bir yolculuğa çıkıyoruz. Kemerlerinizi bağlayın, çünkü bu yolculukta sadece trendleri değil, aynı zamanda bu trendlerin hayatımızı nasıl kolaylaştıracağını, sistemlerimizi nasıl daha akıllı, daha güvenli ve daha verimli hale getireceğini keşfedeceğiz. Hazır mısınız?

DevOps, bildiğiniz gibi, yazılım geliştirme ve operasyon ekipleri arasındaki o meşhur duvarları yıkan, işbirliğini ve otomasyonu merkeze alan bir felsefe. Ama durmak yok, yola devam! Dijital dönüşümün hızı kesilmezken, DevOps da sürekli evrim geçiriyor. Bugün, bu evrimin en parlak yıldızlarından üçüne odaklanacağız: AIOps, DevSecOps ve Platform Mühendisliği. Bu üçlü, sadece birer moda kelime değil, aynı zamanda geleceğin yazılım geliştirme ve dağıtım süreçlerinin temel taşları olmaya aday. Gelin, bu süper güçlerin her birini yakından inceleyelim!

AIOps: Sistemlerinizin Yapay Zeka Destekli Süper Kahramanı

Şimdi hayal edin: Gece yarısı, sistemlerinizden biri aniden garip davranmaya başlıyor. Normalde ne yaparsınız? Logları tararsınız, metrikleri incelersiniz, alarmları kontrol edersiniz… Kısacası, bir dedektif gibi ipuçlarının peşine düşersiniz. Peki ya tüm bu işleri sizin yerinize yapan, hatta sorun daha ortaya çıkmadan size haber veren süper zeki bir asistanınız olsaydı? İşte AIOps tam olarak bu! Yapay zeka (AI) ve makine öğrenimi (ML) algoritmalarını kullanarak IT operasyonlarını (IT Operations) otomatikleştiren ve iyileştiren bir disiplin. Yani, sistemlerinizin kahve makinesi bozulmadan önce size “Kahve makinesi arızalanacak, yedek parça sipariş et!” diyen akıllı bir sistem gibi düşünebilirsiniz. Artık manuel müdahalelerle boğuşmak yerine, AI’ın gücüyle proaktif ve öngörülü olabiliyoruz.

[Buraya AIOps ile ilgili bir görsel ekleyebilirsiniz]

Peki, bu AIOps denen süper kahraman, Kubernetes ekosisteminde nasıl bir rol oynuyor? Bildiğiniz gibi, Kubernetes ortamları dinamik, karmaşık ve sürekli değişen bir yapıya sahip. Binlerce pod, servis ve deployment’ın olduğu bir ortamda manuel olarak sorun tespiti yapmak, samanlıkta iğne aramaktan farksız. AIOps, burada devreye giriyor ve Kubernetes metriklerini, loglarını ve olaylarını (events) gerçek zamanlı olarak analiz ederek anormallikleri tespit ediyor. Örneğin, bir pod’un CPU kullanımında ani ve beklenmedik bir artış olduğunda, AIOps bunu hemen fark edip size bildirebilir, hatta otomatik olarak ölçeklendirme veya yeniden başlatma gibi aksiyonlar önerebilir. Daha da ileri giderek, geçmiş verileri kullanarak gelecekteki kaynak ihtiyaçlarını tahmin edebilir ve proaktif olarak ölçeklendirme kararları almanıza yardımcı olabilir. Bu, Kubernetes kümelerinizin her zaman optimum performansta çalışmasını sağlarken, operasyonel yükünüzü de önemli ölçüde azaltır.

AIOps dünyasında parlayan bazı popüler araçlar var:

  • Prometheus: Kubernetes metriklerini toplamak için endüstri standardı haline gelmiş açık kaynaklı bir izleme sistemi. AIOps algoritmaları için zengin bir veri kaynağı sunar.
  • Grafana: Prometheus ile toplanan metrikleri görselleştirmek için kullanılan, esnek ve güçlü bir dashboard aracı. AIOps’un tespit ettiği anormallikleri ve öngörüleri anlaşılır grafiklerle sunar.
  • Datadog: Kapsamlı bir bulut izleme ve analitik platformu. AIOps yetenekleriyle log yönetimi, APM (Application Performance Monitoring) ve altyapı izlemeyi bir araya getirir.
  • Splunk: Büyük veri analizi ve güvenlik bilgileri ve olay yönetimi (SIEM) için kullanılan güçlü bir platform. AIOps için log ve olay verilerini analiz etme konusunda oldukça yeteneklidir.

AIOps yolculuğunuza başlarken aklınızda bulundurmanız gereken birkaç ipucu:

  • Küçük Başlayın, Büyük Düşünün: Tüm sistemlerinizi bir anda AIOps’a geçirmeye çalışmayın. En kritik veya en çok sorun çıkaran alanlardan başlayarak pilot projeler yapın.
  • Veri Kalitesine Odaklanın: AIOps algoritmaları, beslendiği veriler kadar iyidir. Temiz, doğru ve eksiksiz metrik ve log verileri topladığınızdan emin olun.
  • İnsan Dokunuşunu Unutmayın: AIOps, insan operasyon uzmanlarının yerini almak yerine, onların daha stratejik ve karmaşık sorunlara odaklanmasını sağlar. AI’ın önerilerini her zaman bir insan gözüyle değerlendirin.

DevSecOps: Kalenizi İnşa Ederken Güvenliği Temelden Sağlamak

Bir zamanlar, yazılım geliştirme süreci bir kale inşa etmeye benzerdi. Önce kaleyi inşa eder, sonra etrafına hendekler kazar, duvarları güçlendirir ve nöbetçiler yerleştirirdik. Yani, güvenlik sonradan eklenen bir özellikti. Ama dijital dünyada bu yaklaşım, kapıları açık bırakıp hırsızları davet etmek gibi! İşte DevSecOps, bu eski anlayışı kökten değiştiriyor. Güvenliği (Security) geliştirme (Development) ve operasyon (Operations) süreçlerinin her aşamasına entegre eden bir felsefe. Yani, kalenizi inşa etmeye başlarken, her tuğlayı yerleştirirken güvenliği düşünmek, duvarları örerken sağlamlığını test etmek ve nöbetçileri daha inşaat aşamasında eğitmek gibi. Bu sayede, güvenlik açıkları daha erken aşamalarda tespit edilip giderilir, maliyetler düşer ve en önemlisi, sistemleriniz çok daha sağlam olur.

[Buraya DevSecOps ile ilgili bir görsel ekleyebilirsiniz]

Kubernetes, DevSecOps için adeta bir oyun alanı sunuyor. Kubernetes’in sağladığı esneklik ve otomasyon yetenekleri, güvenlik kontrollerini CI/CD pipeline’larına entegre etmeyi kolaylaştırıyor. Örneğin:

  • Image Scanning: CI/CD sürecinde kullanılan container imajlarını (container images) veya gibi araçlarla otomatik olarak tarayarak bilinen güvenlik açıklarını tespit edebilirsiniz.
  • Runtime Security: gibi araçlarla Kubernetes kümelerinizdeki pod’ların çalışma zamanı davranışlarını izleyebilir, şüpheli aktiviteleri (örneğin, bir web sunucusunun dizinine yazmaya çalışması) anında tespit edip engelleyebilirsiniz.
  • Network Policies: Kubernetes kaynakları ile pod’lar arası ağ iletişimini kısıtlayarak, sadece gerekli olan bağlantılara izin verebilirsiniz. Bu, bir saldırganın içeride yatay hareket etmesini zorlaştırır.
  • Security Context: Pod tanımlarındaki ayarları ile container’ların ayrıcalıklarını (privileges) kısıtlayabilir, root olarak çalışmasını engelleyebilir veya belirli Linux yeteneklerini (capabilities) kaldırabilirsiniz.
  • Admission Controllers: Kubernetes’in ‘ları sayesinde, bir kaynak (örneğin, bir pod) kümeye dağıtılmadan önce güvenlik politikalarına uygunluğunu kontrol edebilir ve gerekirse dağıtımı engelleyebilirsiniz.

DevSecOps dünyasında öne çıkan bazı popüler araçlar:

  • Snyk: Geliştiricilerin kodlarındaki, bağımlılıklarındaki, container imajlarındaki ve IaC (Infrastructure as Code) dosyalarındaki güvenlik açıklarını bulmalarına ve düzeltmelerine yardımcı olan bir platform.
  • Trivy: Container imajları, dosya sistemleri ve Git depolarındaki güvenlik açıklarını, yanlış yapılandırmaları ve gizli sırları (secrets) tespit eden basit ve kapsamlı bir tarayıcı.
  • Falco: Kubernetes ve Linux ortamları için çalışma zamanı güvenlik aracı. Container’ların ve uygulamaların anormal davranışlarını tespit eder ve uyarır.
  • Open Policy Agent (OPA): Bulut yerel ortamlar için genel amaçlı bir politika motoru. Kubernetes admission controller’ları ile entegre olarak güvenlik politikalarını kod olarak tanımlamanıza ve uygulamanıza olanak tanır.

DevSecOps’u benimserken göz önünde bulundurmanız gerekenler:

  • “Shift Left” Yaklaşımı: Güvenliği geliştirme sürecinin en başına, yani “sola” kaydırın. Güvenlik açıklarını kod yazılırken veya test edilirken tespit etmek, üretim ortamında bulmaktan çok daha ucuz ve kolaydır.
  • Otomasyon Şart: Güvenlik kontrollerini CI/CD pipeline’larınıza entegre ederek manuel adımları ortadan kaldırın. Otomatik taramalar, testler ve politika uygulamaları, insan hatasını minimize eder.
  • Güvenlik Kültürü Oluşturun: Güvenlik sadece güvenlik ekibinin işi değildir. Tüm geliştirme ve operasyon ekiplerini güvenlik konusunda eğitin ve onları bu sürecin bir parçası haline getirin.

Platform Mühendisliği: Geliştiricilerin Süper Güçlerini Ortaya Çıkarmak

Bir zamanlar, bir geliştirici yeni bir uygulama dağıtmak istediğinde, adeta bir orkestra şefi gibi her şeyi kendi başına halletmek zorundaydı: sunucu ayarlamak, veritabanı kurmak, ağ yapılandırmak, izleme araçlarını entegre etmek… Bu, geliştiricilerin değerli zamanlarını kod yazmak yerine altyapı işleriyle harcamasına neden oluyordu. İşte Platform Mühendisliği, bu kaosu ortadan kaldırmak için sahneye çıkıyor! Geliştiricilere, uygulamalarını hızlı, güvenli ve otonom bir şekilde dağıtabilmeleri için “self-service” (kendi kendine hizmet) yetenekleri sunan, entegre bir Internal Developer Platform (IDP) oluşturma disiplini. Yani, geliştiricilere sadece tariflerini (kodlarını) vermeleri gereken, tüm mutfak ekipmanlarının (altyapı) hazır olduğu, hatta bulaşıkların bile otomatik yıkandığı bir “süper mutfak” sunmak gibi düşünebilirsiniz. Bu, geliştirici deneyimini (Developer Experience – DX) merkeze alarak verimliliği artırır.

[Buraya Platform Mühendisliği ile ilgili bir görsel ekleyebilirsiniz]

Kubernetes, Platform Mühendisliği’nin kalbinde yer alıyor. IDP’ler genellikle Kubernetes’i temel alarak, altyapı karmaşıklığını geliştiricilerden soyutlar. Geliştiriciler, Kubernetes’in detaylarıyla uğraşmak yerine, daha üst düzey soyutlamalarla (örneğin, bir “uygulama” veya bir “veritabanı” isteği) etkileşime girer. Bu, veya gibi araçlarla mümkün hale gelir:

  • Crossplane: Kubernetes’i bir kontrol düzlemi (control plane) olarak kullanarak, bulut sağlayıcılarındaki (AWS, Azure, GCP) veya şirket içi altyapıdaki kaynakları (veritabanları, mesaj kuyrukları, depolama kovaları vb.) Kubernetes API’si üzerinden yönetmenizi sağlar. Geliştiriciler, bir veritabanı isteğini Kubernetes YAML dosyası olarak tanımlar ve Crossplane bunu arka planda gerçek bulut kaynağına dönüştürür.
  • KubeVela: Uygulama dağıtımını ve yönetimini basitleştiren, bulut yerel bir uygulama dağıtım motoru. Geliştiricilerin uygulamalarını ve bağımlılıklarını (veritabanları, önbellekler vb.) tek bir uygulama tanımıyla dağıtmalarına olanak tanır, altyapı detaylarını soyutlar.

Bu sayede, geliştiriciler kendi altyapı ihtiyaçlarını kendileri karşılayabilir, ancak bu süreç Platform Mühendisliği ekibi tarafından tanımlanan ve uygulanan standartlar ve güvenlik politikaları dahilinde gerçekleşir. Bu, hem hız hem de kontrol sağlar.

Platform Mühendisliği alanında öne çıkan bazı popüler araçlar:

  • Backstage: Spotify tarafından geliştirilen ve CNCF’e bağışlanan, geliştiriciler için bir “geliştirici portalı” oluşturan açık kaynaklı bir platform. Tüm yazılım bileşenlerini, dokümantasyonu, CI/CD pipeline’larını ve altyapı kaynaklarını tek bir arayüzde bir araya getirir.
  • Crossplane: Yukarıda bahsedildiği gibi, Kubernetes’i bir kontrol düzlemi olarak kullanarak altyapı kaynaklarını yönetmenizi sağlar.
  • KubeVela: Yine yukarıda bahsedildiği gibi, uygulama dağıtımını ve yönetimini basitleştiren bir platform.
  • Terraform: IaC (Infrastructure as Code) için popüler bir araç. Platform Mühendisliği ekipleri, altyapılarını Terraform ile tanımlayarak standartlaştırılmış ve tekrarlanabilir ortamlar oluşturur.

Platform Mühendisliği yolculuğunuzda size yardımcı olacak ipuçları:

  • Geliştirici Deneyimini (DX) Merkeze Alın: Platformunuzu tasarlarken ve geliştirirken, geliştiricilerin ihtiyaçlarını ve geri bildirimlerini ön planda tutun. Onların işini kolaylaştıran bir platform, benimsenme oranını artıracaktır.
  • MVP (Minimum Viable Platform) ile Başlayın: Tüm özellikleri bir anda sunmaya çalışmayın. Geliştiricilerin en acil ihtiyaçlarını karşılayan temel bir platformla başlayın ve zamanla iteratif olarak geliştirin.
  • Platformu Bir Ürün Olarak Görün: Platformunuzu, dahili müşterileri (geliştiriciler) olan bir ürün gibi yönetin. Yol haritası oluşturun, geri bildirim toplayın ve sürekli iyileştirme yapın.

Sonuç: Geleceğe Hazır Olun!

İşte böyle kod dostları! DevOps’un 2025 ve ötesindeki evrimine kısa ama dolu dolu bir bakış attık. AIOps ile sistemlerimizi daha akıllı hale getiriyor, sorunları öngörüyor ve operasyonel yükümüzü azaltıyoruz. DevSecOps ile güvenliği bir sonradan eklenen özellik olmaktan çıkarıp, yazılım geliştirme sürecinin DNA’sına işliyoruz. Ve Platform Mühendisliği ile geliştiricilerimize süper güçler kazandırarak, onların daha hızlı, daha mutlu ve daha üretken olmalarını sağlıyoruz.

Bu trendler, sadece teknolojik yenilikler değil, aynı zamanda iş yapış şekillerimizi, ekipler arası işbirliğini ve hatta şirket kültürünü dönüştüren güçlü katalizörler. Kubernetes’in bu dönüşümdeki merkezi rolü ise yadsınamaz. Bulut yerel mimarilerin yükselişiyle birlikte, bu üç trendin önemi katlanarak artacak.

Unutmayın, dijital dünya sürekli değişiyor ve bizler de bu değişime ayak uydurmak zorundayız. Bu yeni nesil DevOps yaklaşımlarını benimseyerek, sadece bugünün değil, yarının da zorluklarına hazır olabiliriz. Öğrenmeye, denemeye ve yenilikçi olmaya devam edin! Gelecek, bu süper güçleri kullananların olacak. Bir sonraki yazıda görüşmek üzere, kodunuz bol, hatalarınız az olsun!

Category: Genel | LEAVE A COMMENT
Mayıs 28 2026

GitOps: Altyapınızın Orkestra Şefi Artık Git!

Merhaba sevgili teknoloji meraklıları, kod sihirbazları ve altyapı mimarları! Nasılsınız, iyi misiniz? Umarım her şey yolundadır ve sunucularınız tıkır tıkır çalışıyordur. Bugün, son zamanlarda adını sıkça duyduğumuz, hatta belki de “yeni nesil IaC” olarak nitelendirebileceğimiz bir konuya dalış yapacağız: GitOps.

Şimdi durup bir düşünelim: “Infrastructure as Code” (IaC) zaten hayatımızdaydı, değil mi? `CloudFormation`, `Terraform`, `Ansible` gibi araçlarla altyapımızı kod olarak tanımlıyor, versiyonluyor ve otomatikleştiriyorduk. Harika! Peki, bu kadar güzelliğin üzerine GitOps neyi farklı yapıyor? Neden şimdi herkes GitOps konuşuyor? İşte tam da bu noktada, Git’in sadece uygulama kodumuz için değil, tüm altyapımız için de “tek doğruluk kaynağı” (single source of truth) haline geldiği o büyülü dünyaya adım atıyoruz. GitOps, altyapı yönetimini, yazılım geliştirme pratiklerinin en iyi yönleriyle birleştirerek, bize daha güvenilir, daha şeffaf ve daha hızlı bir yol sunuyor. Hazır olun, çünkü altyapınızın orkestra şefi artık Git!

GitOps Nedir? Orkestrayı Kim Yönetiyor?

GitOps’u anlamanın en güzel yolu, onu bir orkestra metaforuyla açıklamaktır. Hayal edin: Bir orkestra var ve bu orkestranın her bir üyesi (sunucular, veritabanları, ağ bileşenleri, Kubernetes Pod’ları) kendi enstrümanını çalıyor. Peki, bu koca orkestrayı kim yönetiyor? Tabii ki bir orkestra şefi! GitOps dünyasında bu şef, sizin Git deponuz (Git repository).

GitOps’un temel felsefesi üç ana sütun üzerine kuruludur:

  1. Deklaratif Tanımlama (Declarative Configuration): Altyapınızın mevcut durumunu değil, olması gereken durumunu tanımlarsınız. Yani, “şu sunucuyu kur” demek yerine, “şöyle bir sunucu olsun” dersiniz. Bu tanımlamalar, `YAML` veya `JSON` gibi deklaratif dillerle Git deponuzda saklanır. Git deponuz, orkestranın çalacağı notaların yazılı olduğu partisyon gibidir.
  2. Versiyonlama ve Değişiklik Takibi (Versioned and Tracked Changes): Altyapınızdaki her değişiklik, tıpkı uygulama kodunuzdaki gibi, Git üzerinde bir `commit` olarak kaydedilir. Bu, her an altyapınızın geçmişteki herhangi bir durumuna geri dönebileceğiniz (rollback) anlamına gelir. Ayrıca, kimin ne zaman, hangi değişikliği yaptığını kolayca takip edebilirsiniz. Bu, partisyonun her bir revizyonunun kaydedilmesi gibidir; her zaman önceki versiyonlara bakabilir, hatta hatalı bir notayı düzeltebilirsiniz.
  3. Otomatikleştirilmiş Senkronizasyon (Automated Synchronization): Git deponuzdaki deklaratif tanımlamalar ile canlı altyapınız arasındaki senkronizasyon sürekli olarak otomatik bir şekilde sağlanır. Yani, Git’teki partisyon değiştiğinde, orkestra (altyapı) bu yeni notaları otomatik olarak çalmaya başlar. Bu otomasyon, genellikle bir “operatör” veya “agent” tarafından gerçekleştirilir. Bu operatör, Git deponuzu sürekli izler ve herhangi bir değişiklik olduğunda, canlı altyapıyı Git’teki duruma getirmek için gerekli aksiyonları alır. Bu sayede, insan hatası riski minimuma iner ve dağıtım süreçleri hızlanır.

Özetle, GitOps ile altyapınızdaki tüm değişiklikler sadece Git deponuza bir `commit` ve `pull request` gönderilerek yapılır. Doğrudan canlı ortama müdahale etmek yerine, Git üzerinden dolaylı ve kontrollü bir şekilde hareket edersiniz. Bu, hem güvenliği artırır hem de denetlenebilirliği maksimize eder.

[Buraya GitOps Akışını Gösteren Bir Diyagram Ekleyebilirsiniz]

Neden Kubernetes ve GitOps Mükemmel Bir İkili?

Kubernetes, doğası gereği deklaratif bir sistemdir. `Deployment`, `Service`, `Pod` gibi kaynakları `YAML` dosyalarıyla tanımlar ve Kubernetes’e “benim altyapım böyle olsun” dersiniz. Kubernetes de bu deklaratif tanıma ulaşmak için elinden geleni yapar. İşte bu deklaratif yapı, GitOps ile Kubernetes’i adeta ruh ikizi haline getiriyor.

Geleneksel Kubernetes yönetiminde, geliştiriciler veya operasyon ekipleri genellikle `kubectl apply -f my-app.yaml` gibi komutlarla doğrudan cluster’a müdahale ederler. Bu yaklaşım, küçük ölçekli projelerde sorun yaratmasa da, büyük ve dinamik ortamlarda ciddi problemlere yol açabilir:

  • Drift (Sapma): Canlı cluster’daki durum ile `YAML` dosyalarınızdaki tanımlar arasında zamanla farklar oluşabilir. Birisi cluster’da manuel bir değişiklik yapar, ancak bu değişiklik Git’e yansımaz. Sonuç? “Benim makinemde çalışıyordu!” sendromunun altyapı versiyonu.
  • Denetlenebilirlik Eksikliği: Kimin ne zaman, hangi değişikliği yaptığını takip etmek zorlaşır. Güvenlik ve uyumluluk açısından büyük bir risk.
  • Manuel Hatalar: İnsan faktörü, özellikle stresli anlarda, hatalı komutların çalıştırılmasına ve kesintilere neden olabilir.

GitOps, bu sorunların hepsine zarif bir çözüm sunar. Git deponuz, Kubernetes cluster’ınızın tek ve nihai doğruluk kaynağıdır. Cluster’da bir değişiklik mi yapmak istiyorsunuz? Doğrudan `kubectl` kullanmak yerine, Git deponuzdaki ilgili `YAML` dosyasını günceller, bir `commit` yapar ve bir `pull request` açarsınız. Bu `pull request` incelenir, onaylanır ve `merge` edildiğinde, GitOps operatörü bu değişikliği algılar ve Kubernetes cluster’ınızı otomatik olarak yeni duruma getirir.

Bu sayede:

  • Drift ortadan kalkar: Cluster her zaman Git’teki durumu yansıtır.
  • Tam denetlenebilirlik sağlanır: Her değişiklik Git geçmişinde kayıtlıdır.
  • Manuel hatalar azalır: Dağıtım süreçleri otomatikleşir ve insan müdahalesi minimuma iner.
  • Geri alma (Rollback) kolaylaşır: Hatalı bir dağıtım durumunda, Git geçmişindeki önceki bir `commit`’e geri dönmek kadar kolaydır.

Kubernetes’in deklaratif API’si ve Git’in versiyon kontrol yetenekleri birleştiğinde, altyapı yönetimi, uygulama geliştirme kadar çevik, güvenilir ve tekrarlanabilir hale gelir.

Sahnenin Yıldızları: Popüler GitOps Araçları

GitOps felsefesini hayata geçirmek için birçok harika araç mevcut. İşte sahnenin en parlak yıldızlarından ikisi:

Argo CD

`Argo CD`, Kubernetes için deklaratif, `GitOps` tabanlı sürekli dağıtım (Continuous Delivery) aracıdır. En belirgin özelliği, “pull” tabanlı çalışma mantığıdır. Yani, `Argo CD` cluster’ınızda bir `agent` olarak çalışır ve sürekli olarak Git deponuzu izler. Git’teki tanımlar ile canlı cluster’daki durum arasında bir fark (drift) tespit ettiğinde, cluster’ı otomatik olarak Git’teki duruma senkronize eder.

`Argo CD`’nin öne çıkan özellikleri:

  • Pull-Based Dağıtım: Cluster’ın içinden Git deponuzu izler ve değişiklikleri çeker. Bu, güvenlik açısından avantajlıdır çünkü cluster’a dışarıdan erişim izni vermeniz gerekmez.
  • Zengin Web Arayüzü: `Argo CD`, dağıtılan uygulamalarınızın durumunu, senkronizasyon sağlığını ve geçmişini görsel olarak takip edebileceğiniz kullanıcı dostu bir web arayüzüne sahiptir. Bu arayüz, özellikle büyük ve karmaşık ortamlarda sorun giderme ve izleme için paha biçilmezdir.
  • Otomatik Senkronizasyon ve Sağlık Kontrolü: Git’teki değişiklikleri otomatik olarak algılar ve cluster’a uygular. Ayrıca, dağıtılan kaynakların sağlığını sürekli kontrol eder.
  • Rollback ve Roll-Forward: Hatalı dağıtımları kolayca geri alabilir veya yeni bir `commit` ile ileriye doğru düzeltebilirsiniz.
  • Çoklu Cluster Desteği: Birden fazla Kubernetes cluster’ını tek bir `Argo CD` örneği üzerinden yönetebilirsiniz.

Flux CD

`Flux CD`, `Cloud Native Computing Foundation` (CNCF) bünyesinde geliştirilen bir başka popüler GitOps aracıdır. `Argo CD` gibi, `Flux` da “pull” tabanlı bir yaklaşımla çalışır ve Git deponuzu tek doğruluk kaynağı olarak kabul eder. `Flux`, özellikle `kustomize` ve `Helm` gibi Kubernetes paketleme araçlarıyla güçlü entegrasyonlarıyla bilinir.

`Flux CD`’nin temel özellikleri:

  • Git-Merkezli Yaklaşım: `Flux`, Git deponuzu merkeze alır ve tüm dağıtım süreçlerini buradan yönetir.
  • CNCF Projesi: `CNCF` çatısı altında olması, projenin uzun vadeli sürdürülebilirliği ve topluluk desteği açısından güven verir.
  • Kustomize ve Helm Entegrasyonu: `kustomize` ile Kubernetes manifestlerini özelleştirebilir ve `Helm` ile uygulamaları kolayca paketleyip dağıtabilirsiniz. `Flux`, bu araçlarla sorunsuz bir şekilde entegre olur.
  • Operatör Modeli: Kubernetes cluster’ında çalışan bir dizi operatörden oluşur. Bu operatörler, Git deponuzu izler ve cluster’daki kaynakları senkronize eder.
  • Genişletilebilirlik: `Flux`, `notification-controller`, `image-reflector-controller` gibi çeşitli bileşenlerle genişletilebilir bir yapıya sahiptir.
  • Sürekli Senkronizasyon: Git deponuzdaki değişiklikleri algılar ve cluster’ı otomatik olarak günceller.

Her iki araç da GitOps felsefesini başarıyla uygulasa da, arayüz, özellik setleri ve topluluk yaklaşımları açısından farklılıklar gösterirler. Seçiminiz, projenizin ihtiyaçlarına ve ekibinizin tercihlerine göre değişebilir.

Altın Değerinde İpuçları ve En İyi Pratikler (Tips & Tricks)

GitOps yolculuğunuzda size rehberlik edecek birkaç altın değerinde ipucu ve en iyi pratik:

Repo Yapılandırması: Uygulama Kodu ve Altyapı/Konfigürasyon Repolarını Ayırın

GitOps’a başlarken yapılan yaygın hatalardan biri, uygulama kodu ile altyapı/konfigürasyon tanımlamalarını aynı Git deposunda tutmaktır. Bu, başlangıçta kolay gibi görünse de, zamanla karmaşıklığı artırır ve sorumlulukların bulanıklaşmasına neden olur. En iyi pratik, bu iki alanı ayrı depolarda yönetmektir:

  • Uygulama Kodu Reposu: Sadece uygulamanızın kaynak kodunu, testlerini ve `Dockerfile` gibi uygulama özel dosyalarını içerir.
  • Altyapı/Konfigürasyon Reposu (Config Repo): Kubernetes manifestleri (`Deployment`, `Service`, `Ingress` vb.), `Helm` chart’ları, `kustomize` dosyaları ve diğer altyapı tanımlamalarını içerir.

Bu ayrım, “App-of-apps pattern” olarak da bilinir ve birçok fayda sağlar:

  • Sorumluluk Ayrımı: Geliştiriciler uygulama koduna, operasyon ekipleri ise altyapı konfigürasyonlarına odaklanabilir.
  • Daha Hızlı Dağıtım: Uygulama kodu değiştiğinde sadece uygulama `CI/CD` pipeline’ı tetiklenir. Altyapı değiştiğinde ise sadece GitOps pipeline’ı çalışır.
  • Gelişmiş Güvenlik: Uygulama koduna erişimi olan herkesin altyapı konfigürasyonlarını değiştirmesini engeller.
  • Daha Temiz Git Geçmişi: Her deponun kendi alanına özel, anlamlı `commit` geçmişi olur.

Gizli Bilgilerin (Secrets) Yönetimi: Git’te Şifreli Saklayın

GitOps’un temel prensibi, her şeyin Git’te olmasıdır. Ancak bu, veritabanı şifreleri, API anahtarları gibi hassas bilgileri (secrets) açık metin olarak Git’e koymanız gerektiği anlamına gelmez. Bu, büyük bir güvenlik açığıdır! `Secrets` yönetimi, GitOps’un en kritik ve dikkatli olunması gereken alanlarından biridir.

Çözüm, `secrets`’ları Git’te şifreli olarak saklamak ve sadece Kubernetes cluster’ında deşifre edilmesini sağlamaktır. Bu amaçla kullanabileceğiniz popüler araçlar şunlardır:

  • Sealed Secrets: `Bitnami` tarafından geliştirilen bu araç, `secrets`’larınızı Kubernetes cluster’ınızın anahtarlarıyla şifrelemenizi sağlar. Şifrelenmiş `secret`’ı Git’e `commit` edersiniz ve `Sealed Secrets` operatörü, cluster’da bu `secret`’ı deşifre ederek normal bir Kubernetes `Secret` objesine dönüştürür. Bu sayede, `secret`’lar Git’te güvenli bir şekilde saklanırken, sadece yetkili cluster’lar tarafından kullanılabilir.
  • HashiCorp Vault: Daha gelişmiş ve merkezi bir `secret` yönetimi çözümü arıyorsanız, `Vault` harika bir seçenektir. `Vault`, `secrets`’ları güvenli bir şekilde depolar ve Kubernetes cluster’ınızdaki uygulamaların bu `secrets`’lara erişmesini sağlar. `Vault` entegrasyonu genellikle `Vault Agent Injector` veya `External Secrets Operator` gibi araçlarla yapılır.

Unutmayın, `secrets`’ları asla açık metin olarak Git’e koymayın!

Pull Request (PR) Kültürü: Her Değişiklik Bir İncelemeden Geçsin

GitOps, sadece araçlardan ibaret değildir; aynı zamanda bir kültürdür. Bu kültürün merkezinde ise Pull Request (PR) mekanizması yer alır. Altyapınızda yapacağınız her değişiklik, küçük veya büyük olsun, bir `pull request` aracılığıyla yapılmalıdır.

`PR` kültürü, size şu faydaları sağlar:

  • Kod İncelemesi (Code Review): Her değişiklik, ekip üyeleri tarafından incelenir. Bu, hataların erken aşamada yakalanmasını, en iyi pratiklerin uygulanmasını ve bilgi paylaşımını teşvik eder.
  • Denetlenebilirlik ve Onay Süreci: `PR`’lar, değişikliklerin ne zaman, kim tarafından ve hangi amaçla yapıldığını gösteren resmi bir kayıt tutar. Ayrıca, değişikliklerin canlı ortama uygulanmadan önce onaylanması gereken bir süreç oluşturur. Bu, özellikle uyumluluk gereksinimleri olan sektörler için hayati öneme sahiptir.
  • İşbirliği ve Bilgi Paylaşımı: `PR`’lar, ekip üyelerinin birbirlerinin çalışmalarından haberdar olmasını ve altyapı hakkında ortak bir anlayış geliştirmesini sağlar.
  • Otomatik Testler: `PR`’lar, otomatik testlerin (linting, statik analiz, entegrasyon testleri) tetiklenmesi için mükemmel bir noktadır. Bu testler, değişikliklerin kalitesini ve güvenliğini artırır.

Her `commit` bir `PR`’a, her `PR` bir incelemeye ve her `merge` bir otomatik dağıtıma dönüşmelidir. Bu döngü, GitOps’un gücünü tam anlamıyla ortaya çıkarır.

Sonuç

GitOps, altyapı yönetimini, yazılım geliştirme dünyasının en iyi pratikleriyle buluşturan, devrim niteliğinde bir yaklaşımdır. Artık altyapınız, tıpkı uygulama kodunuz gibi, versiyonlanabilir, denetlenebilir ve otomatikleştirilebilir bir varlık haline geliyor. Git deponuz, altyapınızın tek doğruluk kaynağı olurken, `Argo CD` ve `Flux CD` gibi araçlar, bu vizyonu gerçeğe dönüştürmek için sahnedeki yerlerini alıyor.

Unutmayın, GitOps sadece bir araç seti değildir; aynı zamanda bir kültürdür. Deklaratif tanımlamalar, versiyon kontrolü ve sürekli otomasyon prensiplerini benimseyerek, ekipleriniz daha güvenilir, daha şeffaf ve daha verimli bir şekilde çalışabilir. Altyapınızdaki “drift” kabusuna son verin, manuel hataları minimuma indirin ve geliştirici verimliliğini artırın.

Eğer henüz GitOps dünyasına adım atmadıysanız, şimdi tam zamanı! Kubernetes ile olan mükemmel uyumu sayesinde, bulut yerel uygulamalarınızı yönetme şeklinizi kökten değiştirecek bu felsefeyi keşfetmekten çekinmeyin. Altyapınızın orkestra şefliğini Git’e devredin ve müziğin hiç durmamasını sağlayın!

Bir sonraki yazıda görüşmek üzere, kodunuz bol, sunucularınız stabil olsun!

Category: Genel | LEAVE A COMMENT
Mayıs 28 2026

30 Yaş Sonrası Kas Kaybına Savaş: Hücresel Yaşlanmayı Geciktiren Direnç Antrenmanları

30 mumlu o doğum günü pastasını üflediğimiz an, vücudumuzda sessiz sedasız bir şeyler değişmeye başlar. Hayır, bir gecede yaşlanmıyoruz tabii ki ama biyolojik saatimiz vites değiştiriyor. Bilim insanlarının “sarkopeni” dediği yaşa bağlı kas kaybı, tam da bu dönemde kapımızı çalar. Ancak panik yapmaya gerek yok; sarkopeni önleme sandığınızdan daha eğlenceli ve dinamik bir yolla mümkün. Hücresel yaşlanmayı geciktirmenin, metabolizmayı canavar gibi çalıştırmanın ve geleceğe yatırım yapmanın sırrı, o çok göz korkutan ağırlık çalışması seanslarında saklı.

Kertenkerem.net olarak bu yazıda, “Neden 30’dan sonra her şey daha zor?” sorusunun yanıtını arayacak ve sizi birer fitness salonu müdavimi yapmadan, evde veya salonda uygulayabileceğiniz bilimsel bir yol haritası sunacağız.

Sarkopeni Nedir ve Neden 30’dan Sonra Başlar?

Neden böyle oluyor? Doğa neden bize düşman? Aslında düşman değil, sadece tasarruflu. Vücudumuz son derece pragmatik bir organdır. Kullanılmayan her şeyi “gereksiz yük” olarak görür ve elden çıkarır. 30 yaşından sonra, hormonal seviyelerdeki (özellikle büyüme hormonu ve testosteron) doğal düşüşle birlikte, vücut kas kütlesini korumakta zorlanmaya başlar.

Araştırmalar gösteriyor ki, 30 yaşından sonra her on yılda ortalama %3 ila %8 oranında kas kütlesi kaybediyoruz. Eğer hareketsiz bir yaşam sürüyorsak, bu kayıp çok daha dramatik boyutlara ulaşıyor. Kas kaybı sadece kollarımızın sarkması demek değil; yavaşlayan bir metabolizma, azalan kemik yoğunluğu ve dolayısıyla erken yaşlanma anlamına geliyor.

Direnç Antrenmanı Faydaları: Hücresel Düzeyde Gençleşme

Peki, çözüm ne? Sadece kardiyo yapmak (koşmak, yürümek) kalp sağlığımız için harikadır ama kas kaybını durdurmakta yetersiz kalır. İşte burada devreye direnç antrenmanı faydaları giriyor. Direnç antrenmanı, kasları yerçekimine veya harici bir ağırlığa karşı çalışmaya zorlayan her türlü egzersizdir.

Bilimsel araştırmalar gösteriyor ki, ağırlık çalışmak hücrelerimizin enerji santralleri olan mitokondrileri gençleştiriyor. Kaslar kasıldığında, vücut “miyokin” adı verilen ve beyinden bağışıklık sistemine kadar tüm vücutta anti-enflamatuar (iltihap karşıtı) etkiler yaratan kimyasallar salgılar. Yani ağırlık kaldırmak, aslında hücrelerinize “Hâlâ hayattayız ve savaşmaya devam ediyoruz!” mesajı göndermektir. Bu yüzden uzun yaşam spor trendlerinin merkezinde artık maraton koşuları değil, akıllıca planlanmış ağırlık antrenmanları yer alıyor.

Önemli Uyarı: Eğer kronik bir rahatsızlığınız (özellikle fıtık, eklem problemleri veya kalp rahatsızlığı) varsa, yeni bir ağırlık antrenmanı programına başlamadan önce mutlaka uzman bir hekime danışmalısınız. Egzersizleri doğru formda yapmak sakatlanmaları önler.

Haftalık Direnç Antrenmanı Nasıl Planlanır?

Gözünüz korkmasın. Haftada 5 gün saatlerce ağırlık kaldırmak zorunda değilsiniz. Uzun vadeli ve sürdürülebilir bir plan, her zaman en vahşi plandan daha iyidir. İşte hücresel yaşlanmayı yavaşlatacak eyleme geçirilebilir bir haftalık planlama rehberi:

1. Bileşik Hareketlere (Compound Exercises) Odaklanın

Tek bir kas grubunu izole eden hareketler yerine, aynı anda birden fazla eklemi ve kas grubunu çalıştıran hareketleri seçin. Bunlar vücudun en çok hormon salgılamasını sağlayan hareketlerdir.

  • Squat (Çömelme): Bacak, kalça ve core bölgesini çalıştırır.
  • Push-up (Şınav) / Bench Press: Göğüs, omuz ve arka kolu hedefler.
  • Rowing (Kürek): Sırt ve pazu kaslarını güçlendirir.

2. Progresif Aşırı Yükleme (Progressive Overload) Uygulayın

Kaslarınızın gelişmeye ve adaptasyon sağlamaya devam etmesi için onları zamanla daha fazla zorlamalısınız. Her hafta aynı 5 kiloluk dambılı kaldırmak bir süre sonra fayda sağlamaz. Ağırlığı milimetrik olarak artırın, tekrar sayısını çoğaltın veya hareketler arasındaki dinlenme süresini kısaltın.

3. Haftalık Programınızı Sade Tutun

Haftada 2 veya 3 gün, tüm vücudu (Full Body) hedefleyen 40-45 dakikalık seanslar başlangıç için mükemmeldir. Aşağıdaki basit haftalık şablonu bilgisayarınıza veya telefonunuza kaydedebilirsiniz:


# kertenkerem.net Haftalık Direnç Planı
PAZARTESİ: Tüm Vücut (Squat + Şınav + Dumbbell Row) -> 3 set x 10 tekrar
ÇARŞAMBA : Dinlenme veya Hafif Yürüyüş
CUMA     : Tüm Vücut (Lunge + Overhead Press + Plank) -> 3 set x 12 tekrar
PAZAR    : Aktif Dinlenme (Mobilite ve Esneme)

Özet: Gelecekteki Kendinize Bir İyilik Yapın

Yaşlanmak kaçınılmaz bir biyolojik süreçtir ancak nasıl yaşlanacağımız büyük oranda bizim elimizde. Kaslarımız, bizim yaşlılık sigortamızdır. Bugün yapacağınız bilinçli bir ağırlık çalışması, 70’li yaşlarınızda merdivenleri tek başınıza çıkabilmenizi, torunlarınızla rahatça oynayabilmenizi ve metabolizmanızın tıkır tıkır çalışmasını sağlayacak.

Harekete geçmek için mükemmel anı beklemeyin. Kendi vücut ağırlığınızla yapacağınız basit bir şınav ve squat serisiyle bugün başlayın. Unutmayın, en iyi antrenman, yapılan antrenmandır!

Category: Genel | LEAVE A COMMENT
Mayıs 27 2026

Git Commit Çöplüğüne Son: CI/CD Pipeline Süreçlerini Yerelde Test Etme Yöntemleri

Yazım hatası yüzünden patlayan bir build. Arkasından gelen “fix typo” commit’i. O da yemedi; “fix syntax again”, “please work”, “test 4” ve nihayetinde “really fix this time”. Tanıdık geldi mi? Reponun commit geçmişini adeta bir çöplüğe çeviren bu döngü, yalnızca estetik bir problem değil. Her push işleminde buluttaki runner’ın ayağa kalkmasını beklemek, saatlik faturaları şişirmek ve geri bildirim döngüsünü (feedback loop) dakikalarca uzatmak demektir. Profesyonel bir SRE veya DevOps mühendisi için bu kabul edilemez bir zaman kaybıdır.

Bu pratik rehberde, commit-push-wait döngüsünden kurtulup yerel pipeline testi (local cicd testing) süreçlerini nasıl profesyonelce kurgulayacağımızı ele alacağız. GitHub Actions ve GitLab CI pipeline’larınızı, uzak sunuculara hiç dokunmadan, doğrudan kendi terminalinizde nasıl simüle edeceğinizi gerçek senaryolarla inceleyeceğiz.

Neden Yerelde Test Etmeliyiz? (The SRE Perspective)

Bunu sadece “temiz git geçmişi” motivasyonuyla açıklamıyoruz. Altında yatan asıl nedenler tamamen operasyonel verimlilik ve güvenlikle ilgilidir:

  • Hızlı Geri Bildirim Döngüsü: Buluttaki bir runner’ın kuyrukta beklemesi, imajı çekmesi ve init olması ortalama 1-3 dakika sürer. Yerelde bu süre saniyeler mertebesindedir.
  • Maliyet Optimizasyonu: GitHub Actions veya GitLab CI faturalarınızın önemli bir kısmı, aslında “deneme-yanılma” aşamasındaki başarısız run’lardan kaynaklanır.
  • Güvenli Secret Yönetimi: Yeni bir entegrasyonu denerken production secret’larını ya da hassas API anahtarlarını geçici olarak buluttaki CI ortamına eklemek her zaman güvenlik riski barındırır.

GitHub Actions’ı Yerelde Koşturmak: act

GitHub Actions workflow’larını yerel makinede çalıştırmanın fiili standardı act aracıdır. `act`, lokalinizdeki Docker daemon’ını kullanarak GitHub’ın runner ortamlarını simüle eden container’lar ayağa kaldırır ve tanımladığınız adımları bu container’lar içinde çalıştırır.

act Kurulumu ve Temel Kullanımı

Kurulumu macOS işletim sistemlerinde Homebrew ile hızlıca yapabilirsiniz:

brew install nektos/tap/act

Eğer Linux kullanıyorsanız, doğrudan binary olarak çekebilirsiniz:

curl -s https://raw.githubusercontent.com/nektos/act/master/install.sh | sudo bash

Gerçekçi Bir Senaryo: Secret’lar ve Matrix Yapıları

Diyelim ki elinizde node.js uygulamasını test eden ve deploy etmeden önce bir API anahtarına ihtiyaç duyan aşağıdaki gibi bir `.github/workflows/ci.yml` dosyanız var:

name: Node.js CI

on:
  push:
    branches: [ main ]

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [18.x, 20.x]
    steps:
      - uses: actions/checkout@v3
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node-version }}
      - run: npm ci
      - run: npm test
        env:
          DATABASE_URL: ${{ secrets.DATABASE_URL }}

Bu workflow’u yerelde çalıştırmak istediğinizde doğrudan `act` komutunu vermeniz yetmez; çünkü `secrets.DATABASE_URL` boş kalacaktır ve matrix yapısı yüzünden süreç uzayacaktır. İşte tam bu noktada profesyonel parametreler devreye giriyor.

Öncelikle bir `.secrets` dosyası oluşturun:

DATABASE_URL=mongodb://localhost:27017/test_db

Şimdi sadece Node 20 versiyonunu ve sadece `test` job’ını tetiklemek, üstelik bunu yaparken de yerel secret dosyamızı beslemek için şu komutu koşturuyoruz:

act -j test --matrix node-version:20.x --secret-file .secrets

In-depth Tip: Runner Boyutu Sorunsalı

`act` ilk çalıştığında size hangi imaj boyutunu kullanmak istediğinizi sorar (Micro, Medium, Large). Varsayılan “Micro” imaj genelde hızlı iner ancak içinde `curl`, `docker`, `aws-cli` gibi temel araçları barındırmaz. Gerçekçi bir act github actions deneyimi için en azından “Medium” imajı seçmeli veya `.actrc` dosyanıza şu custom imaj eşlemesini eklemelisiniz:

-P ubuntu-latest=catthehacker/ubuntu:act-latest

GitLab CI Pipeline’larını Yerelde Simüle Etmek

GitLab tarafında işler biraz daha karmaşıktır. Resmi `gitlab-runner exec` komutu uzun süredir “deprecated” durumdadır ve `needs`, `parent-child pipelines` veya modern `artifacts` tanımlamalarını tam olarak desteklemez. SRE topluluğu bu boşluğu doldurmak için harika bir açık kaynaklı alternatif geliştirdi: gitlab-ci-local.

gitlab-ci-local Kurulumu

NodeJS tabanlı bu CLI aracını sisteminize kurmak için NPM veya Homebrew kullanabilirsiniz:

brew install firecow/gitlab-ci-local/gitlab-ci-local

Uygulama: Kompleks Bir .gitlab-ci.yml Testi

Şöyle bir pipeline yapımız olduğunu düşünelim. Uygulamayı derliyor, artifact üretiyor ve bir sonraki stage’de bu artifact’i kullanıyor:

stages:
  - build
  - test

compile-code:
  stage: build
  image: node:20-alpine
  script:
    - npm ci
    - npm run build
  artifacts:
    paths:
      - dist/

run-unit-tests:
  stage: test
  image: node:20-alpine
  needs: ["compile-code"]
  script:
    - ls dist/
    - npm run test:unit

Bu pipeline’ı `gitlab-runner local` mantığıyla kendi makinenizde çalıştırmak için terminalden şu komutu vermeniz yeterlidir:

gitlab-ci-local

`gitlab-ci-local`, projenizin kök dizinindeki `.gitlab-ci.yml` dosyasını analiz eder, adımları sırasıyla çalıştırır, `needs` direktifine sadık kalır ve en önemlisi üretilen `dist/` klasörünü lokalinizdeki `.gitlab-ci-local/artifacts/` klasörüne otomatik olarak map eder. Böylece build artifact’lerinin bir sonraki job’a düzgün aktarılıp aktarılmadığını gözlerinizle görebilirsiniz.

Yerel GitLab Variable’larını Yönetmek

Gerçek CI ortamında GitLab UI üzerinden tanımladığınız “masked/protected” değişkenleri yerelde taklit etmek için `.gitlab-ci-local-variables.yml` adında bir dosya oluşturabilirsiniz:

STAGING_KUBE_TOKEN: "kube-token-12345"
DB_PASSWORD: "super-secret-password"

Bu dosya `.gitignore` listenizde olmalıdır. Araç, bu değişkenleri otomatik olarak okuyacak ve container’ların içerisine enjekte edecektir.

Docker-in-Docker (DinD) ve Soket Paylaşımı Çıkmazı

Yerel pipeline testlerinde en çok baş ağrıtan konulardan biri, pipeline adımının kendisinin de Docker ayağa kaldırmaya çalışmasıdır (örneğin, entegrasyon testleri için geçici bir DB container’ı başlatmak veya imajı `docker build` ile derlemek).

Eğer `act` kullanıyorsanız ve job’ınız içinde Docker komutları koşturacaksanız, lokalinizdeki Docker soketini container içine mount etmeniz gerekir:

act --bind-workdir -v /var/run/docker.sock:/var/run/docker.sock

Benzer şekilde, `gitlab-ci-local` kullanırken `services: – docker:dind` tanımınız varsa, aracın konfigürasyonunda yerel soketin paylaşıldığından emin olun. Bu sayede iç içe (nested) container yapısı yerine, tüm container’ların sizin host Docker daemon’ınız üzerinde “sibling” (kardeş) container’lar olarak ayağa kalkmasını sağlarsınız. Bu, hem disk alanından tasarruf sağlar hem de performansı katlar.

Özet ve Best Practice’ler

Süreci bir standarta oturtmak adına ekibinize şu kuralları aşılamanızı öneririz:

  1. Pre-commit Hook Entegrasyonu: Kritik CI script değişikliklerinde, geliştiricilerin lokalde en azından bir `act` veya `gitlab-ci-local` kuru testi yapmasını zorunlu tutun.
  2. Maksimum İmaj Önbellekleme (Caching): Lokal testlerin hızlı olması için Docker imajlarını yerelde optimize edin. Sık kullanılan base imajları (`node`, `python`, `golang` alpine versiyonları) önceden `docker pull` ile çekin.
  3. Lokal .env/.secrets Dosyalarını Asla Push Etmeyin: Güvenlik en katı kuraldır. `.gitignore` dosyanızda yerel pipeline testlerinde kullandığınız tüm taklit secret dosyalarının tanımlı olduğundan emin olun.

Geliştirme hızınızı (velocity) artırmak ve CI bütçelerini optimize etmek tamamen feedback loop süresini kısaltmaktan geçiyor. Araçlarınızı doğru yapılandırın, lokal gücü kullanın ve o commit çöplüğünü tarihe gömün.

Category: Genel | LEAVE A COMMENT
Mayıs 27 2026

Baharatların Dansı: Evde Restoran Usulü Hint Usulü Butter Chicken

Dışarıda yediğiniz o yumuşacık, sosu ekmek banmalık Hint yemekleri gözünüzü korkutmasın. Bugün mutfakta kendinizi bir şef gibi hissettirecek, sırrı marinasyonda saklı nefis bir butter chicken tarifi ile karşınızdayız. Giriş seviyesinde bir yemek meraklısı olsanız bile, doğru adımlarla evde Hint mutfağı rüzgarları estirmek sandığınızdan çok daha kolay ve kesinlikle sipariş vermekten daha keyifli. Hadi, baharatların o büyüleyici dünyasına adım atalım ve mutfağı mis gibi kokutalım!

Porsiyon: 4 Kişilik
Hazırlık Süresi: 20 dakika (Marinasyon için ekstra minimum 30 dakika)
Pişirme Süresi: 25 dakika

Neden Butter Chicken? (Murgh Makhani)

Butter chicken, ya da orijinal adıyla Murgh Makhani, Hint mutfağının dünyaya sunduğu en büyük hediyelerden biri. Neden mi bu kadar seviliyor? Çünkü acı ile kremsi dokunun, asit ile yağın mükemmel dengesini sunuyor. Tavuklar yoğurtla marine edildiği için lokum gibi yumuşuyor, sosundaki tereyağı ve krema ise baharatların o keskin köşelerini yumuşatarak damakta adeta bir şölen yaratıyor. Bu dengeli lezzet profili, onu Hint yemekleri dünyasına giriş yapmak isteyenler için en ideal tarif haline getiriyor.

Gerekli Malzemeler

Malzeme listesi gözünüzü korkutmasın; çoğu zaten dolabınızda olan, bulamadıklarınızı da kolayca ikame edebileceğiniz şeyler. Örneğin kaju alerjiniz varsa kullanmayabilir, tavuk but yerine tavuk göğsü de tercih edebilirsiniz.

Marinasyon İçin:

  • Tavuk: 700 gram kemiksiz tavuk but (göğüs eti de olur ama but eti çok daha sulu ve lezzetli kalacaktır)
  • Yoğurt: 4 yemek kaşığı süzme yoğurt (tavuğu yumuşatan sihirli asit kaynağımız)
  • Sarımsak ve Zencefil: 1’er yemek kaşığı rendelenmiş (Hint yemeklerinin olmazsa olmaz ikilisi)
  • Limon suyu: 1 yemek kaşığı
  • Baharatlar: 1 tatlı kaşığı toz kırmızı biber, 1 çay kaşığı zerdeçal, 1 tatlı kaşığı garam masala, 1 çay kaşığı tuz

Sos İçin (Gravy):

  • Tereyağı: 2 yemek kaşığı (veya tereyağının Hint versiyonu olan ghee)
  • Sıvı yağ: 1 yemek kaşığı (tereyağının yanmasını önlemek için)
  • Soğan: 1 adet büyük boy (piyazlık doğranmış)
  • Domates: 4 adet rendelenmiş (veya pratiklik açısından 1 kutu domates püresi)
  • Kaju: 10-12 adet çiğ kaju (sosu koyulaştırır ve orijinal bir kremsilik katar, yoksa yerine krema miktarını artırabilirsiniz)
  • Krema: Yarım su bardağı sıvı krema (heavy cream)
  • Baharatlar: 1 tatlı kaşığı toz kırmızı biber, 1 tatlı kaşığı garam masala, 1 çay kaşığı kimyon, 1 tatlı kaşığı şeker (asiditeyi dengelemek için)

Adım Adım Butter Chicken Yapılışı

Adımları sırayla takip ettiğinizde her şeyin ne kadar pratik ilerlediğini göreceksiniz. İşte evde Hint mutfağı deneyiminin aşamaları:

  1. Tavukları Marine Edin: Doğranmış tavukları yoğurt, sarımsak, zencefil, limon suyu ve baharatlarla iyice harmanlayın. Buzdolabında en az 30 dakika (vaktiniz varsa 2 saat) dinlenmeye bırakın.
  2. Tavukları Mühürleyin: Geniş bir tavada 1 yemek kaşığı tereyağı ve sıvı yağı kızdırın. Tavukları yüksek ateşte, dışı hafifçe karamelize olana kadar (yaklaşık 5-7 dakika) pişirin ve kenara alın. (İçinin tam pişmesine gerek yok, sosta pişecek).
  3. Sos Tabanını Hazırlayın: Aynı tavaya biraz daha yağ ekleyin. Soğanları yumuşayana kadar soteleyin. Ardından sarımsak, zencefil ve kalan baharatları ekleyip kokusu çıkana kadar 1-2 dakika kavurun.
  4. Domates ve Kajuyu Ekleyin: Domates püresini ve kajuları tavaya ilave edin. Kısık ateşte domatesler suyunu çekip koyulaşana kadar yaklaşık 10 dakika pişmeye bırakın.
  5. Pürüzsüzleştirin (En Önemli Adım!): Hazırladığınız bu sos karışımını ocaktan alın. El blenderı yardımıyla tamamen pürüzsüz, kadife gibi bir kıvama gelene kadar çekin. (Gerekirse sosu açmak için yarım çay bardağı sıcak su ekleyebilirsiniz).
  6. Buluşma Zamanı: Pürüzsüz sosu tekrar tavaya alın. Üzerine mühürlediğiniz tavukları ekleyin. Kısık ateşte tavuklar tamamen yumuşayana kadar 8-10 dakika pişirin.
  7. Son Dokunuş: Ocağın altını kapatın. Sıvı kremayı ve kalan tereyağını ekleyip karıştırın. İşte o muhteşem turuncu renk ve ipeksi doku hazır!

İşin Sırrı: Butter Chicken Püf Noktaları

Püf noktası: Butter chicken’ın o restoranlardaki derin ve hafif tütsü aromalı tadını yakalamak istiyorsanız, tavukları tavada pişirirken hafifçe “yakmaktan” korkmayın. Tavukların üzerindeki o kahverengi-siyahımsı karamelize noktalar (char), sosa otantik bir lezzet katacaktır. Ayrıca sosu blenderdan geçirdikten sonra ince bir süzgeçten süzerseniz, tam anlamıyla ipeksi (velvety) bir kıvama ulaşırsınız.

Yanına yapacağınız tane tane dökülen bir basmati pirinç pilavı veya sıcacık bir naan (Hint ekmeği) ile bu akşam kendinizi Yeni Delhi’de hissedeceksiniz. Şimdiden ellerinize sağlık ve afiyet olsun!

Category: Genel | LEAVE A COMMENT
Mayıs 26 2026

Bernina Express ve Ötesi: İsviçre Alpleri’ni Trenle Keşfetme Rehberi

İsviçre denince akla hemen cep yakan fiyatlar, steril sokaklar ve lüks saatler gelir. Ancak Alplerin kucağında, pencereden süzülen kar manzaraları eşliğinde yapacağınız bir isvicre tren turu, hayatınızda bir kez yaşamanız gereken o benzersiz, masalsı deneyimlerden biridir. Bu maceranın tam kalbinde ise kırmızı vagonlarıyla dağları aşan, UNESCO Dünya Mirası listesindeki ünlü bernina express yer alıyor. Peki, bu rüya rotayı cebimizi tamamen boşaltmadan, turistik klişelere teslim olmadan bir lokal gibi nasıl deneyimleriz? Gelin, tren seyahati tutkunlarının kutsal kasesi olan bu yola birlikte çıkalım ve Alplerin gerçek yüzünü keşfedelim.

Landwasser’den Poschiavo’ya: Bir Trenden Fazlası

Chur istasyonundan hareket ettiğinizde, modern dünyanın gürültüsü ve hızı yavaşça geride kalır. Tren, yaklaşık dört saatlik bir yolculukla kuzeydeki heybetli buzullardan güneydeki İtalya sınırına, Tirano’nun palmiye ağaçlarına doğru süzülür. Bu rotanın en ikonik anı, şüphesiz 65 metre yükseklikteki Landwasser Viaduct üzerinden geçiş anıdır. Lokomotif karanlık tünele girmeden hemen önce, tren penceresinden dışarıya süzülen o kırmızı kavis, size neden otoyolları değil de demir ağları seçtiğinizi fısıldar. Bu anı yaşarken acele etmeyin, sadece akışa ve mühendisliğin doğayla uyumuna odaklanın.

Yolculuk ilerledikçe vadi daralır, dağlar üzerinize doğru geliyormuş gibi hissettirir. Ospizio Bernina istasyonuna vardığınızda, tren yolculuğunun en yüksek noktasına, tam 2253 metreye ulaşırsınız. Burası adeta başka bir gezegendir. Lago Bianco (Beyaz Göl) kışın tamamen buzla kaplıyken, bahar aylarında adını aldığı o sütlü beyaz tonuyla parıldar. Tren buradan sonra dik bir inişe geçer. Sadece bir saat içinde, karların içinden sıyrılıp palmiye ağaçlarının ve İtalyan mimarisinin hakim olduğu Tirano’ya inersiniz. İklimin ve kültürün bu kadar kısa sürede bu denli radikal bir şekilde değişmesi, insanda adeta bir zaman makinesinde seyahat ediyormuş hissi uyandırır.

Bütçe Dostu Devrim: Bölgesel Tren Sırrı

Gelelim kertenkerem.net usulü en önemli bütçe tüyomuza. Bernina Express olarak adlandırılan o meşhur kırmızı, panoramik pencereli trenler harikadır, ancak koltuk rezervasyon ücreti adı altında ekstra bir bedel ödemeniz gerekir. Bu bedel sezonuna göre 20 ile 26 CHF arasında değişir. Üstelik bu vagonların pencereleri açılmaz, bu da fotoğraf çekerken camdaki yansımalarla boğuşacağınız anlamına gelir. Seyahati daha samimi kılmak ve bütçeyi korumak için aynı rayları kullanan sarı logolu RhB bölgesel trenlerini tercih edin.

Bölgesel trenlerde rezervasyon ücreti ödemezsiniz, kalabalıktan uzak kalırsınız ve en önemlisi, pencereleri aşağı kaydırıp Alplerin o buz gibi, taze havasını içinize çekerek temiz fotoğraflar çekebilirsiniz. Aynı manzarayı, aynı raylar üzerinde yarı fiyatına ve çok daha özgürce izlemek işte bu kadar basittir.

**Kertenkerem Tüyosu:** Bölgesel trenlerde seyahat ederken trenin en arkasındaki vagona geçmeye çalışın. Virajları dönerken trenin gövdesini ve Alplerin manzarasını aynı kadraja almak, bölgesel trenlerin açılan pencereleri sayesinde çok daha kolaydır. Üstelik bu trenler saat başı çalışır, yani dilediğiniz istasyonda inip bir sonrakine binebilirsiniz.

Klişelerden Uzak İsviçre Gezilecek Yerler

Çoğu turist St. Moritz’de inip pahalı kafelerde vakit geçirmeyi tercih eder. Ancak gerçek bir gezgin için isvicre gezilecek yerler listenin en değerli incileri, trenin durduğu o küçük ve sessiz istasyonlarda saklıdır. Örneğin Alp Grüm istasyonu bunlardan biridir. Deniz seviyesinden 2091 metre yükseklikte yer alan bu istasyona sadece trenle ya da zorlu bir yürüyüş rotasıyla ulaşabilirsiniz. İstasyonun hemen yanındaki taş binada yer alan restoranda sıcak bir çorba içip Palü Buzulu’nu izlemek, lüks bir kayak merkezinde harcayacağınız zamandan çok daha değerlidir.

Yolculuğun devamında karşınıza çıkan, İtalyanca konuşulan Poschiavo kasabası ise taş evleri ve dar sokaklarıyla size İsviçre’de olduğunuzu unutturacak bir sakinlik sunar. Burada büyük turist otobüsleri göremezsiniz; sadece yerel halkın sakin yaşamına tanıklık eder, meydandaki küçük fırından taze bir hamur işi alıp nehir kenarında yiyebilirsiniz. İşte gerçek İsviçre deneyimi tam olarak burada başlar.

Pratik Bilgiler ve Rezervasyon Tüyoları

Bu rüya gibi tren seyahati için planlama yaparken biletinizi son dakikaya bırakmamalısınız. İsviçre’de ulaşım pahalıdır ancak sistemi çözerseniz bütçenizi koruyabilirsiniz. Chur ile Tirano arasında tek yön bilet fiyatı normal şartlarda yaklaşık 63 CHF civarındadır. Ancak İsviçre Federal Demiryolları mobil uygulamasını indirip bir-iki ay öncesinden “Saver Day Pass” kovalarsanız, tüm gün geçerli sınırsız ulaşım biletini 52 CHF gibi çok daha uygun bir fiyata yakalayabilirsiniz. Eğer ülkede birkaç gün geçirecekseniz ve farklı şehirlere de seyahat edecekseniz, Swiss Travel Pass almak en mantıklı çözümdür; çünkü bu kart bölgesel trenleri tamamen ücretsiz hale getirir.

**Zamanlama Tüyosu:** En güzel manzaralar için trenin gidiş yönüne göre sağ tarafına oturmaya özen gösterin. Alp Grüm ve Lago Bianco manzaraları sağ tarafta çok daha büyüleyicidir. Seyahatinizi mayıs veya ekim aylarında planlarsanız, hem karlı zirveleri hem de yeşeren vadileri aynı anda görebilirsiniz.

Yolculuğa Hazırlık: Yanınıza Ne Almalı?

Alplerde hava durumu hızla değişebilir. Vadide sıcaklık 20 dereceyken, zirveye çıktığınızda kendinizi sıfır derecede bulabilirsiniz. Bu yüzden yanınıza mutlaka katman katman giyebileceğiniz kıyafetler alın. Ayrıca tren istasyonlarındaki marketler pahalı olduğundan, yolculuk öncesinde büyük süpermarketlerden sandviç, yerel İsviçre çikolatası ve suyunuzu alıp sırt çantanıza atmak bütçenizi büyük ölçüde rahatlatacaktır. Kendi pikniğinizi dağların zirvesinde yapmak, en lüks restorandan daha keyiflidir.

Sonuçta İsviçre Alpleri’ni trenle keşfetmek sadece bir noktadan diğerine gitmek değil, yolun kendisini bir yaşam biçimi haline getirmektir. Pencereden dışarı bakarken zamanın nasıl yavaşladığını hissedecek, hız çağında yavaşlamanın lüksünü tadacaksınız. Valizinizi hazırlayın, biletinizi erkenden alın ve Alplerin kalbine doğru giden o demir yollarının sesine kulak verin.

Category: Genel | LEAVE A COMMENT
Mayıs 22 2026

HAProxy ile Yüksek Erişilebilirlik: Keepalived ve Health Check

Modern mikroservis mimarilerinde veya yüksek trafikli web uygulamalarında kesintisiz hizmet sunmak artık bir lüks değil, zorunluluk. Tam da bu noktada, haproxy ve keepalived ikilisi, linux sunucularınız üzerinde kurabileceğiniz, kurumsal sınıfta, maliyetsiz ve son derece güvenilir bir aktif-pasif ha (high availability) loadbalancer çözümü olarak imdadımıza yetişiyor. Peki ama bu iki canavarı prod ortamında birbirine küstürmeden, arkadaki servislerin sağlık durumlarına (health check) ve gelen isteğin içeriğine (ACL) göre nasıl kusursuzca dans ettireceğiz? Bu yazıda lafı hiç dolandırmadan, doğrudan production ortamında hırpalanmış senaryolardan süzülen pratik bir mimariyi ayağa kaldıracağız.

Neden Sadece HAProxy Yetmiyor? (SPOF Nedir?)

HAProxy, performansına ve stabilitesine şapka çıkardığımız harika bir load balancer. Ancak ne kadar güçlü olursa olsun, tek bir sunucu üzerinde çalıştığı sürece sisteminizde bir SPOF (Single Point of Failure) yani tek hata noktası oluşturur. HAProxy’nin üzerinde çalıştığı Linux sunucunun donanımı çökerse, network kartı yanarsa ya da kernel panik yaparsa tüm sisteminiz karanlığa gömülür.

İşte bu riski bertaraf etmek için Keepalived devreye giriyor. Keepalived, VRRP (Virtual Router Redundancy Protocol) protokolünü kullanarak iki farklı load balancer sunucusunun tek bir Sanal IP (Virtual IP – VIP) arkasında çalışmasını sağlar. Aktif olan sunucu çöktüğünde, pasif durumdaki yedek sunucu VIP’yi milisaniyeler içinde üzerine alır. Kullanıcılar bu failover sürecini ruhları bile duymadan atlatırlar.

Altyapı Hazırlığı ve Olmazsa Olmaz Kernel Parametresi

Kuruluma başlamadan önce topolojimizi netleştirelim. Elimizde iki adet Linux (Ubuntu/Debian tabanlı kabul ediyoruz) sunucu olduğunu varsayalım:

  • LB01 (Master): 192.168.1.10
  • LB02 (Backup): 192.168.1.11
  • Sanal IP (VIP): 192.168.1.100

Şimdi kıdemli bir sistemcinin asla atlamayacağı o kritik kernel ayarına gelelim: net.ipv4.ip_nonlocal_bind. Varsayılan olarak Linux, sunucu üzerinde fiziksel olarak tanımlanmamış bir IP adresine servislerin bind olmasını (yani o IP’yi dinlemesini) engeller. VIP, pasif sunucuda o an aktif olmadığı için backup sunucudaki HAProxy servisi başlatılamaz ve çöker. Bunun önüne geçmek için her iki sunucuda da şu komutu koşturuyoruz:

echo "net.ipv4.ip_nonlocal_bind=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

Bu sihirli dokunuş sayesinde HAProxy, sunucuda henüz tanımlanmamış olan 192.168.1.100 IP’sini hiç çekinmeden dinlemeye başlayacaktır.

Keepalived ile Aktif-Pasif VIP Kurulumu

Her iki sunucuya da keepalived paketini kuralım:

sudo apt update && sudo apt install keepalived -y

Şimdi konfigürasyon zamanı. En kritik nokta, master sunucu çöktüğünde VIP’nin pasif sunucuya geçmesi, ancak master geri geldiğinde (eğer istemiyorsak) gereksiz yere VIP’yi geri alıp ufak da olsa bir kesinti yaratmamasıdır. Buna “non-preemptive” yapılandırma denir. Ancak biz bu örnekte klasik aktif-pasif öncelik yapısını kuracağız.

Master (LB01) Konfigürasyonu

/etc/keepalived/keepalived.conf dosyasını oluşturun ve aşağıdaki gibi düzenleyin:

vrrp_script check_haproxy {
    script "killall -0 haproxy" # HAProxy çalışıyor mu kontrol et
    interval 2                  # Her 2 saniyede bir çalıştır
    weight 2                    # Başarılıysa önceliğe (priority) 2 ekle
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0              # Network arayüzünüzün adı (ip a ile kontrol edin)
    virtual_router_id 51        # İki sunucuda da AYNI olmalı
    priority 101                # Master daha yüksek önceliğe sahip
    advert_int 1

    authentication {
        auth_type PASS
        auth_pass GizliSifre123  # İki sunucuda da aynı olmalı
    }

    virtual_ipaddress {
        192.168.1.100/24         # Paylaşılan Sanal IP (VIP)
    }

    track_script {
        check_haproxy
    }
}

Backup (LB02) Konfigürasyonu

Backup sunucumuzda ise dosya neredeyse aynıdır, sadece state ve priority değerleri değişir:

vrrp_script check_haproxy {
    script "killall -0 haproxy"
    interval 2
    weight 2
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 100                # Master'dan daha düşük
    advert_int 1

    authentication {
        auth_type PASS
        auth_pass GizliSifre123
    }

    virtual_ipaddress {
        192.168.1.100/24
    }

    track_script {
        check_haproxy
    }
}

Konfigürasyonları kaydettikten sonra her iki sunucuda da servisi başlatalım:

sudo systemctl enable --now keepalived

Eğer her şey yolunda gittiyse, LB01 üzerinde ip a show eth0 komutunu verdiğinizde secondary IP olarak 192.168.1.100 adresini görmelisiniz. LB02’de ise bu IP görünmemelidir.

HAProxy Kurulumu ve Sağlık Kontrolü (Health Check) Sanatı

Sıra geldi yük dengeleme katmanımıza. HAProxy’yi kuralım:

sudo apt install haproxy -y

Bir load balancer’ı akıllı kılan şey, arkasındaki uygulama sunucularının (backend) gerçekten yaşayıp yaşamadığını bilmesidir. Sadece TCP portunun açık olması (Layer 4) uygulamanın sağlıklı çalıştığı anlamına gelmez. Uygulama veritabanına bağlanamadığı için HTTP 500 hatası veriyor olabilir ama TCP portu hala ayaktadır. Bu yüzden her zaman HTTP tabanlı (Layer 7) health check tercih etmelisiniz.

Gelin, hem gelişmiş health check mekanizmasını hem de VIP binding konseptini barındıran örnek bir /etc/haproxy/haproxy.cfg dosyası hazırlayalım:

global
    log /dev/log local0
    log /dev/log local1 notice
    chroot /var/lib/haproxy
    user haproxy
    group haproxy
    daemon

defaults
    log     global
    mode    http
    option  httplog
    option  dontlognull
    timeout connect 5000ms
    timeout client  50000ms
    timeout server  50000ms

frontend http_front
    bind 192.168.1.100:80 # Sadece VIP üzerinden gelen istekleri dinle
    mode http
    default_backend app_backend

backend app_backend
    mode http
    balance roundrobin
    
    # Layer 7 Health Check Yapılandırması
    option httpchk GET /healthz HTTP/1.1\r\nHost:\ myapp.local
    http-check expect status 200
    
    # Backend Sunucuları
    server app01 192.168.1.20:8080 check inter 3000 rise 2 fall 3
    server app02 192.168.1.21:8080 check inter 3000 rise 2 fall 3

Burada Neler Döndü? (Detaylı “Neden” Analizi)

  • bind 192.168.1.100:80: HAProxy’ye sadece VIP adresini dinlemesini söyledik. Bu, trafiğin kontrolsüz şekilde doğrudan nodeların kendi IP’leri üzerinden akmasını engeller.
  • option httpchk GET /healthz: HAProxy, backend sunucularına her 3 saniyede bir (inter 3000) HTTP GET isteği gönderir.
  • http-check expect status 200: Gelen yanıtın HTTP 200 OK olması durumunda sunucu “sağlıklı” kabul edilir.
  • rise 2 fall 3: Bir sunucu ardışık 3 kez başarısız health check yanıtı verirse (fall), trafik ona gönderilmez (out of rotation). Ne zaman ki ardışık 2 başarılı yanıt verir (rise), o zaman tekrar gruba dahil edilir.

Gelişmiş ACL (Access Control List) Tabanlı Routing

Prod ortamlarında genellikle tek bir domain arkasında birden fazla mikroservis barındırırız. Örneğin /api ile başlayan isteklerin API servislerine, statik dosyaların ise başka bir backende gitmesini isteriz. HAProxy’nin ACL mekanizması bu konuda tam bir canavardır.

Aşağıdaki konfigürasyon örneğinde, path ve domain bazlı yönlendirmeyi nasıl yapacağımızı görelim:

frontend http_front_advanced
    bind 192.168.1.100:80
    mode http

    # ACL Tanımları
    acl is_api path_beg -i /api
    acl is_static path_end -i .jpg .png .css .js
    acl host_admin hdr_beg(host) -i admin.

    # Yönlendirme Kuralları (Routing Rules)
    use_backend api_backend if is_api
    use_backend static_backend if is_static
    use_backend admin_backend if host_admin
    
    # Varsayılan Backend
    default_backend web_backend

backend web_backend
    server web01 192.168.1.30:80 check

backend api_backend
    server api01 192.168.1.40:8080 check

backend static_backend
    server storage01 192.168.1.50:80 check

backend admin_backend
    server admin01 192.168.1.60:80 check

Bu yapıyla birlikte, tek bir load balancer IP’si üzerinden gelen istekleri, url path’ine veya HTTP host header’ına göre ayıklayıp tamamen farklı sunucu gruplarına sıfır performans kaybıyla dağıtabiliyoruz.

Failover Testi: Fişi Çektiğimizde Ne Oluyor?

Kurulumumuzu tamamladık ve servislerimizi başlattık (sudo systemctl enable --now haproxy). Peki sistemimiz gerçekten yüksek erişilebilir mi? Bunu test etmenin en vahşi (ve keyifli) yolu canlı ortamda simülasyon yapmaktır.

Öncelikle master sunucumuzda (LB01) IP adresini izleyelim:

ip addr show eth0

Burada 192.168.1.100 IP’sini görmeliyiz. Şimdi master sunucu üzerinde HAProxy servisini durdurarak Keepalived’ın bu durumu fark etmesini sağlayalım:

sudo systemctl stop haproxy

Hemen ardından pasif sunucuya (LB02) geçip logları izleyelim:

tail -f /var/log/syslog | grep Keepalived

Loglarda şuna benzer bir satır görmelisiniz:

Keepalived_vrrp[1234]: VRRP_Instance(VI_1) Entering MASTER STATE

Ve ip addr show eth0 çalıştırdığınızda, VIP’nin saniyeden daha kısa bir sürede LB02’ye göç ettiğini göreceksiniz. Kullanıcılarınız, veritabanına veri yazmaya ve web sitenizde gezinmeye kesintisiz olarak devam edecektir. İşte gerçek HA kalitesi!

Sonuç ve Pro-Tip

HAProxy ve Keepalived ikilisi, karmaşık cloud mimarilerine veya pahalı donanımsal load balancer cihazlarına ihtiyaç duymadan, Linux’un gücüyle scale olabilen harika bir çözümdür.

Son bir prod tavsiyesi: Keepalived loglarını mutlaka merkezi bir izleme aracına (Elasticsearch, Loki vb.) yönlendirin ve VIP geçişlerinde (state transitions) ekibinize Slack veya Teams üzerinden alert atacak bir script tetikleyin (bunun için Keepalived’ın notify_master ve notify_backup direktiflerini araştırabilirsiniz). VIP’nin sessiz sedasız sürekli yer değiştirmesi, altyapınızda sinsi bir network dalgalanması olduğunun habercisi olabilir.

Category: Genel | LEAVE A COMMENT
Mayıs 22 2026

Zabbix + Alertmanager: PagerDuty ve Slack Entegrasyonu

Gece saat 03:00. Cep telefonunuz ardı ardına titriyor. Zabbix size “CPU usage high on prod-db-01” başlıklı tam 142 adet SMS göndermiş. Gözlerinizi oğuşturarak bilgisayarı açıyorsunuz ve durumun aslında sadece planlı bir veritabanı yedeğinden (backup job) ibaret olduğunu, diskin veya veritabanının çökmediğini görüyorsunuz. Bu esnada sinirden köpürürken kendinize şu soruyu soruyorsunuz: “Neden bu alarmları gruplayamadım? Neden nöbetçi arkadaşım yerine tüm ekip ayağa kalktı?”

İşte tam bu noktada, geleneksel izleme canavarımız zabbix ile modern bulut dünyasının alarm yönetim standardı olan alertmanager‘ı evlendirmenin vakti gelmiş demektir. Bu makalede, Zabbix’in topladığı metrik ve trigger’ları Alertmanager’a köprüleyecek, oradan da slack ve pagerduty entegrasyonları ile akıllı, gürültüsüz ve insan odaklı bir oncall yönetim yapısı kuracağız.

Neden Doğrudan Zabbix Değil de Alertmanager?

Zabbix, metrik toplama (polling), agent yönetimi ve esnek trigger tanımlama konularında harika bir araçtır. Ancak iş alarm yönetimine (alert routing, deduplication, inhibition ve silencing) geldiğinde Zabbix’in aksiyon (Action) arayüzü hantal kalır. GitOps felsefesine uygun değildir, sürüm kontrolü (version control) zordur ve karmaşık eskalasyon senaryolarında konfigürasyon cehennemine dönüşebilir.

Alertmanager ise Prometheus ekosisteminin kalbidir ancak sadece Prometheus ile sınırlı olmak zorunda değildir. Bize sunduğu avantajlar şunlardır:

  • Deduplication (Tekilleştirme): Aynı anda patlayan 50 benzer alarmı tek bir Slack mesajında birleştirir.
  • Inhibition (Bastırma): Eğer bir veri merkezi (datacenter) çöktüyse, o veri merkezinin içindeki 100 makine için “Node Down” alarmı göndermez; sadece “Datacenter Offline” alarmını geçirir, diğerlerini bastırır.
  • Dynamic Routing (Dinamik Yönlendirme): Alarma basılan etiketlere (labels) göre alarmı anında doğru ekibe (DBA, Network, Frontend) yönlendirir.

Adım 1: Zabbix Webhook ile Alertmanager API Köprüsü Kurmak

İlk yapmamız gereken iş, Zabbix’te bir trigger tetiklendiğinde bunu Alertmanager’ın /api/v2/alerts endpoint’ine gönderecek bir “Media Type” tanımlamaktır. Alertmanager, kendisine gönderilen JSON payload’unda belirli standartlar bekler.

Zabbix arayüzünde Administration -> Media Types sekmesine gidin ve “Create media type” butonuna tıklayın. Tipi Webhook olarak seçin ve aşağıdaki parametreleri ekleyin:

// Zabbix Webhook Script içeriği
try {
    var params = JSON.parse(value),
        req = new HttpRequest(),
        payload = [];

    if (typeof params.AlertmanagerURL === 'undefined') {
        throw 'AlertmanagerURL parametresi eksik.';
    }

    // Alertmanager API v2 formatı
    var alert = {
        "labels": {
            "alertname": params.AlertName,
            "severity": params.Severity,
            "instance": params.HostName,
            "service": params.Service || "infrastructure",
            "environment": params.Environment || "production"
        },
        "annotations": {
            "summary": params.TriggerDescription,
            "value": params.TriggerValue,
            "zabbix_url": params.ZabbixURL + "/tr_events.php?triggerid=" + params.TriggerID
        }
    };

    // Zabbix alarm durumuna göre durumu eşle (Eğer OK ise çözüldü olarak gönder)
    if (params.TriggerStatus === 'OK') {
        alert["endsAt"] = new Date().toISOString();
    } else {
        alert["startsAt"] = new Date().toISOString();
    }

    payload.push(alert);

    req.addHeader('Content-Type: application/json');
    var response = req.post(params.AlertmanagerURL + '/api/v2/alerts', JSON.stringify(payload));

    if (req.getStatus() !== 200 && req.getStatus() !== 201) {
        throw 'HTTP hatası: ' + req.getStatus() + '\nResponse: ' + response;
    }

    return 'OK';
} catch (error) {
    Zabbix.log(3, 'Alertmanager webhook hatası: ' + error);
    throw error;
}

Bu JS kodu, Zabbix trigger’ı tetiklendiğinde ya da çözüldüğünde (OK durumuna geçtiğinde) Alertmanager’a RFC3339 formatında zaman damgasıyla birlikte durumu iletir. Böylece Alertmanager alarmın çözüldüğünü (resolved) anlar ve Slack/PagerDuty üzerindeki açık alarmı otomatik olarak kapatır.

Adım 2: Alertmanager Konfigürasyonu (`alertmanager.yml`)

Şimdi Alertmanager tarafında bu alarmları nasıl karşılayacağımızı ve nereye yönlendireceğimizi tanımlayalım. production ortamlarında genellikle kritik alarmların PagerDuty’ye (ve dolayısıyla nöbetçi mühendisin telefonuna), uyarı seviyesindeki alarmların ise sadece Slack kanalına gitmesini isteriz.

global:
  resolve_timeout: 5m

route:
  group_by: ['alertname', 'instance', 'environment']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 4h
  receiver: 'slack-default'
  routes:
    # Kritik üretim alarmları hem Slack'e hem PagerDuty'ye gitsin
    - match:
        severity: 'disaster'
        environment: 'production'
      receiver: 'pagerduty-critical'
      continue: true
    
    # Tüm üretim alarmları Slack kanalına düşsün
    - match:
        environment: 'production'
      receiver: 'slack-production'

receivers:
- name: 'slack-default'
  slack_configs:
  - api_url: 'https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX'
    channel: '#ops-alerts-test'
    send_resolved: true
    text: "Alarm: {{ .CommonAnnotations.summary }}\nSeverity: {{ .CommonLabels.severity }}\nHost: {{ .CommonLabels.instance }}"

- name: 'slack-production'
  slack_configs:
  - api_url: 'https://hooks.slack.com/services/T00000000/B00000000/YYYYYYYYYYYYYYYYYYYYYYYY'
    channel: '#prod-alerts'
    send_resolved: true
    title: "[{{ .Status | toUpper }}] {{ .CommonLabels.alertname }}"
    text: "Host: {{ .CommonLabels.instance }}\nDetay: {{ .CommonAnnotations.summary }}\nZabbix Linki: {{ .CommonAnnotations.zabbix_url }}"

- name: 'pagerduty-critical'
  pagerduty_configs:
  - service_key: 'YOUR_PAGERDUTY_INTEGRATION_KEY_HERE'
    severity: 'critical'
    send_resolved: true
    client: 'Alertmanager'
    client_url: 'https://alertmanager.kertenkerem.net'
    description: "{{ .CommonAnnotations.summary }} - Host: {{ .CommonLabels.instance }}"

Adım 3: PagerDuty Üzerinde Akıllı On-Call ve Eskalasyon Politikaları

Alertmanager entegrasyonunu tamamladıktan sonra topu pagerduty tarafına atıyoruz. PagerDuty üzerinde bir servis (Service) oluşturup entegrasyon tipini “Prometheus/Alertmanager” olarak seçtiğinizde size yukarıdaki YAML dosyasında kullandığımız service_key (Integration Key) değerini verecektir.

Ancak iş sadece entegrasyonla bitmiyor. Gerçek bir oncall kültüründe şu üç yapıyı kurmanız gerekir:

1. Schedules (Nöbet Takvimleri)

Haftalık rotasyonlar tanımlayın. Örneğin, her Salı günü saat 09:00’da nöbet bir sonraki mühendise devretsin. PagerDuty üzerinde Primary ve Secondary (yedek) olmak üzere iki farklı takvim oluşturmak hayat kurtarır. Eğer Primary nöbetçisi o an ulaşılamaz durumdaysa (örneğin uçaktaysa), sistem otomatik olarak yedek nöbetçiyi arar.

2. Escalation Policies (Eskalasyon Politikaları)

Alarmların sahipsiz kalmaması için eskalasyon zinciri şarttır. Örnek bir kurumsal politika şu şekilde olmalıdır:

  • Adım 1: Alarm tetiklendiğinde o anki nöbetçiyi (Primary) ara ve SMS gönder. (0. dakika)
  • Adım 2: Eğer 10 dakika içinde “Acknowledge” (onay) gelmezse, yedek nöbetçiyi (Secondary) ara. (10. dakika)
  • Adım 3: Eğer hala ses çıkmıyorsa, tüm DevOps ekibine push notification at ve takım liderini devreye sok. (20. dakika)

3. Slack Entegrasyonu ve ChatOps

PagerDuty Slack uygulamasını kurarak, Slack kanalı üzerinden tek tıkla alarmı üstlenebilir (Acknowledge) veya çözebilirsiniz (Resolve). Bu, gece yarısı telefondan PagerDuty uygulamasına girmeye çalışırken harcayacağınız 30 saniyeyi size geri kazandırır.

Alert Fatigue (Alarm Yorgunluğu) ile Savaşmak

Sistemi kurduk ancak her gün 500 defa çalan bir pager sistemi, bir süre sonra mühendislerin uyarıları görmezden gelmesine (alert fatigue) sebep olur. Bunu engellemek için şu taktikleri uygulayın:

  • Sadece aksiyon alınabilir alarmları PagerDuty’ye gönderin: “Disk doluluğu %81 oldu” bir PagerDuty alarmı değildir, sadece Slack’e gitmelidir. Ancak “Disk doluluğu %95 ve 10 dakika içinde tamamen dolacak” alarmı nöbetçiyi yataktan kaldırmalıdır.
  • Inhibit Rules kullanın: Switch çöktüğünde arkasındaki 30 sunucu için tek tek “ping down” alarmı almamak için Alertmanager inhibit kurallarını tanımlayın.
  • Susturma (Silences): Planlı bakım çalışmalarından önce Alertmanager veya PagerDuty arayüzünden ilgili servisleri mutlaka susturun (Silence).

Özet

Zabbix’in köklü izleme yeteneklerini Alertmanager’ın modern yönlendirme mimarisiyle birleştirmek, altyapı yönetiminde adeta çağ atlatır. Bu sayede hem production ortamınızdaki anomalileri saniyeler içinde yakalarsınız, hem de ekibinizin akıl sağlığını gereksiz gürültülü alarmlardan korumuş olursunuz.

Bir sonraki yazımızda Alertmanager üzerinde gelişmiş inhibit_rules yazımını inceleyeceğiz. O zamana kadar, alarmınız az, uykunuz bol olsun!

Category: Genel | LEAVE A COMMENT
Mayıs 8 2026

Pomodoro Değil: Derin Çalışma İçin Cal Newport Yöntemi

Gün boyu durmaksızın çalışıyor ama günün sonunda hiçbir şeyi tam olarak bitirememiş gibi mi hissediyorsunuz? Bildirimler, e-postalar ve bitmek bilmeyen toplantılar arasında kaybolurken, geleneksel yöntemler de yetersiz kalabiliyor. İşte tam bu noktada, modern dünyada kaybolan zihinsel gücümüzü geri kazanmak için harika bir life hack olarak karşımıza çıkan deep work (derin çalışma) kavramı devreye giriyor. Cal Newport’un popülerleştirdiği bu yöntem, sadece bir zaman yönetimi aracı değil; aynı zamanda beynimizin odak kasını geliştirmek için tasarlanmış, zihinsel sağlığımızı koruyan bir antrenman metodudur.

Neden Pomodoro Her Zaman Yetmez? (Zihinsel Isınma Süresi)

Birçoğumuz 25 dakika çalışıp 5 dakika dinlenmeyi öngören Pomodoro tekniğini denemiştir. Ancak karmaşık, derin düşünme gerektiren yaratıcı veya teknik işlerde bu süre henüz “ısınmamıza” bile yetmez. Beynimiz karmaşık bir probleme odaklanırken adeta bir motor gibi yavaş yavaş ısınır. Araştırmalar gösteriyor ki, bölünmeden bir konuya odaklanmak ve gerçek verimliliğe ulaşmak için beynin en az 20-30 dakikalık kesintisiz bir süreye ihtiyacı vardır.

Burada devreye giren en büyük düşmanımız ise “dikkat kalıntısı” (attention residue). Yapılan bilimsel araştırmalar, odağımızı bir işten diğerine (örneğin gelen bir mesaja bakmak için) her kaydırdığımızda, dikkatimizin bir kısmının önceki işte kaldığını kanıtlıyor. Sonuç mu? Sürekli bölünen, gün sonunda ise yorgun ama hiçbir şey üretememiş bir zihin.

Deep Work Nedir ve Beynimize Ne Yapar?

Deep work, dikkatinizin dağılmadığı bir ortamda, bilişsel yeteneklerinizin sınırlarını zorlayarak gerçekleştirdiğiniz profesyonel çalışma faaliyetleridir. Bu süreç sadece daha fazla iş yapmanızı sağlamaz, aynı zamanda beyninizin biyolojik yapısını da korur.

Nörobilimsel araştırmalar gösteriyor ki, bir konuya yüksek odaklanma ile yoğunlaştığımızda, beynimizdeki ilgili sinir yollarının etrafında miyelin adı verilen koruyucu bir kılıf oluşur. Miyelin tabakası kalınlaştıkça, sinirsel sinyaller daha hızlı iletilir ve o konuda daha hızlı uzmanlaşırız. Yani derin çalışma yapmak, beyninizi fiziksel olarak daha akıllı ve hızlı hale getiren bir zihinsel spordur.

Derin Çalışmayı Hayatınıza Entegre Etmek İçin 4 Adım

Cal Newport’un stratejilerini hayatımıza uygulamak, her gün saatlerce kendimizi odaya kilitlemek anlamına gelmez. İşte eyleme geçirilebilir pratik adımlar:

1. Kendi Ritüelinizi Yaratın

Derin çalışmaya başlamadan önce beyninize “Şimdi odaklanma zamanı” sinyali gönderecek küçük ritüeller belirleyin. Bu, masanızı temizlemek, belirli bir çalma listesini açmak veya kendinize bir fincan kahve yapmak olabilir. Beyin bu rutinleri gördüğünde otomatik olarak vites yükseltmeye başlar.

2. Can Sıkıntısını Kucaklayın

Modern insan olarak en büyük sorunumuz, en ufak bir boşlukta (kuyrukta beklerken, asansörde) telefona sarılmak. Beynimiz sürekli dopamin bombardımanına alışırsa, derin çalışmanın gerektirdiği “sakin ve sıkıcı” ilk 15 dakikaya tahammül edemez. Gün içinde bazen sadece durun ve hiçbir şey yapmayın. Bırakın zihniniz can sıkıntısıyla baş etmeyi öğrensin.

3. Dijital Minimalizm Uygulayın

Çalışırken telefonunuzu sadece sessize almak yetmez, odanın dışına çıkarın. Görüş alanınızda duran bir telefon, kapalı olsa bile beynimizin bir kısmını meşgul etmeye (onu kontrol etme dürtüsünü bastırmaya çalışırken zihinsel enerji harcamaya) devam eder.

4. Time-Blocking (Zaman Bloklama) Yöntemini Kullanın

Günlük planınızı yaparken sadece yapılacaklar listesi hazırlamayın. Hangi saatte hangi işi yapacağınızı takviminize bloklar halinde işleyin. Aşağıda basit bir zaman bloklama şablonu görebilirsiniz:


# Günlük Odak ve Çalışma Blokları
09:00 - 11:30 | [Derin Çalışma] - Telefonsuz, İnternetsiz Odaklanma
11:30 - 12:00 | [Sığ Çalışma] - E-postalar ve Slack Mesajları
12:00 - 13:00 | [Öğle Arası] - Ekran Yok, Zihinsel Dinlenme
13:00 - 15:00 | [Derin Çalışma] - Zor Projeler
15:00 - 17:00 | [Sığ Çalışma] - Toplantılar ve Rutin İşler
17:00 - 17:15 | [Kapatma Ritüeli] - Günü Bitir, Kafayı Boşalt

Önemli Uyarı: Deep work, yüksek düzeyde zihinsel enerji gerektirir. Günde 4 saatten fazla tam odaklanma gerçekleştirmek insan limitlerinin üzerindedir. Eğer kendinizi kronik olarak yorgun, tükenmiş hissediyorsanız veya odaklanma sorununuz günlük hayatınızı sekteye uğratacak boyuttaysa, bu durum kronik stres veya tıbbi bir durumun belirtisi olabilir. Lütfen bir doktora veya uzmana danışmayı ihmal etmeyin.

Sonuç: Kaliteli Üretim, Huzurlu Zihin

Günün sonunda deep work, sadece daha çok iş üretmenizi sağlayan soğuk bir verimlilik taktiği değildir. Aksine, işinizi bitirip bilgisayarı kapattığınızda, aklınızın arkasında yarım kalmış işlerin dönmediği, sevdiklerinize ve kendinize gerçekten vakit ayırabildiğiniz huzurlu bir yaşamın anahtarıdır. Bugün kendinize sadece 60 dakikalık kesintisiz bir blok ayırarak başlayın. Beyninizin bu zihinsel antrenmana nasıl olumlu yanıt verdiğini görünce şaşıracaksınız.

Category: Genel | LEAVE A COMMENT
Ocak 16 2026

Bütçeyle Avrupa: Ucuza Seyahat Etmenin Gerçekçi Yolları

Avrupa sokaklarında kaybolmak, tarihi bir meydanda kahve yudumlamak her gezginin rüyasıdır. Ancak son yıllarda Euro kurunun aldığı hal ve yükselen enflasyon ortada. Yine de moral bozmaya gerek yok; doğru stratejilerle bütçe seyahat planlamak ve avrupa genelinde ucuz tatil yapmak hâlâ mümkün. Klişe turistik turları bir kenara bırakıp, yereller gibi yaşamayı öğrendiğinizde, cüzdanınızın üzerindeki o ağır baskının hafiflediğini göreceksiniz. Bu yazıda, kendi deneyimlerimden yola çıkarak, konfor alanınızdan ufak tavizler vererek yollara düşmenizi sağlayacak gerçekçi yöntemleri paylaşıyorum.

Uçuş Radarını Ayarlamak: Ucuz Biletin Sırrı

Her şey o ilk biletle başlar. Çoğu insan uçak biletini aylar öncesinden almanın her zaman en ucuz yol olduğunu düşünür. Oysa bu her zaman doğru değil. Havayolu şirketlerinin dinamik fiyatlandırma algoritmaları vardır ve genellikle uçuş gününden 6 ila 8 hafta öncesi, fiyatların en makul seviyeye indiği altın penceredir. Hafta sonu uçuşları yerine Salı veya Çarşamba günlerini tercih etmek, bilet fiyatını yarı yarıya düşürebilir. Ayrıca, sadece ana havalimanlarına değil, şehrin biraz dışındaki ikincil havalimanlarına uçmayı düşünmelisiniz. Örneğin Brüksel yerine Charleroi Havalimanı’na uçmak bütçenizi ciddi anlamda rahatlatır. Bu havalimanlarından şehir merkezine ulaşım otobüslerle genellikle 10-15 Euro civarındadır ve yaklaşık 45 dakika sürer.

Uçuş ararken tarayıcınızın gizli sekmesini kullanmak klasik ama eksik bir bilgidir. Gerçek tasarruf için VPN kullanarak kendinizi bilet aldığınız ülkedeymiş gibi göstermek veya farklı para birimlerinde ödeme seçeneğini değerlendirmek bazen şaşırtıcı indirimler sağlayabilir.

Gezgin ruhlu yazılımcılar ve terminalden vazgeçemeyenler için ufak bir terminal numarasıyla bilet sorgulamayı ve API üzerinden anlık fiyat çekmeyi de buraya iliştirelim:

curl -s "https://api.skypicker.com/flights?fly_from=IST&to=BUD&partner=picky" | grep -o '"price":[0-9]*' | head -n 5

Konaklamada Yeni Paradigmalar: Sadece Uyumak İçin mi?

Bileti hallettikten sonra en büyük gider kalemi konaklamadır. İşte burada modern hostel kültürü devreye giriyor. Birçok insan için hostel kelimesi, eski korku filmlerini veya hijyenden uzak odaları çağrıştırır. Oysa günümüz hostelleri, otellerden çok daha canlı, sosyal ve modern alanlar sunuyor. Sadece uyumak ve eşyalarınızı bırakmak için geceliğine 150 Euro ödemek yerine, 20-35 Euro bandında temiz bir hostel odasında kalabilirsiniz. Üstelik bu mekanların ortak mutfakları, kendi yemeğinizi pişirerek günlük gıda harcamalarınızı minimize etmenin en kolay yoludur. Airbnb ise artık eskisi kadar ucuz değil; temizlik ve hizmet ücretleri eklendiğinde genellikle bütçe dostu olmaktan çıkıyor.

Rayların Üzerinde Bir Ömür: Interrail Gerçekten Gerekli mi?

Avrupa içi ulaşımda ise klasik bir efsane olan interrail seçeneğini masaya yatırmak gerek. Eğer bir ay boyunca her gün farklı bir ülkeye gitmek gibi son derece yoğun ve dinamik bir rotanız varsa, tren pass biletleri kesinlikle mantıklıdır. Ancak daha esnek ve ağırdan alan bir seyahat planlıyorsanız, Flixbus gibi otobüs firmaları veya RegioJet gibi bölgesel trenler çok daha hesaplıdır. Örneğin, Prag’dan Viyana’ya otobüsle geçmek yaklaşık 4 saat sürer ve bilet fiyatları bazen 12 Euro’ya kadar düşer. Trenle gitmekten sadece bir saat daha uzun sürer ama cebinizde kalan para bir sonraki günün akşam yemeğini karşılar.

Otobüs yolculuklarını gece saatlerine denk getirmek, hem bir gecelik konaklama ücretinden tasarruf etmenizi sağlar hem de gün ışığından tam kapasite yararlanmanıza önayak olur.

Turistik Tuzaklardan Kaçınarak Karın Doyurmak

Gelelim en keyifli ama en hızlı para harcanan konuya: yemek. Turistik meydanlardaki restoranların menülerinde birden fazla dilde çeviri görüyorsanız, oradan koşarak uzaklaşın. Yerel halkın nerede yediğini gözlemleyin. Üniversite yakınlarındaki ara sokaklar, yerel fırınlar ve semt marketleri en büyük dostunuzdur. İtalya’da bir dilim pizza ve içecek için ara sokaktaki bir büfede 4 Euro öderken, ana meydanda aynı öğün için 20 Euro hesap ödeyebilirsiniz. Ayrıca, Avrupa’da birçok şehirde musluk suyu içilebilirdir. Yanınızda taşıyacağınız bir matara ile su masrafını tamamen sıfırlayabilirsiniz. Paris’te her köşe başında göreceğiniz tarihi çeşmelerden su doldurmak, size kendinizi gerçek bir Parisli gibi hissettirecektir.

Kültür Sanata Beleş Giriş: Ücretsiz Müze Günleri

Son olarak, kültürel aktiviteleri ücretsiz veya çok ucuza getirmek mümkün. Paris’teki Louvre Müzesi de dahil olmak üzere birçok dünya çapındaki müze, ayın belirli günlerinde kapılarını ücretsiz açar. Genellikle her ayın ilk pazar günü yapılan bu etkinlikleri önceden araştırmak, size ciddi miktarda Euro tasarrufu sağlayacaktır. Ayrıca neredeyse her büyük Avrupa şehrinde “Free Walking Tour” yani Ücretsiz Yürüyüş Turları düzenlenir. Bu turlar yerel rehberler eşliğinde şehri tanımanın en samimi yoludur. Turun sonunda rehbere vereceğiniz 5-10 Euro bahşiş, resmi acente turlarının çeyrek fiyatına denk gelir ve size şehir hakkında hiçbir rehber kitapta bulamayacağınız lokal tüyolar kazandırır.

Category: Genel | LEAVE A COMMENT