GitOps, uygulama ve altyapı yapılandırmalarının Git gibi bir sürüm kontrol sisteminde saklandığı ve canlı ortamın bu tanımlarla sürekli olarak eşleştirildiği modern bir dağıtım yaklaşımıdır.
Geleneksel dağıtımlarda ekip üyeleri sunuculara bağlanarak komut çalıştırabilir veya üretim ortamında elle değişiklik yapabilir. Bu yöntem yapılan işlemlerin takip edilmesini zorlaştırabilir ve canlı sistemle dokümantasyonun zaman içerisinde farklılaşmasına yol açabilir.
GitOps yaklaşımında ise istenen sistem durumu Git deposunda bildirimsel dosyalarla tanımlanır. Otomatik çalışan bir GitOps operatörü bu dosyaları izler, canlı ortamla karşılaştırır ve gerekli değişiklikleri uygular.
GitOps Nedir?
GitOps, Git’i uygulama ve altyapı yapılandırmaları için merkezi doğruluk kaynağı olarak kullanan operasyon yöntemidir. Sistemde yapılmak istenen değişiklik önce Git deposundaki tanımlara eklenir.
Değişiklik kod incelemesi ve otomatik kontrollerden geçtikten sonra ana dala birleştirilir. GitOps aracı yeni durumu algılayarak canlı sistemi bu tanıma uygun hale getirir.
GitOps ile yönetilebilecek kaynaklara şunlar örnek verilebilir:
- Kubernetes uygulamaları
- Uygulama yapılandırmaları
- Servis ve ağ tanımları
- Dağıtım sürümleri
- Helm paketleri
- Güvenlik politikaları
- İzleme ve alarm ayarları
- Bulut altyapısı
- Veritabanı bağlantı yapılandırmaları
- Platform servisleri
CNCF Cloud Native Glossary, GitOps’u sürüm kontrol sisteminde tanımlanan istenen durumla gerçek sistem durumunu sürekli karşılaştıran ve aradaki farklılıkları uzlaştıran uygulamalar bütünü olarak tanımlamaktadır.
GitOps Nasıl Çalışır?
Tipik bir GitOps süreci şu şekilde ilerler:
- Geliştirici uygulamanın yeni sürümünü hazırlar.
- CI sistemi uygulamayı test eder ve container imajını üretir.
- Dağıtım deposundaki sürüm bilgisi değiştirilir.
- Değişiklik için bir pull request açılır.
- Otomatik testler ve politika kontrolleri çalıştırılır.
- Ekip üyeleri değişikliği inceler ve onaylar.
- Değişiklik ana dala birleştirilir.
- GitOps operatörü yeni tanımı algılar.
- Canlı ortam istenen durumla eşleştirilir.
- Dağıtımın sağlık durumu izlenir ve raporlanır.
Bu süreçte Git deposu ne çalışması gerektiğini, canlı ortam ise gerçekte ne çalıştığını gösterir. GitOps operatörü iki durum arasındaki farkı sürekli kontrol eder.
GitOps’un Dört Temel İlkesi
OpenGitOps ilkelerine göre bir GitOps sisteminin dört temel özelliği bulunur.
Bildirimsel Olmalıdır
Sistemin istenen durumu adım adım komutlar yerine bildirimsel tanımlarla ifade edilmelidir. Yapılandırma, ulaşılmak istenen sonucu açıklamalıdır.
Sürümlenmiş ve Değiştirilemez Olmalıdır
İstenen durum sürüm geçmişini koruyan bir sistemde saklanmalıdır. Böylece değişikliklerin geçmişi görülebilir ve önceki sürümlere ulaşılabilir.
Otomatik Olarak Alınmalıdır
Yazılım ajanları istenen durum tanımlarını kaynaktan otomatik olarak almalıdır. Üretim sunucusuna elle komut gönderme ihtiyacı azaltılmalıdır.
Sürekli Uzlaştırılmalıdır
GitOps operatörü gerçek ortamı sürekli gözlemlemeli ve Git’te tanımlanan istenen durumla eşleştirmeye çalışmalıdır.
GitOps ile CI/CD Arasındaki Fark Nedir?
CI/CD ve GitOps birbirlerinin yerine geçen teknolojiler değildir.
Continuous Integration yani CI; kod değişikliklerinin derlenmesi, test edilmesi ve dağıtıma hazır bir çıktı oluşturulmasıyla ilgilenir.
Continuous Delivery veya Deployment yani CD ise bu çıktının hedef ortama ulaştırılmasını yönetir.
GitOps, özellikle dağıtım aşamasında istenen sistem durumunun Git üzerinden yönetilmesini ve canlı ortamla sürekli eşleştirilmesini sağlar.
Örnek bir iş bölümü şu şekildedir:
- CI: Uygulamayı test eder.
- CI: Container imajını oluşturur.
- CI: İmajı güvenlik taramasından geçirir.
- CI: İmajı kayıt sistemine gönderir.
- GitOps: Dağıtım deposundaki sürümü takip eder.
- GitOps: Yeni sürümü hedef ortama uygular.
- GitOps: Canlı ortamı istenen durumla eşleştirir.
Modern Dağıtımları Güçlendiren 7 Kritik GitOps Avantajı
1. Git Deposunu Merkezi Doğruluk Kaynağı Yapar
GitOps yaklaşımında canlı ortamın istenen yapılandırması Git deposunda tanımlanır. Ekip üyeleri sistemin nasıl çalışması gerektiğini anlamak için dağınık dokümanlar veya kişisel komut geçmişleri yerine ortak depoyu inceleyebilir.
Merkezi doğruluk kaynağı şu sorulara cevap verebilir:
- Üretimde hangi uygulama sürümü çalışmalı?
- Kaç uygulama örneği bulunmalı?
- Hangi servisler dışarıya açık olmalı?
- Hangi kaynak sınırları uygulanmalı?
- Son değişiklik kim tarafından yapıldı?
- Değişiklik neden gerçekleştirildi?
Git dışından yapılan manuel değişiklikler kalıcı doğruluk kaynağı olarak kabul edilmez. İstenen değişikliğin önce Git deposuna eklenmesi gerekir.
2. Yapılandırma Sapmasını Otomatik Olarak Belirler
Canlı ortamda yapılan manuel değişiklikler veya beklenmeyen sistem olayları Git’te tanımlanan durumdan farklılık oluşturabilir. Bu durum yapılandırma sapması olarak adlandırılır.
GitOps operatörü gerçek sistem durumunu düzenli olarak kontrol eder. Farklılık tespit ettiğinde sistemi yeniden istenen duruma getirebilir veya ekibe uyarı gönderebilir.
Örneğin Git deposunda üç uygulama örneği tanımlanmış ancak canlı ortamda yalnızca iki örnek çalışıyorsa operatör eksik örneği yeniden oluşturabilir.
Bu özellik otomatik iyileşme sağlayabilir. Ancak veritabanı veya kalıcı veri içeren sistemlerde bütün düzeltmelerin güvenli biçimde otomatikleştirilemeyeceği unutulmamalıdır.
3. Değişiklikleri İzlenebilir ve Denetlenebilir Hale Getirir
Üretim sisteminde doğrudan komut çalıştırıldığında değişikliğin ayrıntıları kaybolabilir. GitOps kullanıldığında yapılandırma değişiklikleri commit geçmişinde saklanır.
Git üzerinden şu bilgiler görülebilir:
- Değişikliği yapan kişi
- Değiştirilen dosyalar
- Eski ve yeni değerler
- Yapılan açıklama
- İnceleyen ekip üyeleri
- Otomatik test sonuçları
- Değişikliğin zamanı
Bu kayıtlar hata araştırma ve uyumluluk denetimleri için yararlıdır. Ancak Git geçmişinin tek başına bütün çalışma zamanı olaylarını göstermediği unutulmamalıdır. Sistem logları ve denetim kayıtları da saklanmalıdır.
4. Kod İncelemesiyle Daha Güvenli Dağıtım Sağlar
GitOps modelinde üretim değişiklikleri pull request veya merge request üzerinden incelenebilir. Kritik bir kaynak değerinin yanlışlıkla değiştirilmesi, başka ekip üyeleri tarafından uygulamadan önce fark edilebilir.
Değişiklik sürecine şu kontroller eklenebilir:
- Dosya sözdizimi doğrulaması
- Güvenlik politikası kontrolü
- Kaynak limiti kontrolü
- Yasaklı servis türlerinin engellenmesi
- Container imajı güvenlik taraması
- İmza ve kaynak doğrulaması
- Maliyet tahmini
- Gerekli ekip onayları
GitOps her değişikliği otomatik olarak güvenli yapmaz. Zayıf inceleme kuralları veya ele geçirilmiş Git hesapları üretim ortamı için risk oluşturabilir. Çok faktörlü kimlik doğrulama ve dal koruma kuralları uygulanmalıdır.
5. Geri Alma ve Kurtarma Süreçlerini Kolaylaştırır
Yeni bir dağıtım problem oluşturduğunda Git deposundaki önceki çalışan yapılandırmaya geri dönülebilir. GitOps operatörü geri alınan durumu algılayarak hedef ortama uygular.
Geri alma işlemi genellikle şu şekilde yapılır:
- Hatalı değişiklik belirlenir.
- Önceki commit veya yapılandırma bulunur.
- Değişiklik tersine çevrilir.
- Yeni geri alma commit’i incelenir.
- GitOps aracı önceki durumu canlı ortama uygular.
- Uygulamanın sağlık kontrolleri izlenir.
Ancak yalnızca uygulama sürümünü geri almak her zaman yeterli değildir. Geriye uyumlu olmayan veritabanı değişiklikleri için ayrıca geçiş ve kurtarma planı hazırlanmalıdır.
6. Birden Fazla Ortamda Tutarlılık Sağlar
Geliştirme, test ve üretim ortamları farklı yapılandırmalara ihtiyaç duysa da ortak bir temel kullanabilir. GitOps depoları ortamlar arasındaki farkların açıkça görülmesini sağlar.
Ortak uygulama tanımı üzerine ortama özel değerler eklenebilir:
- Uygulama örneği sayısı
- CPU ve bellek sınırları
- Alan adı
- Otomatik ölçeklendirme ayarları
- İzleme seviyesi
- Özellik bayrakları
- Bölge bilgileri
Aynı yaklaşım çok sayıda Kubernetes kümesinin yönetilmesinde de kullanılabilir. Ancak depoların ve ortam klasörlerinin anlaşılır biçimde düzenlenmesi gerekir.
7. Üretim Ortamına Doğrudan Erişimi Azaltır
Geleneksel push tabanlı dağıtımlarda CI/CD sisteminin üretim kümesine erişim bilgileri taşıması gerekebilir. GitOps’un yaygın pull modelinde hedef ortamda çalışan operatör, gerekli tanımları güvenilir kaynaktan alır.
Bu yaklaşım CI sistemine verilen üretim yetkilerinin azaltılmasına yardımcı olabilir. Her GitOps operatörüne yalnızca yönettiği kaynaklar için gereken en düşük izin verilmelidir.
Güvenlik için ayrıca:
- Depo erişimleri sınırlandırılmalıdır.
- Commit imzaları değerlendirilebilir.
- Dal koruma kuralları uygulanmalıdır.
- GitOps operatörü RBAC ile sınırlandırılmalıdır.
- Hassas veriler düz metin saklanmamalıdır.
- Dağıtım kaynaklarının bütünlüğü doğrulanmalıdır.
- Operatör ve küme logları izlenmelidir.
GitOps ile Infrastructure as Code Arasındaki Fark
Infrastructure as Code, sunucu, ağ ve veritabanı gibi altyapı kaynaklarının kodla tanımlanmasına odaklanır. GitOps ise bildirimsel tanımlanan altyapı ve uygulamaların canlı ortamla sürekli olarak eşleştirilmesini sağlayan operasyon modelidir.
Basit şekilde:
- IaC, altyapıyı kodla tanımlar.
- GitOps, tanımlanan durumu sürüm kontrolü ve sürekli uzlaştırma ile işletir.
Bu iki yaklaşım birlikte kullanılabilir. Terraform dosyaları Git deposunda saklanabilir ve kontrollü bir GitOps iş akışıyla uygulanabilir. Ayrıntılı bilgi için Infrastructure as Code rehberini inceleyebilirsiniz.
Argo CD Nedir?
Argo CD, Kubernetes için geliştirilen bildirimsel bir GitOps sürekli dağıtım aracıdır. Git deposundaki uygulama tanımlarını Kubernetes ortamıyla karşılaştırır ve senkronizasyon durumunu gösterir.
Argo CD aşağıdaki yetenekleri sunabilir:
- Git deposunu izleme
- Otomatik veya manuel senkronizasyon
- Uygulama sağlık durumunu gösterme
- Yapılandırma farklılıklarını belirleme
- Rol tabanlı erişim kontrolü
- Çoklu küme yönetimi
- Web arayüzü ve komut satırı araçları
Resmî Argo CD belgeleri, uygulama tanımlarının bildirimsel, sürüm kontrollü ve yaşam döngüsü yönetiminin otomatik olması gerektiğini belirtmektedir.
Flux Nedir?
Flux, Kubernetes kümelerini Git depoları ve diğer yapılandırma kaynaklarıyla eşleştirmek için kullanılan açık kaynaklı GitOps çözümüdür.
Flux; GitRepository, Kustomization ve HelmRelease gibi Kubernetes kaynakları üzerinden çalışabilir. Farklı bileşenlerden oluşan modüler bir yapıya sahiptir.
Flux belgelerine göre araç, kümeleri Git gibi yapılandırma kaynaklarıyla senkronize tutabilir ve yeni uygulama sürümleri çıktığında yapılandırma güncellemelerini otomatikleştirebilir.
Argo CD ile Flux arasında seçim yapılırken ekip deneyimi, arayüz ihtiyacı, çoklu küme yapısı ve mevcut araçlarla entegrasyon değerlendirilmelidir.
GitOps ve Secret Yönetimi
Parolalar, API anahtarları ve sertifikalar Git deposuna açık metin olarak yazılmamalıdır. Özel depo kullanılması tek başına yeterli güvenlik sağlamaz. Yanlış izin veya hesap ihlali sonucunda hassas bilgiler açığa çıkabilir.
Kullanılabilecek yöntemler şunlardır:
- Harici secret manager kullanmak
- Şifrelenmiş secret dosyaları saklamak
- Anahtar yönetim sistemiyle çözme işlemi yapmak
- Kısa ömürlü kimlik bilgileri kullanmak
- Depolara otomatik secret taraması uygulamak
- Erişim ve çözme yetkilerini ayırmak
Secret şifreleme anahtarları şifreli dosyalarla aynı yerde ve aynı yetkilerle saklanmamalıdır.
Örnek GitOps Dağıtım Senaryosu
Bir e-ticaret uygulamasının 2.4 sürümünden 2.5 sürümüne geçirileceğini düşünelim. CI sistemi yeni kodu test eder, güvenlik taramasından geçirir ve container imajını kayıt sistemine gönderir.
Dağıtım deposundaki imaj sürümü 2.5 olarak değiştirilir. Açılan pull request içerisinde değişiklik planı, test sonuçları ve güvenlik kontrolleri görüntülenir.
Değişiklik onaylanarak ana dala alındığında GitOps operatörü yeni sürümü test ortamına dağıtır. Sağlık kontrolleri başarılıysa üretim ortamının tanımı da güncellenir.
Yeni sürümde hata oranı yükselirse yapılandırma önceki çalışan sürüme döndürülebilir. Bütün değişiklikler Git geçmişinde kayıtlı kalır.
GitOps Kullanmanın Zorlukları
GitOps önemli avantajlar sağlasa da operasyonel planlama gerektirir.
Karşılaşılabilecek zorluklar şunlardır:
- Depo yapısının karmaşıklaşması
- Secret yönetimi
- Git ve canlı ortam arasındaki hata ayıklama süreci
- Operatör yetkilerinin güvenli yönetilmesi
- Çok fazla ortam ve kümenin takip edilmesi
- Manuel müdahale alışkanlığının bırakılması
- Veritabanı geçişlerinin yönetilmesi
- Git hizmeti kesintilerine karşı planlama
- Ekiplerin yeni çalışma yöntemini öğrenmesi
GitOps yalnızca bir araç kurmak değildir. Değişiklik yönetimi, kod incelemesi ve üretim erişimi gibi ekip alışkanlıklarının da yeniden düzenlenmesini gerektirir.
GitOps Kurarken Yapılan Hatalar
Yaygın hatalar şunlardır:
- Git deposuna parola veya anahtar yazmak
- Git dışından sürekli manuel değişiklik yapmak
- Dal koruma kuralları kullanmamak
- Operatöre gereğinden fazla yetki vermek
- Test ve üretim ortamlarını ayırmamak
- Bütün uygulamaları aynı anda GitOps’a geçirmek
- Geri alma sürecini test etmemek
- Veritabanı değişikliklerini dikkate almamak
- Sistem sağlık kontrolleri oluşturmamak
- GitOps operatörünü izlememek
- Başarı ölçütleri belirlememek
GitOps sistemi dağıtımı otomatikleştirdiği için yanlış bir yapılandırmayı da hızlı biçimde uygulayabilir. Otomatik testler ve kontrollü onay süreçleri bu nedenle önemlidir.
30 Günde GitOps’a Nasıl Geçilir?
İlk hafta mevcut dağıtım süreci ve manuel işlemler listelenebilir. Kritik olmayan bir Kubernetes uygulaması pilot olarak seçilebilir.
İkinci hafta uygulamanın bildirimsel yapılandırmaları ayrı bir Git deposuna alınabilir. Dal koruması, kod incelemesi ve otomatik doğrulama kuralları hazırlanabilir.
Üçüncü hafta Argo CD veya Flux gibi bir GitOps aracı pilot ortama kurulabilir. Senkronizasyon ve yapılandırma sapması senaryoları test edilebilir.
Dördüncü hafta geri alma, secret yönetimi, izleme ve olay müdahale süreçleri hazırlanabilir. Pilot sonuçları değerlendirildikten sonra diğer uygulamalar aşamalı biçimde sisteme alınabilir.
Sıkça Sorulan Sorular
GitOps ne anlama gelir?
GitOps, uygulama ve altyapı yapılandırmalarının Git üzerinden yönetildiği ve canlı ortamın bu tanımlarla sürekli eşleştirildiği operasyon yaklaşımıdır.
GitOps yalnızca Kubernetes için mi kullanılır?
GitOps en yaygın olarak Kubernetes ortamlarında kullanılır. Ancak bildirimsel olarak tanımlanabilen farklı altyapı ve uygulama sistemlerine de uygulanabilir.
GitOps bir CI/CD aracı mıdır?
GitOps, CI/CD süreçlerini tamamlayan bir dağıtım ve operasyon modelidir. Argo CD ve Flux gibi araçlar GitOps tabanlı sürekli dağıtım sağlar.
GitOps için Argo CD mi yoksa Flux mı kullanılmalı?
Seçim ekibin ihtiyaçlarına bağlıdır. Argo CD güçlü bir kullanıcı arayüzü sunarken Flux Kubernetes kaynaklarıyla bütünleşen modüler bir yaklaşım sağlar.
GitOps kullanırken üretime elle müdahale edilebilir mi?
Acil durumlarda müdahale gerekebilir. Ancak yapılan kalıcı değişiklik Git deposuna da eklenmezse operatör sistemi tekrar Git’teki eski duruma getirebilir.
Sonuç
GitOps; sürüm kontrolü, bildirimsel yapılandırma ve sürekli uzlaştırma ilkelerini bir araya getirerek uygulama ve altyapı dağıtımlarını daha izlenebilir hale getirir.
Merkezi doğruluk kaynağı, otomatik sapma düzeltme, kolay geri alma, kod incelemesi ve ortam tutarlılığı yaklaşımın en önemli avantajlarıdır.
Başarılı bir GitOps dönüşümü için küçük bir pilot uygulamayla başlanmalı, secret yönetimi doğru planlanmalı ve üretim değişikliklerinin Git üzerinden gerçekleştirilmesi ekip kültürü haline getirilmelidir.
