infolightbulb_outlinenew_releasesreportwarning

Kubernetes, Mikroservisler ve Konteynerler

Doruk Fişek

Bütünleşik (Monolithic) Yazılımlar

  • Yazılım geliştirmenin ilk dönemlerinin "normali"

  • Büyük tek bir kod ağacı var.

  • Tüm işlevler birbirine sıkı sıkıya bağlı: Birimiz hepimiz, hepimiz birimiz için

  • Tek bir bütün servis çalışıyor

  • Yazılımın büyüklüğü ve yazılımcı sayısı artınca sorunlar artıyor.

Bölelim ve Yönetelim (Mikro/Makro Servisler)

  • Yazılımı birden fazla parçaya bölelim.

  • Yazılımlar arasında veri paylaşımı için standartlar (SOAP, REST API vs) belirleyelim.

  • Yazılımlar bu standartlar dahilinde istedikleri gibi "takılsınlar"

  • Birbiriyle beraber çalışması gereken yazılım sayısı artınca bu yapı da kendi sorunlarını oluşturdu.

Bölünen Yazılımların Beraber Yönetimi

  • r1: Kocaman bir donanım alalım, tüm servisler tek bir işletim sistemi üzerinde çalışsın.

  • r2: Daha çok sayıda daha küçük donanımlar alalım, servisleri ayrı donanımlara bölelim.

  • r3: Çok sayıda donanım yönetmesi dert oluyor, büyük donanımlara geri dönelim ama sanal makineler kullanalım.

  • r4: Çok sayıda donanımda çok sayıda sanal makine yönetmek zor oluyor. Bulutlaşalım.

  • r5: Sırf yazılımları birbirinden izole edeceğim sanal makine hem donanım hem bakım maliyetine yol açıyor. Konteynerleşelim.

Konteyner Nedir?

  • Bir uygulama ihtiyaç duyacağı tüm parçalar ile beraber bir imaj olarak paketlenir.

  • İmaj izole bir konteyner içerisinde çalıştırılır.

  • Linux’un kontrol grupları (cgroups) ve süreç izolasyonu altyapısını kullanır.

  • Her bir konteyner ana işletim sisteminin temel işlevlerini ortak kullanır.

  • İmaj sabit ve değişmeyen bir dosyadır.

Soru(n)lar

  • Konteyner çalışırken oluşturulan dosyalar ne olacak?

  • Konteyner içine nasıl uygulama kuracağım?

  • Konteynerin ürettiği loglar ne olacak?

  • Konteyneri nasıl izleyeceğim? (monitoring)

  • Konteynerin yedeklenmesi?

  • Farklı konteynerde çalışan uygulamalar nasıl birbiriyle haberleşecek?

  • Konteyneri nasıl güncelleyeceğim?

  • Konteyner çalışırken başka konteynerlere ihtiyaç duyuyorsa?

  • Aynı imajı bir-iki ayar farklılığı var diye baştan mı oluşturacağım?

  • ve daha niceleri :)

Konteyner Yönetiminin Gelişimi

  • 2008: LXC, Linux’a cgroups desteğinin gelmesi ile konteyner yönetimi başlar.

  • 2009: Apache Mesos veri merkezi (DC) yönetimi odaklı. VM de yönetebiliyor. Çok ağır siklet. Zor öğreniliyor.

  • 2013: Docker birçok yeniliği getirdi:

    • Dockerfile ile kolay imaj üretilmesi.

    • Dockerhub ile merkezi imaj deposu.

    • Taşınabilir (portable) imajlar.

    • Geliştirici ortamına kolay kurulum.

  • 2014: Kubernetes, konteyner sayısı arttığında yapılması gerekenleri bir "dağıtım" halinde sunuyor.

Konteynerlerin Avantajları

  • Konteyner imajı sabittir (immutable). Güvenlik avantajı sağlar.

  • İmaj her yerde aynı şekilde çalışır. Test ve hata ayıklama kolaylığı sağlar.

  • Daha az kaynak tüketir.

  • Aynı konteyner imaj dosyasından n tane konteyner çalıştırılabilir.

  • Geliştiriciler "self-servis" uygulama çalıştırabilir. Sürekli sistem yöneticisinin kapısını çalmazlar.

Konteynerlerin Verimli Kullanımı için Ne Gerekli?

  • El değmeden sıfırdan otomatik kurulabilen yazılım parçaları

  • "Stateless" çalışan yazılım parçaları

  • Geliştirme, test etme ve işletmenin farklı kişiler tarafından yapılması

  • Yazılım yaşam döngüsü (SDLC) süreçlerinin oturmuş olması

Ne Zaman Ne Kullanmalı?

  • Fiziksel makine? Sanal makine?

  • Sanal makine? Konteyner?

  • Docker? Kubernetes? Başka bir araç?

Sorular

soru isaretleri