Değiştirilemez Altyapı
- İngilizcesi
- Immutable Infrastructure
- Türkçe karşılığı
- değişmez altyapı
- Okunuşu
- imyutıbıl infrıstrakçır
Günlük kullanımda çoğunlukla İngilizcesi tercih edilir.
Kısaca
Değiştirilemez altyapı, sunucuların dağıtımdan sonra hiç değiştirilmediği, her güncellemede yerlerine sıfırdan kurulan yenilerinin geldiği bir yaklaşımdır.
Değiştirilemez altyapı (immutable infrastructure) nedir?
Değiştirilemez altyapı, bir sunucu, sanal makine ya da konteyner bir kez dağıtıldıktan sonra kimsenin onu değiştirmemesi demektir. Yerinde paket yükseltmesi, yapılandırma düzenlemesi ya da SSH üzerinden hızlı düzeltme yoktur. Bir güvenlik yaması, yeni bir uygulama sürümü ya da bir ayar gibi bir şeyin değişmesi gerektiğinde ekip yeni bir imaj oluşturur, ondan yeni örnekler dağıtır ve eskileri yok eder.
Süreç, sürüm kontrolündeki dosyalardan bir CI pipeline'ı tarafından otomatik oluşturulan, konteyner imajı veya sanal makine imajı gibi bir imajla başlar. Bu imajın kendisi test edilir ve ardından değiştirilmeden staging'den canlıya terfi ettirilir; böylece test edilen şey tam olarak çalışan şeydir. Her örnek aynı imajdan geldiği için aylar boyunca sunucuların elle yama yapılmasıyla oluşan yavaş ayrışma olan yapılandırma kayması (configuration drift) yoktur ve rollback, önceki imajı yeniden dağıtmak kadar basittir.
Popüler bir karşılaştırma evcil hayvanlar ile sığırlardır (pets versus cattle): değiştirilebilir bir sunucu hastalandığında bakılıp iyileştirilen bir evcil hayvandır, değiştirilemez sunucular ise törensizce yenilenen sığırlardır. Konteynerler bu tarzı varsayılan hale getirdi, çünkü Kubernetes pod'ları düzenlemek yerine değiştirir; aynı fikir otomatik ölçekleme gruplarının arkasındaki sanal makinelerle de çalışır. Veritabanları ve yüklenen dosyalar gibi kalıcı veriler, değiştirilebilir örneklerin dışında, yönetilen veritabanlarında ya da nesne depolamada yaşamalıdır; yoksa her dağıtımda kaybolur.
Değiştirilemez altyapı sıklıkla kod olarak altyapıyla karıştırılır. Kod olarak altyapı altyapıyı dosyalarda tarif eder ve bu dosyalar sunucuları değiştirmek ya da yerinde düzenlemek için kullanılabilir; değiştirilemez altyapı ise her zaman değiştirme kararıdır. Ayrıca, araçların uzun ömürlü sunuculara bağlanıp onları istenen duruma uygun olacak şekilde güncellediği geleneksel yapılandırma yönetiminin de karşıtıdır.
Önemli noktalar
- Sunucular ve konteynerler dağıtıldıktan sonra asla değiştirilmez.
- Her değişiklik yeni bir imaj üretir; eski örnekler yamalanmaz, değiştirilir.
- Aynı test edilmiş imaj, staging ve canlı ortam arasında değişmeden ilerler.
- Yapılandırma kaymasını ortadan kaldırır ve rollback'leri basitleştirir.
- Kalıcı veriler, değiştirilebilir örneklerin dışında saklanmalıdır.
Örnek
# Build a new image for every change, tagged with its commit
docker build -t registry.example.com/web:3f9c2ab .
docker push registry.example.com/web:3f9c2ab
# Replace the running instances with the new image
kubectl set image deployment/web web=registry.example.com/web:3f9c2ab
# Rolling back means redeploying the previous, unchanged image
kubectl set image deployment/web web=registry.example.com/web:a71d0e4Sık sorulan sorular
Değiştirilebilir ve değiştirilemez altyapı arasındaki fark nedir?
Değiştirilebilir altyapıda sunucular uzun süre yaşar ve yamalar ile yapılandırma değişiklikleriyle yerinde güncellenir. Değiştirilemez altyapıda ise sunucular asla değiştirilmez; her güncelleme onları yeni bir imajdan oluşturulmuş yeni örneklerle değiştirir.
Değiştirilemez bir sunucudaki hata nasıl düzeltilir?
Çalışan sunucuyu düzenlemezsiniz. Kodu ya da yapılandırmayı sürüm kontrolünde düzeltir, yeni bir imaj oluşturur ve dağıtırsınız; bu da eski örnekleri değiştirir. Bir kopya üzerinde hata ayıklamaya hâlâ devam edebilirsiniz, ancak düzeltme her zaman pipeline'dan geçer.
Değiştirilemez altyapı, konteyner kullanmakla aynı şey midir?
Hayır, ancak konteynerler bunu kolaylaştırır. Yaklaşım sanal makine imajlarıyla da çalışır ve biri konteynerin başlamasından sonra içindeki dosyaları değiştirirse konteyner yine değiştirilebilir sayılabilir, ancak bu tavsiye edilmez.
İlgili sayfalar
- Kod Olarak AltyapıDevOps ve Bulut, s. 27Kod olarak altyapı, sunucuları, ağları ve diğer altyapıyı araçların otomatik uyguladığı, sürüm kontrolündeki dosyalarda tanımlama pratiğidir.
- Yapılandırma YönetimiDevOps ve Bulut, s. 53Yapılandırma yönetimi, sunucuların ve yazılımın istenen durumunu kodla tanımlama ve araçlarla bunu otomatik olarak uygulayıp koruma pratiğidir.
- KonteynerDevOps ve Bulut, s. 28Konteyner, bir uygulamayı bağımlılıklarıyla paketleyip ana makinenin paylaşılan işletim sistemi çekirdeği üzerinde çalıştıran hafif, yalıtılmış bir pakettir.
- DockerDevOps ve Bulut, s. 15Docker, bir uygulamayı ve ihtiyaç duyduğu her şeyi, her makinede aynı şekilde çalışan bir konteyner içinde paketlemeye yarayan açık kaynaklı bir platformdur.
- RollbackDevOps ve Bulut, s. 43Rollback, yeni bir dağıtım hatalara, kesintilere ya da beklenmedik başka sorunlara yol açtığında yazılımı önceki, sorunsuz sürüme döndürme işlemidir.
- DeğişmezlikProgramlamanın Temelleri, s. 11Değişmezlik, bir değerin oluşturulduktan sonra değiştirilememesi demektir; her güncelleme, orijinali yerinde değiştirmek yerine yeni bir değer üretir.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin