Son yıllarda, Terraform'un yükselişi (Pulumi gibi benzer araçların) Takımların altyapı kodlarını taşınmasına izin vermesi, altyapı deploymentlarında aynı yolla kodlarında taşınmasına izin vermelidir.
Pipeline da altyapı kodunu deploy edebiliyorsan, bu altyapı ve uygulama deploymentları bir seferde yapılabilirliğin önünü açmış olacak değildir.
Birçok takım tek bir pipeline yaratıyor ve bu pipeline içerisinde hem altyapıyı oluşturuyor ( Bir kubernetes cluster, container, registry v.b ) oluşturuyor ve uygulama bu pipeline en üstünde deploy ediliyor.
Bu teoride harika çalışsa da, (dağıtımlar, her biriyle sıfırdan başladığınız anlamına geldiği için) kaynaklar ve zaman açısından oldukça israftır.
Çoğu durumda, uygulama kodu altyapıdan çok daha hızlı değişecektir.
Tüm şirketler için genelleştirmek için çok zordur. ancak çoğu durumda uygulama değişim oranı Altyapıdan 2x-10 kat daha sık olabilir.
Her ikisini de yapan tek bir pipeline varsa, bu durumda asla basit bir şekilde altyapıyı kaldırıp/yeniden yaratamazsınız. Çünkü yeni bir versiyon deploy etmeye ihtiyacınız olacaktır.
Her şeyi (infra/app) dağıtan pipeline 30 dakika sürebilirken, bir pipeline yalnızca bir uygulama deploy etmesi sadece 5 dakikasını alır. Siz üzerinde herhangi bir altyapısal bir değişiklik sebebi olmayan sadece bir deployment adımı için 25 dakika fazladan harcamış olursunuz.
İkinci dezavantaj, tek bir pipeline kırılırsa, kimin bakması gerektiğinin net olmamasıdır.
Eğer bir geliştiriciysem ve uygulamamı Kubernetes'te dağıtmak istiyorsam, Terraform hataları, sanal ağlar veya depolama birimleri ilgilenmiyorum diyebilme hakkım oluşuyor.
DevOps'un amacı, geliştiricileri self servis araçlarla güçlendirmektir. Geliştiricileri zorlamamalı.
İhtiyaç duymadıklarında altyapıyla başa çıkmamalılar, yaptıkları işlemde ilgili değillerse geriye doğru bir bakacakları bir işlem olmamalıdır.
Doğru çözüm elbette dağıtım veya altyapıyı kendi sahip oldukları pipelinelarda bölmektir.
Altyapı pipeline’lar, uygulamadan daha az tetiklenecek ve Uygulama dağıtımları daha hızlı yaratılacaktır (oluşturma süresini kısaltacaktır).
Geliştiriciler ayrıca, uygulama pipeline bozulduğunda uğraşmalarına gerek olmadığını da bilecekler.
Altyapı hatalarıyla veya Kubernetes cluster nasıl oluşturulduğunu bilmelerine gerek yoktur.
Operatörler geliştiricileri hiç etkilemeden altyapı pipeline üzerinde ince ayar yapabilirler. Herkes bağımsız olarak çalışabilir.
Bazen şirketlerin bulunduğu bu anti-desenlerde (altyapıyı uygulamayla karıştırıldığını) görüyoruz.
Uygulamanın tarafından sağlanan bir şeye ihtiyacı olduğu için ilerlemenin tek yolu altyapı pipeline larda olmalıdır.
Klasik örnek, Terraform ile bir şeyler oluşturmak ve ardından çıktısını iletmektir. (örneğin bir IP adresi)
Uygulama koduna input olarak pipeline dinlemeli. Eğer sınırlamaya sahipseniz, önceki anti-desenden muzdarip olduğunuz anlamına gelir (Altyapının ayrıntılarına uygulama birleştirme sorunu ) ve bu sorunu kaldırmanız gerekir. (yani Uygulama kodunun dağıtılması için belirli bir IP adresine ihtiyaç duymamalıdır).
Aynı yaklaşımın veritabanı yükseltmelerine genişletilebileceğine dikkat edin. Eğer veritabanı değişiklikleri için pipeline kullanıyorsanız, uygulama kaynak kodundan bağımsız olmalıdırlar.
Yalnızca DB şemasını veya yalnızca uygulama kodunu kendi başına güncelleyebilmeniz gerekir,
Her dağıtım için her ikisini de yapmak zorunda kalmadan bu ayrım kullanılabilir olmalıdır.




Hiç yorum yok:
Yorum Gönder