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:

docker-machine create --driver hyperv manager1

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

docker-machine create --driver hyperv worker1

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

docker-machine ip manager1

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

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

docker-machine ssh manager1

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

docker swarm init --advertise-addr 130.211.xxx.yyy

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

docker swarm join-token worker

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:

docker-machine ssh worker1

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

docker swarm join  --token SWMTKN-1-2rc9iwk3rdhdh2n0957tp71l7mo22k7mbsbs1d9go0i9mkpzfo-dafk3gp92i9casag2y4nqvs7b 10.128.0.2:2377

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.

docker service create --name myweb --replicas 2 -p 80:80 nginx

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

sudo docker service ls

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

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

docker service scale myweb=6

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 service update --image <imaj>:<versiyon> myweb
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
version: '3'

services:
  redis:
    image: redis:latest
    ports:
      - "6379:6379"
    networks:
      - nw1
    deploy:
      replicas: 4

  myweb:
    image: nginx:latest
    ports:
      - "80:80"   
    links: 
      - redis
    networks:
      - nw1         
    deploy:
      replicas: 4
         
networks:
  nw1:
    external: true     

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

docker stack deploy --compose-file stack.yml mystack

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.

 

 

 

 

 

2 thoughts on “Docker Swarm: Kubernetes’e güçlü bir Alternatif”

Yorum bırakın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Scroll to Top