Yazılım Geliştiriciler için Azure: Docker Swarm ve Azure Container Registry
  1. Anasayfa
  2. DevOps

Yazılım Geliştiriciler için Azure: Docker Swarm ve Azure Container Registry

0

Bu yazımızda Azure üzerine Docker Swarm kurulumu yapıp, Azure Container Registry üzerinde yer alan bir container imajını kullanarak swarm üzerinde yer alan worker node’lara deployment yapacağız. Docker Swarm ile ilgili detaylı bilgi için Onur Yüksektepeli‘nin MSHOWTO üzerindeki makalesini buraya tıklayarak okuyabilirsiniz.

İlk önce Azure üzerinde 1 adet manager ve 2 adet worker node kurulumu yaparak başlayalım. Kullanacağım Azure sanal makineler için CoreOS’in Container Linux imajını (Resim-1) tercih ediyorum. Adından da anlaşılacağı üzere container kullanımı için özelleştirilmiş bir versiyon ve ayrıca bir Docker kurulumu yapmaya gerek olmayacak.

Resim-1

Sanal makineler için Resim-2‘de göreceğiniz özellikleri tercih ettim. Gerçek bir uygulama test etmeyeceğim için B1ms (1 vcpu, 2 GiB memory) yeterli olacaktır.

Resim-2

Manager node’a mshowto-manager ve worker node’lara da mshowto-worker-01 ve mshowto-worker-02 olarak isimlendirdim.

NOT: Örnekte Windows Terminal üzerinden PowerShell Core kullandım ama bilgisayarınızdaki Windows PowerShell’i de tercih edebilirsiniz.

Windows Terminal/PowerShell Core üzerinden ssh kullanarak (ssh username@host şeklinde bağlanabilirsiniz) manager ve worker node’lara bağlanıyorum ve docker komutunu sudo yazmadan da kullanabilmek için bütün sanal makinelerde sudo usermod -aG docker $USER komutunu çalıştırıyorum (Resim-3). Bu komutta mevcut kullanıcıyı docker grubuna eklemiş oluyoruz. Container Linux üzerinde docker isimli grup olduğu için tekrar oluşturmadım. Eğer farklı bir Linux dağıtımı üzerinde bu işlemleri yapmayı tercih ederseniz bu komut öncesinde sudo groupadd docker komutu ile docker grubunu oluşturabilirsiniz. Bu işlemler sonrasında log out ve tekrar log in yapmanız gerekiyor.

Resim-3

Docker swarm’ı aktif hale getirmeden önce manager node’a ait IP bilgisine ihtiyacımız var. Bunun için Azure Portal üzerinden manager node’un Overview sekmesi üzerinden Private IP address değerini (10.0.0.4) öğrenebilirsiniz (Resim-4)


Resim-4

Docker swarm için aşağıdaki portların açık olması gerekiyor:

  • 2377 (TCP) Cluster yönetimi,
  • 7946 (TCP ve UDP) Node’lar arasındaki iletişim
  • 4789 (UDP) Overlay network trafiği

Bu örnekte bütün node’lar aynı vnet altında yer alıyorlar (Resim-5). Sanal makinelerin network ayarlarından ayrıca bu portları açmama gerek yok.


Resim-5

Docker swarm’u aktifleştirmek için Resim-6‘da göreceğiniz gibi manager node üzerinde docker swarm init –adversite-addr <manager node IP adresi> şeklindeki komutu çalıştırıyorum. Mevcut sanal makineyi böylece manager node olarak atamış oluyoruz. Worker node’lar üzerinde çalıştıracağınız Docker swarm’a katılmak için gerekli komutu da token bilgisi ile bize veriyor. Cluster yönetimi için gerekli olan port 2377 burada karşımıza çıkıyor.

Resim-6

Swarm’a katılmak için çalıştıracağımız komutu worker node’lar üzerinde tek tek çalıştırıyorum (Resim-7).

Resim-7

Sonrasında ise worker node’ların durumunu kontrol etmek için manager node üzerinde docker node ls komutunu kullanabilirsiniz (Resim-8).

Resim-8

Node’lar hazır olduğuna göre swarm’a container ekleyebiliriz. Varsayılan olarak docker hub üzerinden arayacak ama ben Azure Container Registry (ACR) kullanmak istiyorum. ACR ile ilgili detaylı bilgi için buraya tıklayabilirsiniz. ACR (ya da farklı bir container registry) kullanmak için manager node üzerinde docker login <registry adresi> şeklindeki komutu kullanabilirsiniz (Resim-9). Kullanıcı adı ve şifre girdikten sonra artık ACR’ı kullanabiliriz.

Resim-9

Manager node üzerinde bir servis oluşturmamız gerekiyor. Serviste hangi container imajını kullanacağımız, bu container’dan kaç replika olacağını, container’ın hangi portunu açacağımız gibi detayları burada belirtiyorum. –with-registry-auth ile de registry detaylarını worker node’lara da gönderebiliyorum. Kullanacağım imaja ait dockerfile ve kaynak kodlara buradan ulaşabilirsiniz.

docker service create –with-registry-auth –name my_service –replicas=3 –publish target=5001,published=5001,protocol=tcp mshowto.azurecr.io/hellonode:latest

Servisi oluşturduktan sonra docker service ls komutu ile kontrol edebilir, benzer şekilde docker node ls komutu ile de node’lara bakabilirsiniz (Resim-10).

Resim-10

Container’ın 5001 portunu yine 5001 olarak dışarıya açtık ancak bu port manager node’un Azure üzerindeki port ayarlarında henüz tanımlı değil. Bunu tanımlamak için ise Azure Portal üzerinden manager node’a ait sanal makine network ayarlarından Resim-11‘de göreceğiniz gibi bir inbound port kuralı ekliyorum. Internet üzerinden herhangi bir adresten gelebileceğimiz için Source’u Any olarak seçiyorum. Destination’ı ise Virtual Network olarak ayarladım ve 5001 portunu sadece TCP protokolüne izin vererek açıyorum.

Resim-11

Son olarak da browser üzerinden container üzerinde çalışan uygulamamızı manager node adresini kullanarak Resim-12‘de göreceğiniz gibi çağırıyorum. İki farklı browser üzerinden yaptığım denemelerde hostname değerinin farklı olduğunu yani isteklerin farklı node’lara gittiğini görebilirsiniz. Bunu yakalamak için birden fazla istek yapmanız gerektiğini belirtmekte fayda var.

Resim-12

Bu konuyla ilgili sorularınızı alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.

Referanslar

www.mshowto.org

https://docs.docker.com/engine/swarm/

https://www.mshowto.org/docker-swarm-mode.html

https://www.mshowto.org/yazilim-gelistiriciler-icin-azure-azure-container-registry.html

https://azuremarketplace.microsoft.com/en-gb/marketplace/apps/CoreOS.CoreOS

https://github.com/mertyeter/hellonode

TAGs: Azure, Azure Portal, Yazılım Geliştiriciler için Azure, Azure Container Registry, ACR, PowerShell, Docker, Containers, Dockerfile, Linux, CoreOS, Container Linux, NodeJS, Docker Swarm

Bu İçeriğe Tepkin Ne Oldu?
  • 1
    harika_
    Harika!!
  • 0
    be_enmedim
    Beğenmedim
  • 0
    _ok_iyi
    Çok iyi
  • 0
    sevdim_
    Sevdim!
  • 0
    bilemedim_
    Bilemedim!
  • 0
    olmad_
    Olmadı!
  • 0
    k_zd_m_
    Kızdım!

Mert Yeter, lisans eğitimini Yıldız Teknik Üniversitesi'nde, yüksek lisans eğitimini ise Bahçeşehir Üniversitesi'nde tamamlamıştır. Yazılım dünyasına üniversitenin ilk yıllarında aldığı QBasic ile başlayan Mert, .NET ve SQL Server gibi Microsoft teknolojileri ile devam etmiş; yüksek lisans tezini ise Linux konusunda yapmıştır. Netaş ve Ziraat Teknoloji gibi sektörün önde gelen firmalarında C#, .NET, SQL Server, Cisco Contact Center ürünleri ve Linux üzerine çalışmış, bir çok firmaya da bu konularda danışmanlık vermiştir.

Yazarın Profili

Bültenimize Katılın

Tıklayın, üyemiz olun ve yeni güncellemelerden haberdar olan ilk kişi siz olun.

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir