PARDUS SERVER ÜZERİNDE DOCKER SWARM KURULUMU

GİRİŞ

Bu makale ile 2 worker ve 2 manager node dan oluşan bir docker swarm dağıtımının Pardus Server üzerine kurulması anlatılacaktır. Yönergeler hazırlanırken, Docker tarafından resmi olarak yayınlanmış olan kurulum dökümanlarından yararlanılmıştır. Tipik bir swarm kurulumunda iki ana grupta birden fazla sunucu yer alır. En temel kurulumlar için bile geçerli olan bu durum aşağıdaki şekilde gösterilmiştir;

Şekil 1: Docker Swarm Genel Yapı

Şekilden görüleceği üzere swarm iki ana grupta çalışan sunuculardan oluşmaktadır. Bir grup yönetsel faaliyetleri üstlenmişken, diğer grup iş yüklerini çalıştırma işini üstlenmiştir. Bu dökümanın bundan sonraki bölümlerinde, minimum bir kurulum için yeterli olan aşağıdaki bileşenlerin kurulumu anlatılacaktır;

Şekil 2: Bu Çalışmada Kurulacak Bileşenler

HAZIRLIK

Bu kurulumda bir DNS sunucusu kullanılmayacak, buna bağlı olarak da yerel hosts dosyasında makine adı / IP ilişkileri oluşturulacaktır. Kurulumda kullanılacak sunucuların (fiziksel ya da sanal olabilir, ya da başka IP adresleri kullanılabilir) aşağıdaki şekilde yapılandırılmış olduğu varsayılmaktadır;

IP Adresi Makine İsmi

192.168.100.10 manager01
192.168.100.11 manager02
192.168.100.12 worker01
192.168.100.13 worker02

Eğer makine isimlerinin sonradan değiştirilmesi gerekli olacak olursa, aşağıdaki komut ile isim değiştirilebilir;

user@machine:~$ sudo hostnamectl set-hostname <makine adi>

Bu aşamada /etc/hosts dosyası içinde de yeni verilen ismin makinenin ip adresi ile eşleştirilmesi önemlidir. Ardından makinenin üzerinde çalışan servislere bağlı olarak yeniden başlatılması gerekebilir.

Bu aşamadan sonra swarm içinde kullanılacak makinelerin birbirlerini isimden çözebilecek şekilde yapılandırılmaları gereklidir. Bunun için her bir sunucuda ayrı ayrı /etc/hosts dosyalarını düzenlemek gerekmektedir. Bu amaçla;

user@machine:~$ sudo vi /etc/hosts

komutu kullanılarak açılan dosya aşağıdaki şekilde düzenlenmelidir;

127.0.0.1 localhost 
192.168.100.10 manager01.swarm manager01 
192.168.100.11 manager02.swarm manager02 
192.168.100.12 worker01.swarm worker01 
192.168.100.13 worker02.swarm worker02

Bu işlem için vi düzenleyicisi kullanılmıştır. İstendiği takdirde bir başka düzenleyici kullanılabilir. Linux’a yeni başlayanların genellikle nano düzenleyicisi kullandıkları gözlenmektedir. Bu aşamada tüm makineler birbirlerini isimleri ile bulabilir duruma getirilmiş durumdadır. Bu swarm node ları arasındaki haberleşme için gerekli bir durumdur.

DOCKER-CE KURULUMU

Öncelikle üzerinde çalışılan makinenin güncel olmasından ve docker tarafından kullanılan bazı kütüphanelerin kurulu olduğundan emin olunmalıdır. Bunun için;

user@machine:~$ sudo apt updateuser@machine:~$ sudo apt install ca-certificates curl gnupg lsb-release

Komutları kullanılabilir. Bu işlemin ardından, mevcut sunucularda çalışan dağıtım tarafından sağlanan paketler yüklü ise bunların kaldırılması gerekmektedir. Bu işlem için;

user@machine:~$ sudo apt-get remove docker docker-engine docker.io containerd runc

komutunu kullanmak yeterli olacaktır. Ardından docker tarafından sağlanan paket deposunun GPG anahtarlarını sunucuya tanıtmak gereklidir. Bu işlem;

user@machine:~$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg — dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

komutları kullanılarak oldukça hızlı bir şekilde yapılabilir. Docker deposunun sisteme tanıtılması artık mümkün hale gelmiştir. Bunun için;

user@machine:~$ echo “deb [arch=$(dpkg — print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable” | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

komutu kullanılabilir. Artık sunucu Docker kurulumuna hazır hale getirilmiştir. Bu aşamada yeniden repo ları güncelleyerek paket bilgileri güncellenerek, docker paketlerinin repo dan geldiğinin kontrol edilmesi yararlı olacaktır. Bunun için;

user@machine:~$ sudo apt-get updateuser@machine:~$ apt-cache policy docker-ce

komutları kullanılabilir. Eğer docker repo adresi docker sitesini gösteriyorsa yapılandırma doğru yapılmış demektir. docker-ce kurulumuna devam etmek için;

user@machine:~$ sudo apt-get install docker-ce docker-ce-cli containerd.iouser@machine:~$ sudo usermod -aG docker ${USER}

komutları kullanılabilir. Bu aşamada docker kurulmuş ve geçerli kullanıcı docker grubuna eklenerek sistemde işlem yapabilir hale getirilmiştir. Buraya kadar anlatılan işlemler tüm makinelerde yapılmalıdır.

SWARM YAPILANDIRMASI

İlk yapılandırılacak makine manager01 olacaktır. Swarm, ilk manager sunucusu ile kurulmaya başlanmaktadır. SSH ile bir bağlantı alınıp (doğrudan konsol da kullanılabilir) sırası ile aşağıdaki işlemler yapılmalıdır;

user@manager01:~$ sudo docker swarm init — advertise-addr 192.168.100.10

user@manager01:~$
user@manager01:~$ docker swarm join-token manager

To add a manager to this swarm, run the following command:

docker swarm join — token SWMTKN-1–5ia7cvius1ms788g1rjn7nvlzjt8sllnbgm0rgo6mffkxjvyb0-d9n5m4meb6gfrs8ittxs2zsi6 192.168.100.10:2377

user@manager01:~$ docker swarm join-token worker

To add a worker to this swarm, run the following command:
docker swarm join — token SWMTKN-1–5ia7cvius1ms788g1rjn7nvlzjt8sllnbgm0rgo6mffkxjvyb0–9ltqct33tewcw8hqsf68mtu71 192.168.100.10:2377

Görüleceği üzere ilk manager sunucusu swarm ı ilklendirmiş, ardından oluşan bu yeni yapıya diğer manager ve worker sunucuları eklemek için gerekli işlemler tamamlanmıştır. Bu aşamada manager02 sunucusuna bağlanıp;

user@manager02:~$ docker swarm join — token SWMTKN-1–5ia7cvius1ms788g1rjn7nvlzjt8sllnbgm0rgo6mffkxjvyb0-d9n5m4meb6gfrs8ittxs2zsi6 192.168.100.10:2377

komutu ile sistemdeki ikincil manager sunucu da dahil edilmiştir. Worker sunucularında da sırasıyla aşağıdaki işlemler gerçekleştirilerek, iş yüklerinin çalıştırılacağı sistem bileşenleri de sisteme eklenmiş olacaktır;

user@worker01:~$ docker swarm join — token SWMTKN-1–5ia7cvius1ms788g1rjn7nvlzjt8sllnbgm0rgo6mffkxjvyb0–9ltqct33tewcw8hqsf68mtu71 192.168.100.10:2377

user@worker02:~$ docker swarm join — token SWMTKN-1–5ia7cvius1ms788g1rjn7nvlzjt8sllnbgm0rgo6mffkxjvyb0–9ltqct33tewcw8hqsf68mtu71 192.168.100.10:2377

Bu şekilde kurulum tamamlanmıştır. Manager nodelar üzerinde yük çalışmasını engellemek için drain edilmeleri uygun olacaktır.

user@manager01:~$ docker node update — availability drain manager01-swarm

user@manager01:~$ docker node update — availability drain manager02-swarm

Bu aşamada loadbalancer, paylaşılmış disk alanı gibi detay yapılandırmalar da gerekli olacaktır ve fakat bunlar bu makalenin konusu olmadığı için bu döküman kapsamına alınmamıştır. Sistemin düzgün şekilde yapılandırıldığını kontrol etmek için tekrar manager01 sunucusuna bağlanıp;

user@manager01:~$ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
h00bd7pqahxoz2hu8zqzg73y3 * manager01 Ready Active Leader 20.10.12
zckfz7r1ou7k8ao9vq3brdviy manager02 Ready Active Reachable 20.10.12
p7ke2f97bhwmpgj098e1xaw5p worker01 Ready Active 20.10.121
gwvqwqqmqv4te4oy7cym5o3p worker02 Ready Active 20.10.12

komutu ile de swarm sunucularının aktif durumlarını görmek mümkündür.

SONUÇ

Swarm, iş yükü dağıtmak ve uygun servislerin replikalarını oluşturmak için ölçekleme amacıyla kullanılabilecek basit ve bir o kadar da güçlü bir mimari olarak karşımıza çıkmaktadır. Kendi içinde kapalı çalışma ekipleri tarafından kullanılmak için güvenli ve esnek bir yapıdır.


Dogan ZORLU

Dogan ZORLU