Openshift üzerinde uygulamalarımızı ayağa kaldırmak için ne yapmamız gerektiğine bakacağız. Temelde burada öncelikle bir projemiz olması gerekiyor. Projemizin içerisine de uygulamalarımızı ekleyebiliyoruz.
Daha önce SCM (Sorce Code Management)’tan bahsetmiştik. Geliştirmelerimizi lokal veya dış repo’larda (Github, Bitbucket vb.) tutabiliyoruz. SCM aracılığıyla da bu entegrasyonu sağlayabiiyoruz. Openshift üzerinde bir uygulama eklemek istediğimizde:
- Uygulama ayağa kaldırmak istediğimizi Openshift’e iletiriz.
- Openshift tarafından otomatik olarak bir build create edilir.
- Uygulama bulunduğu Source Code Repository’den indirilir.
- Bundan bir Docker image oluşturulur.
- Oluşturulan bu image Docker Registry’ye push edilir.
- Bu işemden sonra deployment sürecine geçilir.
Build
Build etmek, bir konfigürasyon dosyasından image oluşturma işlemidir. Docker’dan aşina olduğumuz bir şey. Tıpkı Docker’da olduğu gibi burada da YAML dosyası olarak geliştirmeleri yapıyoruz. Syntax açısından farklılıklar var elbette; hatta Kubernetes’le de yazım açısından fark bulunuyor.
Build Trigger
Normal şartlar altında build işlemi manuel tetikleme ile yapılıyor. Bir CI/CD pipeline’ı kurduğunuzda değişikliğin otomatik olarak yansıtılmasını isteriz. Bu işlem nasıl gerekçekleşir ona bakalım.
- Developer kodunu değiştirip, code repository’ye push eder.
- Code repository’de değişiklik olduğuna dair Openshift’e mesaj gönderir.
- Mesaj geldiğinde ise Openshift otomatik build işlemini tetikler.
- Kod indirilir ve Docker image build edilir.
- Build edilen image deploy edilir.
Bu tür bir yapı kurgulamak için, yani bir değişiklik olduğunda repository’den bildirimin gitmesi için Webhook kullanılır. Webhook, GitHub gibi repo’larda kullanılabilir durumdadır. Kısaca tarif etmek gerekirse repo’da olan bir değişiklik durumunda, kendisine subscribe olan uygulamlara json formatında bir payload bilgilendirme mesajını Http Rest API ile tetikleyerek gönderen bir yapıdır. GitHub’ın konuyla ilgili desteğine bakmak için şu linke gidebilirsiniz: https://docs.github.com/en/developers/webhooks-and-events/about-webhooks
Deployment
Openshift’teki deploment, Kubernetes’e benzer. Kısaca durumu özetleyelim. Pod, container’ları içerisinde barındıran mantıksal bir kapsayıcıdır ve bir Pod ayağa kaldırdığınızda aslında ilgili servisler için gerekli container ayağa kalkmıştır.
Daha önce de dile getirdiğim gibi best practice olarak bir Pod içinde bir container olması tavsiye edilir. Bu durum genelde Pod’un fail olması durumunda içinde yer alan tüm container’lar çökeceği için, genel olarak bir tanesinin etkilenmesi tercih edilir.
Pod, container’ların ölçeklenebilmesi ve high availibility sağlamak için kullanılıyor. Burada da replication controller veya replica set’ler devreye giriyor. Eğer bir deployment kullanıyorsak, replica set, deploymentconfig kullanırsakta replication controller kullanılıyor. Arada ufak farklar olsa da temelde aynı amaca hizmet ediyorlar, istenilen sayıda kopyasını ayağa kaldırmak.
Deployment’ın bize en büyük katkısı Pod yaşam döngüsünü sağlıyor olmasıdır. Upgrade, rollback gibi işlemleri kolaylıkla yapmamızı sağlar. Projemize bir uygulama eklediğimizde otomatik olarak build ve deployment eklenir. Güncellememizde ise bu işlemi normalde manuel yaparız; ama trigger ayarlayarak bu süreçleri güncelleme olduğunda otomatikleştirebiliyoruz.
Deployment Strategies
İki tip strateji mevcut. Recreate ve Rolling Update.
Recreate, önce eski sürümlerin kapatılması ve yeni sürümlerin deployment’ıdır. Rolling Update ise normalde birden fazla Pod’umuzun olduğu bir dünyada, eski Pod’lardan biri down edilir ve yeni Pod ayağa kaldırılır. Tek tek geçiş yapılır Pod’larda.
Tahmin edeceğiniz gibi recreate ile kesinti oluşur ve kullanıcılara durum yansıtılır; ama rolling update ile tek tek geçiş olduğu için kullanıcı tarafından durum fark edilmez ve herhangi bir kesinti söz konusu değildir, tabii replica’mız 2 veya daha fazla ise.
Rolling update, Openshift tarafından deployment için default stratejidir. Bu yüzden normal şartlar altında replica sayınız 1’den fazlaysa çok fazla endişe edeceğiniz bir durum bulunmuyor.