Sitemap

Yazılım Geliştiriciler İçin DevOps Kavramları

8 min readMay 10, 2025

DevOps’un kavramını, amaçlarını, temel bir altyapıyı, ekipler üzerindeki etkisini, modern ve geleneksel yaşam döngüsü yönetimi farkını, ölçeklenebilir ortamlar oluşturmayı öğrenmiş olacaksınız.

Özet

Bu yazıda yazılım geliştiricilere DevOps‘u tanıttık. Geleneksel ortamlarda yazılım geliştirme ve operasyon ekiplerinin karşılaştığı zorluklar ve DevOps’un bu sorunlara nasıl çözüm sunduğunu konuştuk. DevOps kültürünün önemli unsurları olan DevOps hattı (pipeline), yapılandırma (configuration) yönetimi, sürüm yönetimi, sürekli entegrasyon ve sürekli teslimat, kod olarak altyapı (Infrastructure as Code), test otomasyonu ve sürekli izleme konularını inceledik. Ayrıca, ekip yapısı ve yazılım geliştirme üzerindeki DevOps etkisi; ekip büyüklükleri, liderlik, mikroservis mimarisi ve 12 faktörlü uygulama prensipleri üzerinden ele alınmıştır. DevOps altyapısının nasıl kurulacağı ve ölçeklendirileceğine dair de kısa bir giriş yapıp, Git, Jenkins, Ansible, Docker ve Kubernetes içeren iki CI/CD hattı örneği inceledik.

Giriş

Dijital iş modelleri, süreçler ve akıllı hizmetler büyük ölçüde bilgi teknolojileri (BT) ve yazılıma dayanmaktadır. Günümüz dünyasının çevik yapısı nedeniyle gereksinimler ve koşullar çok sık ve kısa sürede değişmektedir. Bu bağlamda, yazılım geliştirme ve BT operasyonlarının iş birimleriyle yakın iş birliği ve entegrasyonu, giderek daha önemli bir rekabet faktörü haline gelmektedir. “DevOps” terimi, yazılım geliştiricileri temsil eden “Development (Dev)” ve BT operasyonlarını temsil eden “Operations (Ops)” kelimelerinin birleşiminden oluşur. Bu iki alanın birleşimi, yazılım geliştirme ve sistem yönetimi süreçlerinde iyileştirme sağlamayı amaçlamaktadır. DevOps kültürünü benimseyen şirketler, iş birliğine açıklık, denemeye istekli olma ve öğrenmeye açıklık gibi değerlere önem verir. Hedef, yazılım geliştirme, operasyonlar ve kalite güvence gibi üç farklı departman arasında daha etkili ve verimli bir iş birliği sağlamak; fikrin oluşumundan, müşteriye ulaşan son ürüne kadar hızlı, istikrarlı ve yüksek kaliteli yazılımlar sunmaktır. DevOps bir araç, yazılım, teknoloji, metodoloji ya da süreç değil; uzun vadede benimsenmesi gereken bir kurumsal kültür ve ilke bütünüdür.

DevOps konusuna daha derinlemesine geçmeden önce, onunla yakından ilişkili olan “uygulama yaşam döngüsü yönetimi (Application Lifecycle Management — ALM)” kavramına bakmak faydalı olacaktır. ALM, bir fikrin ortaya çıkışından uygulanmasına ve çözümüne kadar tüm yaşam döngüsünü kapsayan bir yönetim yaklaşımıdır. Bu döngüsel süreç, çalışan etkileşiminde, rollerinde, süreçlerde ve bilgi akışında sürekli iyileşmeyi hedefler. ALM, daha önce ayrı ayrı ele alınan proje yönetimi, gereksinim yönetimi, yazılım geliştirme, test, kalite güvence, dağıtım ve bakım gibi disiplinleri bir araya getirerek DevOps’un hayata geçirilmesini destekler ve organizasyon içinde ekiplerin iş birliğini daha verimli hale getirir. Genel olarak ALM’nin iki ana yaklaşımı vardır: Geleneksel ve DevOps.

Geleneksel Yaşam Döngüsü Yönetimi

Geleneksel sistemlerde yazılım geliştiriciler ve operasyon ekipleri birbirinden ayrı çalışırlar. Geliştiriciler, sürekli değişim ve yenilik yapmaya odaklıdırlar. Amaçları yeni özellikler geliştirmek, mevcut olanları iyileştirmek ve değişimi teşvik etmektir. Buna karşılık operasyon ekipleri değişime karşıdır çünkü değişim, sistemin kararlılığını ve güvenilirliğini tehdit eder. Onların amacı altyapının istikrarlı, verimli ve kesintisiz çalışmasını sağlamaktır.

Bu durum, iki ekip arasında bir çatışma yaratır: Geliştiriciler hızlı değişim isterken, operasyon ekipleri bu değişimi en aza indirmeye çalışır. Bu zıtlık, verimliliği azaltabilir.

DevOps ile Yaşam Döngüsü Yönetimi

DevOps yaklaşımı, bu iki zıt ekip arasındaki iş birliğini artırmak için geliştirilmiştir. DevOps; geliştirme ve operasyon ekiplerinin iletişimini, entegrasyonunu ve otomasyonunu sağlar. Böylece yazılımın daha sık ve güvenli şekilde güncellenmesini mümkün kılar.

Modern DevOps yaşam döngüsü yönetimi, sürekli entegrasyon (CI) ve sürekli teslimat (CD) ilkelerine dayanır:

  • CI (Continuous Integration): Geliştiricilerin kodlarını gün içinde birçok kez ortak bir havuza entegre etmesi.
  • CD (Continuous Delivery): Yazılımın kısa döngülerde üretilip istenildiğinde güvenli bir şekilde yayına alınabilmesi.

DevOps sayesinde yazılım yaşam döngüsü baştan sona ele alınır; bakım, güncellemeler ve kullanım dışı bırakma süreçleri de planlanır. Bu da daha kaliteli ürünler, daha hızlı dağıtım, daha memnun geliştiriciler ve daha sürdürülebilir çözümler anlamına gelir.

Geliştirme ve Operasyonları Bir Araya Getirme

Geliştirme (Development) ve operasyon (Operations) ekiplerinin daha iyi iş birliği yapması gerektiği düşüncesinden doğan DevOps, çevik (agile) yöntemlerin günlük işleyişe entegrasyonunu sağlar. Uygulamalar artık çevik şekilde geliştirilse de, iç süreçler ve araçlar yüzünden üretime geçiş gecikebilmektedir. Bu nedenle, otomasyon, şeffaflık ve geri bildirim döngüleriyle verimliliği artırır.

DevOps, sadece teknik değil kültürel de bir dönüşümdür. Başarılı bir DevOps geçişi için şu üç soruya “evet” cevabı verilmesi gerekir:

  1. Geliştiriciler gerçek zamanlı sorun giderme bilgilerine ulaşabiliyor mu?
  2. Üretim ortamı, geliştirme ekibiyle aynı araç ve yöntemleri mi kullanıyor?
  3. Geliştirici ve altyapı ekipleri iş birliği içinde mi çalışıyor?

DevOps’un benimsenmesi zaman ve kültürel değişim gerektirir. Bu süreçte yazılım ve sistem araçları, kodun geliştirme, test ve üretim ortamlarında izlenmesini sağlar. Geri bildirimler sayesinde kod sorunları daha erken tespit edilir.

İş birimi ile geliştirme arasındaki uçurum, geliştirme ve operasyon arasındaki kadar derindir. DevOps doğrudan çözüm sunmasa da, çevik yapısı bu mesafeyi azaltır. İyi bir iletişim ve ortak bir dil, iş birliğini artırır.

DevOps Pipeline (Değer Akışı)

DevOps Pipeline

DevOps boru hattı, yazılımdaki her adımı otomatize ederek geliştirme ile operasyonu birleştirir:

  1. Planlama (Plan): Proje küçük görevlere ayrılır.
  2. Geliştirme (Code): Kod yazılır, paylaşılan havuza gönderilir.
  3. Derleme (Build): Kod hataları otomatik tespit edilir.
  4. Test: Manuel ve otomatik testler yapılır.
  5. Yayınlama (Release): Kod üretime geçmeye hazır hale gelir.
  6. Dağıtım (Deploy): Üretim ortamına alınır.
  7. İşletim (Operate): Kullanıcılar uygulamayı kullanmaya başlar.
  8. İzleme (Monitor): Kullanıcı verileri ve performans ölçülür.

DevOps Terimleri

DevOps CI/CD
  • Yapılandırma (Konfigürasyon) Yönetimi: Altyapı ve sistemlerin otomasyonu.
  • Sürüm Yönetimi: Yayın sürecinin planlanması ve takibi.
  • Sürekli Entegrasyon (CI): Geliştiricilerin sık sık kod birleştirmesi.
  • Sürekli Teslimat (CD): Otomatik testten geçen kodun yayımlanmaya hazır hale gelmesi.
  • Sürekli Dağıtım: Otomatik olarak üretime alınması.
  • Kodla Altyapı Yönetimi (IaC): Sunucu ve ortam tanımlarının kod olarak saklanması.
  • Test Otomasyonu: Erken hata tespiti için otomatik testler.
  • Sürekli İzleme: Gerçek zamanlı sistem takibi.

SRE (Site Reliability Engineering)

DevOps’a benzeyen SRE, yazılım mühendisliği ile operasyonları birleştirerek sistem güvenilirliğini artırmayı hedefler. Zamanın yarısı geliştirme, yarısı operasyonla geçer ve DevOps’a benzer şekilde ekipler arası iletişimi güçlendirir.

DevOps’un Ekip ve Geliştirme Yapısı Üzerindeki Etkisi

Monolitik ve Mikroservis Mimarisi Karşılaştırması

DevOps’un temel amacı, yazılım geliştirme (Dev) ve operasyon (Ops) ekipleri arasındaki iş birliğini artırarak uygulamaların daha hızlı geliştirilmesini, test edilmesini ve dağıtılmasını sağlamaktır. Bu, organizasyondaki geleneksel silo yapılarını ortadan kaldırmak için geliştirilmiştir. Silo, ekiplerin kurumsal hedeflere doğru çalışmak yerine kendi hedeflerine odaklandığı bir yapı oluşturan bir yönetim sistemidir. Ancak DevOps, yalnızca bir teori değil, daha derin sistem bileşenlerini içeren kapsamlı bir yaklaşımdır.

Ekip Yapısı ve Faktörler:
İdeal bir DevOps ekibi için bazı unsurlar göz önünde bulundurulmalıdır:

  • Mevcut silo yapıları,
  • Liderlik yapısı ve sektör deneyimi,
  • BT operasyonlarının şirket hedefleriyle entegrasyonu,
  • Bilgi ve beceri eksiklikleri,
  • Yazılım mimarisi.

Ekip Büyüklüğü ve Yapılanma: Amazon’un “iki pizza ekibi” konsepti (bir ekibin iki pizzayla doyabilmesi) küçük, yüksek performanslı DevOps ekiplerini teşvik eder. Küçük ekipler, mikroservis mimarisini destekler. Organizasyonlar, portföy bazlı yapılar oluşturarak geliştirici, operasyon, test ve proje yöneticilerini bir araya getiren ekipler kurabilir.

Liderlik: DevOps’un başarılı olabilmesi için liderlik tarzı çok önemlidir. Değişim direnci, düşük değişime hazırlık ve çalışan bağlılığının zayıf olması başarısızlık göstergelerindendir. Dönüşümsel liderlik, çalışanları motive edip değişime teşvik eden bir liderlik tarzıdır ve DevOps dönüşümünde etkili olabilir.

Doğru Beceri Karışımı: Ekiplerin hangi rollere ve becerilere ihtiyaç duyduğunu belirlemek önemlidir. Teknik becerilerin yanı sıra iletişim ve iş birliği gibi sosyal beceriler de DevOps başarısı için kritik rol oynar.

Mikroservis Mimarisi: Tek bir büyük sistem yerine küçük bağımsız servisler olarak geliştirilen mikroservisler, DevOps’un uygulama geliştirme ve dağıtım süreçlerine esneklik kazandırır. Mikroservisler ve DevOps birbirini tamamlar; küçük ekiplerin bağımsız olarak geliştirme ve yayına alma yapmasını kolaylaştırır.

12-Faktör Uygulama Prensipleri: Bu yöntem, dayanıklı ve ölçeklenebilir uygulamalar geliştirmek için önerilen 12 ilkeden oluşur:

  1. Tek kod deposu,
  2. Bağımlılıkların açıkça belirtilmesi,
  3. Yapılandırmaların çevre değişkenlerinde tutulması,
  4. Dış hizmetlerin kaynak gibi ele alınması,
  5. Derleme, sürüm ve çalıştırma aşamalarının ayrılması,
  6. Durumsuz süreçler,
  7. Port üzerinden servis sağlama,
  8. Yatay ölçekleme (concurrency),
  9. Hızlı başlatma ve güvenli kapatma (graceful shutdown/disposability),
  10. Geliştirme ve üretim ortamlarının benzerliği,
  11. Kayıtların (log) olay akışı olarak görülmesi,
  12. Yönetim işlemlerinin süreç olarak çalıştırılması.

Bu ilkeler, mikroservislerle birlikte, DevOps süreçlerinin daha sağlam, hızlı ve esnek olmasını sağlar.

DevOps Altyapıları

Git, Jenkins, Ansible, Docker, and Kubernetes kullanılan bir CI/CD

Bu bölüm, bir DevOps altyapısının nasıl kurulabileceğini ele alacağız. DevOps, geliştirme (development) ve operasyon (operations) ekipleri arasında iş birliği ve iletişimi teşvik eden bir kültürdür. Teknik açıdan DevOps yaklaşımını uygulamak için genellikle CI/CD (Sürekli Entegrasyon/Sürekli Dağıtım) hattı önerilir. Bu hattın adımları, kullanılan teknolojilere bağlı olarak değişiklik gösterebilir.

Docker İmajı ve Konteyner ilişkisi

Jenkins ile CI/CD: Jenkins, açık kaynak kodlu bir otomasyon sunucusudur ve birçok eklentiyle yazılımın derlenmesi, test edilmesi ve dağıtımını destekler. Genellikle Git (sürüm kontrol), Docker (konteyner sanallaştırma) ve Kubernetes (konteyner orkestrasyonu) ile birlikte kullanılır. Süreç şu şekilde işler:

  1. Kod Git’e gönderilir.
  2. Jenkins otomatik olarak derleme başlatır ve testleri çalıştırır.
  3. Başarılı derleme sonrası Docker imajı oluşturulur ve Docker Hub’a gönderilir.
  4. Kubernetes bu yeni imajı alıp dağıtımı gerçekleştirir.
Docker Yaşamdöngüsü

Docker: Docker, uygulamaları ve bağımlılıklarını bir arada barındıran imajlar oluşturur ve bu imajlardan konteynerler çalıştırır. Docker bileşenleri arasında Dockerfile, imaj, konteyner, daemon, REST API, client ve Docker ağı/volume yer alır. Konteynerler, sanal makinelerden farklı olarak tek işletim sistemi üzerinde daha hafif bir yapı sunar.

Ansible: Yapılandırma yönetimi ve sürekli dağıtım için Jenkins’e ek olarak Ansible gibi araçlar önerilir. Ansible, açık kaynaklı bir otomasyon aracıdır ve SSH üzerinden uzak sunuculara erişerek işlemleri gerçekleştirir. Kullanımı Puppet ve Chef’e göre daha kolaydır ve birçok hazır “playbook” (betik) mevcuttur.

Terraform: Ansible yapılandırma yönetimi sağlarken, Terraform altyapı sağlamlaştırma (provisioning) görevlerinde kullanılır. Bulut tabanlı kaynakları (sunucular, veritabanları, yük dengeleyiciler) tanımlamak, oluşturmak ve sürümlendirmek için idealdir. Özellikle bulut ortamlarında esnek ve otomatik altyapı yönetimi sağlar.

Modern DevOps altyapıları, Git, Jenkins, Docker, Kubernetes, Ansible ve Terraform gibi araçların birlikte kullanımıyla daha verimli ve otomatik hale getirilebilir.

Ölçeklenebilir Ortamlar Oluşturmak

Kubernetes Pod’ları

Modern altyapılarda ölçeklenebilirlik, büyüme potansiyeli olan kuruluşlar için temel bir hedeftir. Sistemlerin talebe göre büyüyüp küçülebilmesi bu özelliğin anahtarıdır. DevOps uygulamaları, hızlı uygulama dağıtımı, daha iyi performans ve otomasyon gibi avantajlarla bu süreci destekler. Özellikle konteynerlerin kullanıldığı ortamlarda konteyner orkestrasyonu hayati önem taşır. Bu, konteynerlerin sağlanması, yönetimi, ölçeklenmesi, ağ yapılandırması gibi süreçleri otomatikleştirir.

Konteyner Orkestrasyon Araçları
Bu araçlar, büyük ölçekli mikroservis mimarilerini yönetmeye yardımcı olur. En yaygın kullanılanlar:

  • Kubernetes
  • Docker Swarm
  • Apache Mesos

Kubernetes: Google tarafından geliştirilmiş açık kaynaklı bir konteyner orkestrasyon aracıdır. Uygulama servislerini birden fazla konteyner üzerinden yönetir, uygulamaların sağlığını izler, ölçekleme ve güncelleme işlemlerini yapar. Kubernetes kümeleri genellikle bir “master” (yönetici) ve birden fazla “node” (çalışan) içerir. Uygulamalar “pod” adı verilen en küçük birimler halinde çalışır. Bu yapı bulut tabanlı uygulamalar için idealdir.

Docker Swarm: Docker tarafından geliştirilmiştir ve Kubernetes’e benzer işlevler sunar. Swarm, konteynerleri “servis” olarak tanımlar ve bu servisler “task” adı verilen işler olarak node’lara dağıtılır.

  • Replika Servisler: Belirli sayıda kopya ile çalışır.
  • Global Servisler: Tüm node’larda bir örnek çalıştırılır.
    Swarm, basitlik ve hızlı kurulum avantajı ile tercih edilirken, Kubernetes daha karmaşık ve yüksek talepli ortamlarda tercih edilir.

Kıyaslama: Kubernetes daha karmaşık yapılar ve büyük ölçekli sistemler için uygundur. Docker Swarm ise sade yapısıyla yeni başlayanlar ve basit dağıtımlar için daha elverişlidir.

--

--

Cahit Barkin Ozer
Cahit Barkin Ozer

Written by Cahit Barkin Ozer

Üretken YZ başta olmak üzere teknoloji alanındaki yenilikleri öğrenip sizlerle paylaşıyorum. Youtube Kanalım: https://www.youtube.com/@cbarkinozer

No responses yet