Değiştirilemez altyapı nedir? Sunucuyu yamamak yerine yenisiyle değiştirmek
Değiştirilemez altyapı, sunucuları canlıda yamamak yerine yeni imajla değiştirme yaklaşımıdır. Nasıl çalıştığını, avantajlarını ve sınırlarını öğrenin.
Değiştirilemez altyapı nedir?
Değiştirilemez altyapı (immutable infrastructure), bir sunucu ya da konteyner bir kez devreye alındıktan sonra üzerinde hiçbir değişiklik yapılmadığı yaklaşımdır. Bir güncelleme, güvenlik yaması ya da ayar değişikliği gerektiğinde çalışan makineye bağlanılmaz. Bunun yerine değişiklik içeren yeni bir imaj üretilir, yeni örnekler bu imajdan başlatılır ve eskileri kapatılır.
Temel fikir şudur: üretimdeki bir sunucu bir kez dağıtıldı mı, kimliği sabittir. Değişim istiyorsanız onu onarmazsınız, değiştirirsiniz.
Değiştirilebilir (mutable) altyapıdan farkı
Geleneksel yaklaşımda sistem yöneticisi sunucuya uzaktan bağlanır, paket günceller, yapılandırma dosyasını elle düzenler ve servisi yeniden başlatır. Bu biçime değiştirilebilir (mutable) altyapı denir. Zamanla aynı roldeki sunucular birbirinden farklılaşır. Hangi sunucuda hangi yamanın olduğu, hangi ayarın elle değiştirildiği kayıt altında kalmaz.
Bu duruma yapılandırma kayması (configuration drift) denir. Kayma biriktikçe aynı yazılım bir sunucuda çalışıp diğerinde çalışmaz, hata ayıklama zorlaşır ve her sunucu kendine özgü bir kar tanesi (snowflake server) haline gelir. Değiştirilemez yaklaşımda tüm örnekler aynı imajdan geldiği için bu sorun yapısal olarak azalır.
Nasıl çalışır? Adım adım akış
Tipik bir akış şöyle işler:
- Altyapı ve uygulama tanımı kodla yazılır ve sürüm kontrolünde tutulur.
- Bir derleme hattı, işletim sistemi, bağımlılıklar ve uygulamayı içeren yeni bir makine imajı ya da konteyner imajı üretir.
- İmaj test edilir, sürüm etiketi alır ve bir kayıt defterine konur.
- Dağıtım aracı yeni imajdan örnekler başlatır. Trafik kademeli olarak (rolling) ya da mavi-yeşil (blue-green) düzenle yeni örneklere kaydırılır.
- Sağlık kontrolleri geçilirse eski örnekler kapatılır.
Bir sorun çıkarsa geri dönüş de aynı mantıkla yapılır: önceki imaj tekrar devreye alınır. Bu, canlı sunucuda yapılan değişiklikleri tek tek geri almaya göre çok daha öngörülebilirdir.
Hangi araçlarla uygulanır?
Yaklaşım belirli bir ürüne bağlı değildir. Konteyner imajları (ör. Docker) ve onları yöneten orkestrasyon araçları en bilinen örnektir. Sanal makine tarafında imaj üreten araçlar, bulut sağlayıcıların makine imajı hizmetleri ve Terraform gibi altyapıyı kodla tanımlayan araçlar bu düzenin parçalarıdır.
Terraform gibi bir araç, hangi kaynakların var olması gerektiğini bildirimsel olarak yazmanızı sağlar. Bir imaj sürümü değiştiğinde yeni kaynak oluşturulur ve eskisi kaldırılır. Bu yüzden altyapıyı kodla yönetmek (Infrastructure as Code) değiştirilemez yaklaşımın doğal tamamlayıcısıdır.
Sağladığı yararlar ve getirdiği sınırlar
Yararlar: ortamlar arası tutarlılık, tekrarlanabilir kurulum, daha kolay geri dönüş, denetlenebilirlik (üretimde ne çalıştığı imaj sürümünden bellidir) ve elle yapılan riskli müdahalelerin azalması.
Sınırlar: Durum bilgisi tutan bileşenler (veritabanları, dosya depolama) bu şekilde değiştirilemez, bu veriyi imajın dışında, kalıcı disklerde ya da yönetilen hizmetlerde tutmak gerekir. Sır ve ayar bilgileri imaja gömülmemeli, çalışma zamanında dışarıdan verilmelidir. Küçük bir ayar için bile yeni imaj üretmek derleme hattının hızına bağımlıdır. Ekibin imaj üretimi ve dağıtım otomasyonunda olgun olması beklenir.
Sık yapılan hatalar
- Canlı sunucuya yine de uzaktan bağlanıp elle düzeltme yapmak: bu, değiştirilemezliği fiilen bozar ve kaymayı geri getirir.
- Veriyi örneğin yerel diskinde tutmak: örnek değiştirildiğinde veri kaybolur.
- Sürümlenmemiş imajlar kullanmak: son sürüm etiketi ile dağıtım yapılırsa hangi imajın çalıştığı bilinmez.
- Yalnızca imaj üretmeyi otomatikleştirip testi atlamak: hatalı imaj hızla tüm ortama yayılır.
Önlem olarak üretim erişimi kısıtlanır, tüm değişiklik hat üzerinden geçirilir ve imaj, dağıtımdan önce otomatik testlerden geçer.
Mindset programlarında ilgili temel
Terraform ile Altyapı Otomasyonu programı, durum yönetimi, modüler mimari ve CI/CD ile altyapı iş akışları gibi başlıkları kapsar. Değiştirilemez yaklaşımın dayandığı kodla altyapı yönetimi becerisi bu içeriklerle ilgilidir. IaC Test Stratejileri ve Terratest Uygulamaları programı ise geçici ortamlar ve pipeline entegrasyonu üzerinden altyapıyı otomatik doğrulamayı ele alır.
Platform, DevOps ve bulut ekipleri için bu içerikler, ortak altyapı kodu standardı kurma ve değişiklikleri pipeline üzerinden geçirme alışkanlığını yerleştirmek açısından uygundur.
İlgili Mindset programı
Terraform ile Altyapı Otomasyonu
Sık sorulan sorular
Değiştirilemez altyapıda güvenlik yaması nasıl uygulanır?
Çalışan sunucuya bağlanıp yama yüklenmez. Yama, yeni imaj sürümüne dahil edilir, imaj test edilir ve yeni örnekler bu imajdan başlatılır. Eski örnekler kapatılınca yama tüm filoya uygulanmış olur. Böylece hangi sunucuda yamanın olup olmadığı belirsizliği ortadan kalkar.
Veritabanı da değiştirilemez olabilir mi?
Genellikle olmaz. Veritabanı kalıcı durum tuttuğu için onu her sürümde yok edip yeniden oluşturmak mümkün değildir. Uygulama katmanı değiştirilemez tutulur, veri ise ayrı kalıcı depolamada ya da yönetilen bir veritabanı hizmetinde saklanır. Şema değişiklikleri ise ayrı bir geçiş sürecinden yönetilir.
Immutable infrastructure ile Infrastructure as Code aynı şey mi?
Hayır. Infrastructure as Code, altyapıyı kodla tanımlama pratiğidir. Değiştirilemez altyapı ise o altyapının nasıl güncelleneceğine dair bir ilkedir: yerinde değiştirme değil, yenisiyle değiştirme. Birlikte kullanılırlar, ancak kodla yönetilen altyapı yerinde değişikliğe de izin verebilir.
Küçük bir ekip için uygun mudur?
Konteyner ve yönetilen hizmetler sayesinde küçük ekipler için de uygulanabilir, ancak imaj hattının kurulması ilk başta emek ister. Ortam sayısı arttıkça ve dağıtım sıklaştıkça kazancı belirginleşir. Çok küçük ve nadiren değişen sistemlerde yatırımın karşılığı sınırlı olabilir.