Swarm, Docker üzerinde çalışan konteynerlerin bir cluster içinde yönetilmesi amacıyla geliştirilmiştir. Bu yazıda, iki Worker ve iki Manager Node’dan oluşan bir Docker Swarm dağıtımının Pardus sunucu üzerine kurulması anlatılacaktır.
Yönergeler hazırlanırken, Docker tarafından resmi olarak yayınlanmış olan kurulum belgelerinden 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;
Ş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 belgenin bundan sonraki bölümlerinde, minimum bir kurulum için yeterli olan aşağıdaki bileşenlerin kurulumu anlatılacaktır.
Docker ve Swarm kurulumuna hazırlık
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 komutla 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. Docker kurulumunu daha geniş bir şekilde şurada anlatmış olsak da, tekrardan zarar gelmez. Kurulum için;
user@machine:~$ sudo apt update user@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 çok 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 repoları güncelleyerek paket bilgilerini tazelemek, Docker paketlerinin repodan geldiğinin kontrol edilmesi yararlı olacaktır. Bunun için;
user@machine:~$ sudo apt-get update user@machine:~$ apt-cache policy docker-ce
komutları kullanılabilir. 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.io user@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 yapılandırması
İ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
Bu Swarm’a manager eklemek için aşağıdaki konutu uyguluyoruz:
docker swarm join --token SWMTKN-1-5ia7cvius1ms788g1rjn7nvlzjt8sllnbgm0rgo6mffkxjvyb0-d9n5m4meb6gfrs8ittxs2zsi6 192.168.100.10:2377 user@manager01:~$ docker swarm join-token worker
Şimdi worker ekliyoruz:
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
komutuyla sistemdeki ikincil manager sunucu da dâhil 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. 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 belge 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.12 1gwvqwqqmqv4te4oy7cym5o3p worker02 Ready Active 20.10.12
komutuyla da 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.