Docker Swarm: Kubernetes’e güçlü bir Alternatif

Container teknolojilerinin kullanımı yaygınlaştıkça, bu container’ların yönetimi, örneğin çöktüğü zaman tekrar ayağa kaldırılması, performanslı çalışması için çoğaltılması, bir kaç farklı imajdan oluşmuş container’ların birbirini görüp haberleşmesi (service discovery) gibi işler ve genel olarak yönetim (orchestration) işlemleri için yeni kütüphaneler ve araçlara ihtiyaç duyulmaya başlandı. Kubernetes, Apache mezos gibi araçlar bu ihtiyaca binaen ortaya çıkmışlardır. Docker’ı geliştiren ekipte bu ihtiyacı düşünerek Docker swarm çözümünü geliştirmişler.

Kubernetes piyasada yaygın kullanılan ve büyük boyutlu sistemlerde rüştünü ıspatlamış, google tarafından geliştirilmiş açık kaynaklı bir araç. Docker swarm ise yeni yeni piyasada ilerleyip pazar payını arttırmaktadır. Kubernetes’e göre bazı avantajlarından bahsedebiliriz. Örneğin docker ile birlikte hazır olarak gelmekte ve ekstra bir kurulum gerektirmemektedir. Diğer bir avantajı da, bildiğimiz docker komutlarını ve mantığını kullanarak işlerimizi halledebiliyoruz. Kubernetes ile birlikte gelen pod, replica set, replication controller vs gibi yeni terminolojileri öğrenmeye ve anlamaya gerek kalmamaktadır.

Docker Machine Nedir?

Docker machine, docker-machine komutları ile containerlerın üzerinde çalıştığı docker engine’in (docker host) sanal bilgisayarlara kurulumunu ve yönetimini sağlayan bir araçtır. Böylece docker hostlarını, ister yerel bilgisayarınızda, ister başka bir makinada ya da azure, aws veya google cloud gibi bulut servislerinde oluşturup yönetebilirsiniz.

Swarm oluşturmak için sistemde bir yönetici (manager) ve dilediğimiz kadar işçi (worker) node oluşturmamız gerekiyor. windows kullandığım için hyper-v driver’ını kullanıyorum:

Bir tane de işçi node oluşturalım:

Swarm’ı oluşturmaya manager node üzerinde başlatıyoruz. Önce manager1’in ip’sini bulalım.

Ip’imizin 130.211.xxx.yyy olduğunu varsayalım.

docker-machine ssh ile manager node’a bağlanalım.

Giriş yaptıktan sonra swarm init komutuyla swarm’ı oluşturalım:

Diğer worker node’umuzun swarm’a dahil etmek için, manager içinden bir token üretmemiz gerekiyor.

docker swarm join ile başlayan komutu her bir worker node içinden çalıştırmamız gerekiyor.

Başka bir komut satırı ekranından docker-machine ssh ile worker1’e makinasına bağlanalım:

Bu makina üzerinde yukardaki komutu çalıştıralım.

Böylece worker1 swarm’a dahil olmuş oldu.

manager içinden docker node ls komutunu çalıştıralım:

Artık docker container’larımızı yönetmeye başlayalım.

Docker Service

Service bir veya bir kaç container’ın çalışmasına karşılık gelen bir kavram. docker service komutları sadece manager üzerinde çalıştırılabilir.

Bu komutla birlikte nginx imajından bir servis oluşturuyoruz. –replicas 2 diyerek iki tane container oluşturuyoruz.

komutuyla sistemde çalışan servislerimizi görmüş oluruz.

container’ların sayısını arttırmak için

Varolan imaj değiştiği zaman, sistemde bir kesinti olmadan sistemi güncellemek için, docker service update komutunu çalıştırıyoruz (rolling update):

Docker Servis Stack

Böyle başka servislerimiz olduğu zaman ve bu servislerin birbiriyle haberleşmesi ihtiyacı ortaya çıktığında, hepsini komut satırı üzerinden yönetmek zor olacaktır. Docker mühendisleri bunu düşünerek docker stack yapısını geliştirmişlerdir. Docker-compose ile yaptığımız şeyi servisler içinde yapabiliriz. Böylece replicas gibi parametreleri bir yml dosyasında tanımlayabiliriz. Bir stack yml dosyası örneğine bakalım.

stack.yml

Bu stack yml dosyasını kullanarak daha önce docker create service ile yaptığımız işleri, docker stack komutları ile yapabiliriz:

docker service ls komutunu çalıştırırsak, redis ve nginx servislerinin başarılı bir şekilde çalıştığını görebiliriz. Teker teker service komutlarını yazmamıza gerek kalmadı. Daha fazla servisimizin olduğu durumlarda docker stack’in bize ne kadar büyük kolaylık getirdiğini anlayabiliriz.

 

 

 

 

 

“Docker Swarm: Kubernetes’e güçlü bir Alternatif” üzerine 2 yorum

Yorum yapın