DevOps Nedir?
Merhabalar,
DevOps Engineer olma sürecimde karşılaştığım bazı zorluklarla birlikte fark ettim ki, Türkçe kaynaklarda DevOps konusunda yeterli bilgilere ulaşmak oldukça zor olabiliyor. Bu durumda, kendi deneyimlerimden yola çıkarak başkalarının da benzer bir durumda olabileceğini düşündüm ve bu sorunu çözmek için harekete geçtim. Bu sebeple, kendi deneyimlerimi paylaşmak ve bu konuda diğerlerine yardımcı olmak amacıyla blog yazıları hazırlamaya karar verdim. Bu yazı dizisinde, DevOps’un temellerinden başlayarak derinlemesine bilgi sunmaya çalışacağım.
İlk yazımda, “DevOps Nedir?” sorusuna odaklanacağız. DevOps’un ne anlama geldiğini, neden önemli olduğunu ve nasıl bir fark yarattığını ele alacağız. Ayrıca, bu alanın genel yapı taşlarına ve süreçlerine de bir göz atacağız.
Amacım, hem başlangıç seviyesindeki kişilere DevOps hakkında temel bir bilgi aktarmak, hem de daha deneyimli profesyonellerin bilgilerini genişletmelerine yardımcı olmaktır…
Yazılım geliştirme süreçlerinin karmaşıklığı arttıkça, Developer (Dev) ve Operations (Ops) ekiplerinin birbirleriyle daha fazla iş birliği yapması ve uyum içersinde çalışmaları büyük önem kazanmıştır.
Yazımda da anlatacağım “DevOps”, işte tam da bu noktadaki sorunları çözmek ve yazılımın dağıtımını hızlandırmak için ortaya çıkmıştır.
Öncelikle gelin bu alandaki başarılı üç büyük şirketin “DevOps” tanımını inceleyelim. Daha sonrasında “DevOps”un derinliklerine yolculuğumuza devam edelim…
1. DevOps’un Tanımı
Amazon (AWS): DevOps, kurumların ürünleri geleneksel yazılım geliştirme ve altyapı yönetim süreçlerini kullanan kurumlara göre daha hızlı geliştirmesini ve iyileştirmesini sağlayarak, uygulama ve hizmetleri yüksek hızda sunma becerisini artıran kültürel felsefelerin, yöntemlerin ve araçların birleşimidir. Bu hız, kurumların müşterilerine daha iyi hizmet sunmasına ve piyasada daha etkili bir şekilde rekabet etmesine imkan tanır.
Microsoft (Azure): Geliştirme (Dev) ve operasyonların (Ops) birleşimi olan DevOps müşterilere sürekli olarak değer sunmak için bir araya gelen kişiler, süreçler ve teknolojiler bütünüdür.
Google (GCP): DevOps, yazılım teslim hızını artırmayı, hizmet güvenilirliğini artırmayı ve yazılım paydaşları arasında ortak mülkiyet oluşturmayı amaçlayan organizasyonel ve kültürel hareket olan DevOps’a derinlemesine bakın.
Üç büyük şirketin “DevOps” tanımları farklı olmasına rağmen, DevOps kavramı aşağıdaki noktalarda ortak bir payda da birleşmektedir:
DevOps, “Developer” (Dev) ve “Operations” (Ops) kelimelerinin kısaltmasıdır. Bu anlamda, Dev ve Ops ekipleri ayrı ayrı çalışmak yerine, tek bir ekip gibi bir arada ve etkili iletişim içinde birlikte çalışmayı ifade eder.
Bu yaklaşım, daha verimli bir şekilde üretkenlik sağlamak, sürekli teslimat ve sürekli entegrasyon (CI/CD) gibi prensiplere dayalıdır.
2. DevOps’un Temel Prensipleri
2.1. Sürekli Entegrasyon ve Sürekli Dağıtım (CI/CD)
Yazılımın sürekli olarak entegre edilip test edilmesini ve başarılı olduğunda otomatik olarak canlı ortama dağıtılmasını sağlar. Bu prensip, yazılımın hızlı bir şekilde geliştirilmesini, hataların erken tespit edilmesini ve geri bildirim döngüsünün hızlanmasını sağlar.
- Sürekli Entegrasyon (CI), yazılım geliştirme sürecinde yapılan her kod değişikliğinin otomatik olarak entegre edilip test edilmesini sağlar.
- Sürekli Dağıtım (CD), başarılı bir şekilde test edilen yazılımın otomatik olarak canlı ortama dağıtılmasını ifade eder.
2.2. Otomasyon ve Araçlar (Tools)
Tekrar eden işleri otomatik hale getirerek zaman ve kaynak tasarrufu sağlar. Çeşitli araçlar ve yazılımlar kullanarak, altyapı dağıtımı (infrastructure deployment), test süreçleri (testing processes) ve diğer görevleri otomatize eder. Bu sayede hatalar azalır ve yazılım geliştirme sürecini hızlandırır.
2.3. Kültür ve İşbirliği
Yazılım geliştirme (Dev) ve Operasyon (Ops) ekipleri arasında proje planlamasından başlayarak sürekli olarak birlikte çalışmayı destekler. Bu şekilde, ekipler daha hızlı ve verimli bir şekilde çalışırlar ve daha başarılı sonuçlara ulaşırlar.
2.4. İzleme (Monitoring) ve Geri Bildirim (Feedback) Döngüsü
Bu prensip, yazılımın kalitesini artırır, kullanıcı deneyimini iyileştirir ve sürekli olarak daha iyi bir hizmet sunmayı sağlar.
- İzleme (Monitoring), yazılımın performansını ve sistem durumunu sürekli olarak takip etmeyi içerir. İzleme araçları ve log analizleri, hataları ve performans sorunlarını erken tespit etmeyi sağlar.
- Geri Bildirim Döngüsü (Feedback Loop), kullanıcı geri bildirimlerini, hata raporlarını ve performans istatistiklerini değerlendirerek sürekli olarak iyileştirmeler yapmayı hedefler.
3. DevOps Araçları (Tools) ve Teknolojileri
DevOps Araçları ve Teknolojileri, yazılım geliştirme ve operasyon süreçlerini optimize etmek, otomatikleştirmek ve verimliliği artırmak için kullanılan çeşitli araçları ve teknolojileri ifade eder.
Yukarıdaki görseldeki gördüğünüz gibi bu aşamaların herbirinde kullanılabilecek onlarca farklı tools/teknolojiler mevcuttur. Ben bu yazımda genel olarak kullanılan bazı teknolojileri size sunacağım.
İlerleyen yazılarımda bu bahsettiğim tools/teknolojiler ile ilgili daha detaylı bilgileri sizinle paylaşmış olacağım…
3.1. CI/CD Tools
Sürekli Entegrasyon ve Sürekli Dağıtım (CI/CD) süreçlerini destekleyen araçlardır. Bu araçlar, yazılımın otomatik olarak derlenmesi, test edilmesi ve canlı ortama dağıtılması için gerekli olan süreçleri yönetir.
- Jenkins
- GitLab CI/CD
3.2. Container teknolojileri
Yazılım uygulamalarının hızlı ve taşınabilir bir şekilde dağıtılmasını sağlayan teknolojidir. Container teknolojileri, uygulama ve bağımlılıklarını bir araya getirerek bir izolasyon ortamında çalışmalarını sağlar.
- Docker
- Kubernetes (K8S)
3.3. Kod olarak Altyapı (Infrastructure as Code)
Altyapı kaynaklarının (sunucular, ağ yapılandırmaları, veritabanları vb.) kod olarak tanımlanıp yönetilmesini sağlayan bir yaklaşımdır. Manuele kıyasla, altyapının oluşturulması, yapılandırılması ve yönetimi daha otomatik, tekrarlanabilir ve ölçeklenebilir olur.
- Terraform
3.4. Konfigürasyon Yönetimi (Configuration management)
Sistem veya yazılım bileşenlerinin yapılandırma ve ayarlarının düzenli ve tekrarlanabilir bir şekilde yönetilmesini sağlar. Yapılandırma dosyalarını ve ayarları merkezi bir yerden yöneterek yapılandırma değişikliklerini otomatikleştirir ve hataları tespit etmeye yardımcı olur.
- Ansible
- Puppet
- Chef
3.5. İzleme ve Log Araçları (Monitoring and Logging Tools)
Uygulama performansını, sistem durumunu ve kullanıcı etkileşimlerini takip etmek için kullanılan araçlardır.
3.5.1 İzleme araçları (Monitoring Tools), sunucu kullanımı, hata oranları, yanıt süreleri gibi metrikleri izleyerek sorunları tespit etmeye yardımcı olur.
3.5.2 Log Tools, uygulama ve sistem loglarını toplayarak sorunları analiz etmeyi sağlar.
- Prometheus
- Grafana
- New Relic
3.6. Versiyon Kontrolü
Yazılım geliştirme sürecinde yapılan değişikliklerin takip edilmesini, yönetilmesini ve belgelenmesini sağlayan bir sistemdir. Bir proje veya belge üzerinde yapılan her değişikliği izleyerek, her bir değişiklik için bir versiyon oluşturur.
- Git
3.7. Cloud Service (Platform)
Bulut tabanlı platformlar, uygulama geliştirme, veritabanı yönetimi, depolama ve diğer çeşitli hizmetleri sunarlar. Kaynakları ihtiyaçlarımız doğrultusunda ölçeklendirebilir ve ödeme yaparken genellikle “kullandığın kadar öde” modelinden faydalanırız.
- Amazon Web Services (AWS)
- Google Cloud Platform (GCP)
- Microsoft Azure
4. DevOps’un Avantajları
4.1. Hızlı Dağıtım: CI/CD prensiplerini kullanarak yazılımın hızlı bir şekilde dağıtılmasını sağlar. Bu sayede yeni özellikler ve güncellemeler daha hızlı bir şekilde kullanıcılara sunulabilir.
4.2. Yüksek Kalite ve Güvenilirlik: Otomatik testler, sürekli izleme ve hata tespit mekanizmaları gibi araçları kullanarak yazılımın kalitesini artırır. Bu da hataların erken tespit edilmesini sağlar ve sistemlerin daha güvenilir çalışmasını sağlar.
4.3. Verimli Kaynak Kullanımı: Otomasyon araçları ve bulut tabanlı altyapılar gibi teknolojileri kullanarak kaynakların daha verimli bir şekilde kullanılmasını sağlar.
Böylece maliyetler düşer ve verimlilik artar.
4.4. İşbirliği ve Ekip Çalışması: Yazılım Dev, test, Ops ve diğer departmanlar arasında daha iyi bir işbirliği ve ekip çalışması sağlar. Ekipler arasında iletişim ve koordinasyon artar, böylece projeler daha hızlı ilerler.
4.5. Müşteri Memnuniyeti: Hızlı dağıtımlar, sürekli iyileştirme ve müşteri geri bildirimlerine dayalı geliştirme süreçleri, müşteri memnuniyetini artırır. Müşteri talepleri hızla karşılanır ve sorunlar daha hızlı çözülür.
5. DevOps Yaşam Döngüsü (Lifecycle)
Yazılımın planlama, oluşturma, entegrasyon, dağıtım, izleme, operating (çalıştırma/kullanma) ve geri bildirim sağlama gibi adımlarını içeren bir yazılım geliştirme sürecidir.
Yazılımın başından sonuna kadar sürekli bir döngü olarak devam eder.
5.1. Sürekli Geliştirme (Continuous Development)
Yazılımın sürekli olarak geliştirildiği aşamadır. Yeni özelliklerin eklenmesi, hataların düzeltilmesi ve iyileştirmelerin yapılması sürekli olarak devam eder.
5.2. Sürekli Entegrasyon (Continuous Integration)
Bu aşama, yapılan değişikliklerin sürekli olarak bir araya getirilerek entegre işlemini içerir. Bu şekilde, farklı kod parçalarının uyumlu bir şekilde birleştirilmesi ve uyumluluk sorunlarının erken tespit edilmesi sağlanır.
5.3. Sürekli Test (Continuous Testing)
Yazılımın sürekli olarak test edildiği aşamadır. Otomatik testler kullanılarak yazılımdaki hatalar ve uyumluluk sorunları tespit edilir.
5.4. Sürekli Teslimat (Continuous Delivery)
Bu aşama, yazılımın sürekli olarak canlı ortama dağıtılmasını/teslim edilmesini içerir. Her değişikliğin otomatik olarak canlı ortama gönderildiği bir süreçtir.
5.5. Sürekli İzleme (Continuous Monitoring)
Yazılımın sürekli olarak izlendiği aşamadır. Performans sorunları, hatalar veya sistem sorunları anında tespit edilerek müdahale edilmesi sağlanır.
5.6. Sürekli Geri Bildirim (Continuous Feedback)
Bu aşama, kullanıcılardan, müşterilerden veya diğer kişilerden sürekli olarak geri bildirim almayı içerir. Geri bildirimler, yazılımın geliştirilmesi ve iyileştirilmesi için önemli bilgileri bize gösterir.
5.7. Sürekli İşletim/Kullanma/Çalıştırma (Continuous Operations)
Yazılımın sürekli olarak kullanılmasını/çalıştırılmasını ifade eder. Yazılımın sorunsuz bir şekilde çalışmasını sağlar, hataları yönetir, bakım çalışmalarını gerçekleştirir ve kullanıcı desteği sağlar.
Bu aşamalar, DevOps sürecinin temel bileşenleridir. Yazılımın sürekli bir şekilde geliştirilmesini, teslim edilmesini ve kullanılmasını/çalıştırılmasını sağlamak için birbirleriyle entegre bir şekilde çalışırlar.
Zaman ayırıp okuduğunuz için teşekkür ederim…
Eğer yazımın size faydalı olduğunu düşünüyorsanız beğenip başka kişilere ulaşmasında yardımcı olabilirsiniz :=)
Eksik veya hatalı bir nokta gözünüze çarparsa benimle paylaşmanızdan mutluluk duyarım. Her zaman hatalar olabilir fakat hataları düzeltmek için bizler Dev ve Ops ekipleri gibi bir araya gelip daha az hatalı bir DevOps sistemine geçiş yapabiliriz…
Sormak istediğiniz/aklınıza takılan sorular olursa iletişime her zaman geçebilirsiniz.
Sevgilerimle,