.Net Core Projemizi Docker Swarm ile ayağa kaldırma Part 3

ihsan güç
4 min readJun 30, 2022

Önceki yazımızda sadece tek bir sunucuda projemizi dockeriz ederek jenkins üzerinden ayağa kaldırmıştık ve sonraki adım olarak docker swarm orchestration kullanarak projemizi yine jenkins yardımı ile ayağa kaldıracağız. İyi okumalar.

Docker Swarm bir container orchestration yönetim sistemidir. Docker swarmda biri manager node ve worker node olmak üzere iki tane type vardır. Manager node yönetici, worker nodelar ise manager nodedan gelen görevleri kabul etmekle yükümlüdür. Manager node altında oluşturduğu work nodeların durumunu bilir. Docker swarmda deploy yapmadan önce en az bir tane worker node’num olmalıdır. Node sistemi olduğundan dolayı sistemde herhangi bir çökme işleminde manager node ayrıcalığı ile tekrardan bir tane node kaldırarak sistemde sıkıntı olmamasına ve sistem sürekli çalışacak şekilde dizayn edilir.

Docker Swarm Image 1

Docker Swarm özellikleri;

  • 1-) Merkezi Olmayan Erişim.
  • 2-) Yüksek Güvenlik.
  • 3-) Otomatik Load Balancing.
  • 4-) Yüksek Ölçeklenebilirlik.

Detaylı açıklamalar için linkten devam edebilirsiniz.

Portainer: Docker sisteminin görselleştirilmesi ve yönetilmesini sağlayan bir sistemdir.

Portainer Kurulumu için sunucu üstünde bir tane klasör oluşturarak klasörün içine portainer için gerekli olan docker-compose.yml dosyasını oluşturarak ekliyoruz,

Portainer Docker Compose.yml

aşağıdaki kod bloğunu çalıştırdıktan sonra portainer image yüklemiş olacağız ve bir tane portainer için 9000 port dışarıya açıyoruz.

docker-compose up -d

http://manager_node_ip:9000 adresine giderek portainer şifre belirleme ekranı bizi karşılıyor ve bilgileri girdikten sonra kullanıcı oluştur diyerek bir tane giriş bilgileri oluşturuyoruz.

Portainer User Create

Daha sonrasından adımda portainer bize aşağıdaki gibi 4 seçenek sunuyor;

  • Local: Portainer kurduğunuz sistem üzerindeki docker yönetilebilir.
  • Remote: Uzak sunucu üzerindeki docker yönetilebilir.
  • Azure: Azure bağlantı sağlayarak azure container Instances’ı yönetilebilir.
  • Agent: Portainer agent’a bağlantı sağlanabilir.

Eğer istersek sisteme giriş sağladıktan sonra endpoints sekmesine tıklayarak birden fazla yönetebileceğimiz sistemleri portainer’a ekleyebiliriz.

Portainer Option Choose

Adımları takip ettiğimizde aşağıdaki ekran bizi karşılıyor.

  • App Templates: Redis, Postgresql vb. teknolojileri otomatik olarak hiç kod yazmadan oluşturduğumuz alandır.
  • Images: Yönettiğimiz docker üstünde oluşturduğumuz imageleri görüntüleriz.
  • Containers: Oluşturduğumuz imageler yardımı ile çalıştırdığımız containerları görüntüleriz.
  • Volumes: Containerların kullandıkları volumleri gördüğümüz alandır.
  • Events: Sistem logların tutulduğu yerdir.
  • Endpoints: Birden fazla sistem yönetmek için kullandığımız kısımdır.
  • Users: Sisteme kullanıcı ekleyerek onları yönetebildiğimiz kısımdır.
Portainer Web

Fark ettiyseniz docker swarmı web tarafında görmüyoruz bunun sebebi docker yüklerken swarm otomatik olarak inactive olarak gelmesinden kaynaklanıyor. Aşağıdaki kodu terminale yazdığımızda docker hakkıında bilgilerini ekrana yansıtacaktır. Swarm: inactive olarak görebilirsiniz.

docker info
Docker Swarm Image 2

Docker swarmı active etmek için aşağıdaki kodu yazarak docker swarmı active ediyoruz ve active ettiğimiz için otomatik olarak bu sunucu manager node olur.

docker swarm init --advertise-addr 164.92.94.5

Kod çalıştıktan sonra bize bir tane token üretir ve portainer üzerinden swarmı görmek için web tarafında çıkış yapılıp tekrar sisteme girilerek otomatik olarak docker swarm tab menüye eklenmiş olarak gelir. Oluşturulan token’ı (docker swarm join ….. token) docker yüklü work node sunucumuza girerek terminale yazarak yazarak sunucuyu docker swarma dahil ederiz. Bundan sonra bir tane manager node ve ona bağlanmış komut bekleyen bir tane worker node’muz oluyor.

Docker Swarm Image 3

Sunucu üzerinden worker node olarak eklendi bilgisini aldıktan sonra portainer üzerinden rahatça gözlemleyebileceğiz.

Docker Swarm Image 4

Portainer üzerinden Swarm alanına tıklayarak Nodelarımızı ve sistem bilgilerimizi görebiliriz. Sistelerimizin çalışmama, durma işlemlerini otomatik olarak buraya yansıyacaktır.

Docker Swarm Image 5

Go to cluster visualizer diyerek sistemimizin üzerinde çalışan uygulamaları görebiliriz.

Docker Swarm Image 6

Docker-compose.yml ayarlar için;

  • Deploy: docker swarm için gerekli bilgileri girdiğimiz alan.
  • Replicas: Kaç tane kopya oluşturacağımızı belirliyoruz.
  • Constraints: Hangi node üzerinden çalışması gerektiğini belirtiyoruz.
  • Restart Policy: Hata verdiğinde yapması gereken metotları belirliyoruz.
Project Docker Compose.yml

Docker compose ayarlarını bitirdikten sonra Jenkins üzerinden bir tane Freestyle project oluşturarak execute shell’i seçerek açılan input kısmına giriyoruz.

docker stack rm dockerswarm
docker stack deploy -c docker-compose.yml dockerswarm

Geriye sadece jenkins üzerinden build işlemi kalıyor ve ona tıkladıktan sonra portainer üzerinden takip ettiğimizde docker compose da sadece worker node üzerinde oluşmasını ve çalıştırılmasını istemiştik ve ona göre worker üzerinden sistemi ayağa kaldırdı.

Docker Swarm Image 7

Oluşturduğumuz sistemde http://manager_node_ip:5000 üzerinden veya http://worker_node_ip:5000 üzerinden projenize rahatlıkla ulaşabilir ve test edebilirsiniz.

Kaynakça

Okuduğunuz için teşekkürler. Bir sonraki yazıda görüşmek dileğiyle…

--

--