Konteyner Orkestrasyonu


Konteyner Orkestrasyonu Nedir?
Konteyner orkestrasyonu, çalışan çok sayıda konteyner bulunduğu durumda, onları kolayca yönetmek ve idare etmek için bir yol olarak düşünülebilir.
Eğer uygulamanız sadece birkaç konteynerdan oluşuyorsa, yalnızca Docker komutları kullanarak bu konteynerları
çalıştırabilir, kurabilir ve yönetebilirsiniz. Fakat kurumsal uygulamalar onlarca hatta yüzlerce konteynerdan
oluşabilmektedirler. Bu durumda konteynerları yönetmek zamanla zorlaşmaktadır. Konteyner orkestrasyonu araçları bu
durumda devreye girer.
Bilgi Teknolojileri'nde, çok sayıda konteyner içeren ve sık devreye alım yapılan dinamik ortamlarda konteyner
orkestasyonunu kullanılmaktadır. Konteyner orkestrasyonu, konteynerların oluşturulması, devreye alınması, kaynakların
konteynerlar arasında uygun dağıtımı, konteynerlerin ihtiyaca göre ölçeklenmesi, bakım amaçlı ya da kaynak yetersizliği
dolayısıyla sunucular arasında kaydırılması, yük dengelenmesi ve host sunucular ile konteynerların sağlıklarının sürekli
izlenmesi gibi işleri otomatize edebilmek amacıyla kullanılmaktadır.

Konteyner Orkestrasyonu Nasıl Çalışır?
Konteyner orkestrasyonu için Kubernetes ve Docker Swarm gibi araçlar bulunmaktadır.
Kullanılan orkestrasyon aracına bağlı olarak, YAML ya da JSON dosyaları üzerinden konfigürasyon yapılır. Bu
konfigürasyon dosyaları üzerinden, orkestrasyon araçlarının konteyner imajlarını nereden çekeceğinden (private registry
ya da Docker Hub gibi bir public registry), konteynerlar arası ağ bağlantısının özelliklerine, logların nerede tutulacağından depolama alanlarının konteynerlara nasıl bağlanacağına kadar bütün konfigürasyonlar yönetilebilmektedir.
Genellikle orkestrasyon aracı konfigürasyonları, GIT gibi bir versiyon kontrol sisteminde saklanır. Bu sayede geliştirme, test ve canlı ortam için farklı GIT branch'leri ile yönetim sağlanabilmektedir.
Konteynerların farklı ortamlarda (geliştirme, test ve canlı gibi) devreye alımını konteyner orkestrasyon aracı yapmaktadır.
Konteynerlar bir public (açık) ya da private (özel) bir konteyer registery üzerinden alınarak, replikasyon grupları şeklinde
devreye alınırlar. Bu yöntemle bir konteynerın istenen sayıdaki örneği, sunucular üzerine dağıtılarak çalıştırılabilmektedir.
Bir konteynerın bir sunucuya kurulması gerektiğinde, orkestrasyon aracı, konteynerın kurulabileceği en uygun sunucuyu
bulmaya çalışır. Bu amaçla sunucuların memory, CPU kaynaklarının müsaitliği ve varsa diğer host kısıtlarını (belirli
konteynerların, belirli sunuculara kurulmaması gibi tanımlar) otomatik olarak değerlendirir ve uygun sunucuyu seçerek
konteynerinizi bu sunucuda başlatır. Yani, konteynerlar; sunucuların kaynak müsaitliği yanında, konteynerların ve
sunucuların metadatası ile belirlenmiş kısıtlara ve kararlara göre de sunuculara dağıtılabilmektedir.
Konteynerların host sunuculara dağıtımına yönelik bir diğer önemli özellik, orkestrasyon aracı üzerinden konteylerın private cloud'dun yanı sıra Amazon Web Services AWS, Google Cloud Platform ve Microsoft Azure gibi public cloud'da
çalıştırılabilmesinin oldukça kolaylaşmasıdır.

Hangi Konteyner Orkestrasyon Araçları Bulunmaktadır?
Halihazırda en yaygın kullanılanları açık kaynaklı olmak üzere bir çok konteyner orkestrasyon aracı bulunmaktadır. En
popüler kullanımı olan 3 konteyner orkestrasyon aracına bakmak gerekirse:

Kubernetes
Konteyner orkestrasyon araçları arasında de-facto standart araç durumundadır. Kubernetes projesi, Google'ın kendi
kullanımı amacıyla Borg adıyla geliştirilmeye başlanmıştır. 2014 yılında Google tarafından açık kaynak koduyla
duyurulmuştur. Halihazırda AWS, Microsoft, IBM, Intel ve Cisco gibi bulut bilişimin dev şirketleri tarafından
desteklenmektedir.
Kubernetes, geliştirici ekipler ve donanım yönetimi arasında bir soyutlama oluşturmasıyla ve PaaS Platform as a Service)
modellerini mümkün kılmasıyla DevOps yaklaşımına önemli bir katkı sağlamaktadır. Bu katkı da popüler kullanımını
artırmıştır.

Kubernetes'in Temel Bileşenleri

Sunucu Kümesi (Cluster): Master-slave yapısında kurulmuş, sanal ya da fiziksel bir sunucu kümesidir. Slave sunucular,Kubernetes terminolojisinde 'worker' olarak adlandırılır. İş yükleri, yani konteynerlarınız 'master' sunucular tarafından 'worker' sunuculara bir çok faktör göz önüne alınarak dağıtılır.

Master Sunucu(lar): Bu bileşen, konteynerların sunuculara dağıtımını ve kurulumunu yönetir. 'Worker' sunuculara komutlar göndererek çalışır. Kubernetes API sunucusu, master sunucu üzerinde bulunur.

Kubelet: Bu bileşen, 'worker' sunucularda bulunur. Kubernetes API sunucusu tarafından gönderilen komutlara bağlı olarak, konteyner temelli uygulamaların başlatılması, durdurulması ve yönetilmesi için çalışır.
Pod: Pod, aynı IP adresini paylaşan, birlikte çalıştırılan, durdurulan ve ölçeklenen, bir grup konteynerdır. Aynı pod'da yer
alan konteynerlar, her zaman aynı sunucuda yer alır ve aynı kaynakları paylaşır. JSON ya da YAML gibi bir konfigürasyon dosyası ile tanımlanırlar.
Docker Swarm
Docker tarafından benimsenen ve desteklenen bir numaralı konteyner orkestrasyon aracı Kubernetes'tir. Ancak Docker
tarafından geliştirilmiş, entegre bir orkestrasyon aracı da bulunmaktadır. Kubernetes'e kıyasla çok daha kolay bir
konteyner devreye alma aracıdır, ancak Kubernetes kadar ihtiyaca göre genişletilebilir özelliklere sahip değildir. Docker'ın kurumsal versiyonu olan docker-ee'yi satın alan Mirantis, Docker Swarm için şöyle bir duyuru yayınlamıştır:
The primary orchestrator going forward is Kubernetes.

"Mirantis is committed to providing an excellent experience to all Docker Enterprise platform customers and currently expects to support Swarm for at least two years, depending on customer input into the roadmap. Mirantis
is also evaluating options for making the transition to Kubernetes easier for Swarm users"

Dolayısıyla Docker Swarm, deprecated olarak düşünülebilir.
Duyurunun devamını buradan okuyabilirsiniz:

https://www.mirantis.com/blog/mirantis-acquires-docker-enterprise-platform-business/

Docker Swarm'ın Temel Bileşenleri

Swarm: Aynı sunucu kümeleri gibi, bir swarm, bir grup master ve worker sunucudan oluşan bir kümedir.
Service: Worker sunucu tarafından işlenen ve Swarm admini tarafından tanımlanan bir grup görev servis olarak adlandırılır.
Hangi konteyner imajlarının kullanılacağını ve her konteynerın hangi komutlarla kullanılacağını tanımlar.
Manager Sunucu: Swarm'ı yöneten ve komutları worker sunuculara aktaran sunucudur.

Worker Sunucu: Manager sunucu tarafından gönderilen komutları yerine getiren ve iş yükünüzü (workloads) çalıştıran
sunuculardır. Worker sunucular, Swarm'ın mevcut durumu hakkında manager sunucuyu sürekli bilgilendirir.

Apache Mesos ve Marathon
Apache Mesos Kaliforniya Üniversitesi tarafından geliştirilen ve günümüzde Uber, Twitter ve PayPal gibi büyük
organizasyonlar tarafından kullanılmakta olan bir açık kaynak yazılımdır.

Mesos, oldukça basit bir arayüz sunmakta ve kolayca 10.000 sunucuya kadar çıkabilmenizi desteklemektedir. Mesos'un özellikleri, tecih ettiğiniz Java, C ya da Python gibi bir programlama dili ile artırılabilir.
Ancak Mesos daha çok sunucu yönetimine odaklanmış bir sistemdir. Mesos tabanlı, canlı sistemlerde kullanıma hazır
Marathon gibi çeşitli konteyner orkestrasyon araçları geliştirilmiştir.

Apache Mesos ve Marathon'un Temel Bileşenleri
Master Daemon: Master sunucularda, slave sunucuların bileşeni olan agent daemon'ları yöneten sunucu bileşenidir.
Agent Daemon: Slave sunuculara framework Marathon) tarafından gönderilen komutları yönetir.
Framework: Mesos'un kendisi bir konteyner orkestrasyon aracı değildir. Marathon, Mesos master daemon'dan komutları alarak çalıştırır. Burada Marathon, Mesos terminolojisinde bir framework olmaktadır.
Offer: Mesos'un master daemon'u yönetilen sunuculara ait memory ve CPU kaynaklarının durumu gibi tüm bilgiyi alıp
Marathon'a yönlendirir. Bu bilgi formatı offer olarak adlandırılır. Bu sayede Marathon, sunucuların kaynak durumları
hakkında bilgi sahibi olur ve konteyner dağılımını yapar.

Hangi Konteyner Orkestrasyon Aracını Seçmelisiniz?
Yukarıda bahsedilen konteyner orkestrasyon araçlarının çeşitli artı ve eksi yönleri var, ancak özetle; küçük bir kurulumunuz varsa ve ölçeklenebilirlik öncelikli ihtiyacınız değilse Docker Swarm genellikle uygundur. Fakat portföyünüzde onlarca konteyner yer alıyorsa popülerliği hızla artan Kubernetes seçeneğini düşünmelisiniz. Öğrenim eğrisi açısından bakılırsa Docker Swarm en kolayı ve pratiği olarak bilinmekteyken, Kubernetes en çok uzmanlık ve teknik know-how gerektiren seçenek olarak bilinmektedir.
Consulta Yönetim ve Teknoloji Danışmanlığı olarak, konteyner orkestrasyon yaklaşımları, Kubernetes, CI/CD uygulamaları ve konteyner geliştirmeleri konusunda çözüm mimarlarımız ve teknik ekibimizle her zaman beraber çalışmaya hazırız.

Çözüm Ortaklarımız


software ag
board
INNA
ambrosettı
Bilge Adam
Ui Path
Centric Software
Alteryx
Qlik

Size nasıl yardımcı olabiliriz?

Consulta olarak sunduğumuz hizmetlere göstermiş olduğunuz ilgi için teşekkür ederiz.