Locust’un Dağıtık Sistemlerde Kurulumu ve Azure AKS Üzerinde Çalıştırılması

Ayşenur Çelik Aykuş
TurkNet Technology
Published in
3 min readDec 7, 2023

Merhaba, bir önceki yazımda locust kullanarak localde nasıl yük testi yapabileceğimizi ve sonuçları nasıl yorumlamamız gerektiğini anlatmıştım. Buradan ulaşabilirsiniz. Locust ile yük testi.

Karmaşık bir test planımız olduğunda veya daha fazla yük oluşturmak istediğimizde locustu dağıtık bir şekilde çalıştırmamız gerekebilir. Locust bunu destekler. Bu yazımda locustu dağıtık bir şekilde Kubernetes üzerinde nasıl çalıştırabiliriz ondan bahsedeceğim.

Kurulum

Biz şirketimizde bu yapıyı kurmak için Delivery Hero’nun hazırladığı helm kütüphanesini kullandık. Bu kütüphane herhangi bir sayıda worker ile tam dağıtılmış bir locust ortamını çalıştırmak için gereken her şeyi kuracaktır. Ayrıca locust dosyalarını Kubernetes’te depolamak için configmap’ler oluşturacak, bu şekilde özel docker imajları oluşturmaya gerek kalmayacaktır.

İlk olarak https://artifacthub.io/ sitesinde arama kısmına locust yazarak https://artifacthub.io/packages/helm/deliveryhero/locust bu adrese gidiyoruz. Install butonuna tıklıyoruz ve açılan ekrandaki komutlarla kurulumları tamamlıyoruz.

Kurulum komutu olarak yukarıdaki yolu izleyebileceğimiz gibi, ansible olarak da kurulum sağlayabiliriz. Ansible, yönetiminizde olan sunucuların tek bir çatı altında, istediğiniz her şeyi yapmaya olanak sağlayan, client istemcilere herhangi bir agent kurma ihtiyacı gerektirmeyen, Python ve Ruby dilleri ile geliştirilmiş özgür bir platformdur. [ansible] Biz kurulumlarımızı ansible olarak gerçekleştirdik. Projenin ana yapısı aşağıdaki gibidir;

Project Structure

Proje yapısında bulunan inventory.ini dosyası daha önceden bulunan Kubernetes konfigürasyonlarının bu proje için de yapılmasını sağlıyor. Bizim dosya içeriğimiz şöyle;

[azure]
aks ansible_connection=local

Localde olan konfigürasyon bu proje için de uygulandı diyebiliriz.

---
- hosts: azure
roles:
- turknet.k8s.locust

Yukarıdaki locust-setup.yml dosyası ise kurulum için gerekli aksiyonu verir.

Son olarak ansible komutu üç ana kısımdan oluşuyor. Kurulum için bir rolümüz olmalı (turknet.k8s.locust), tetikleyecek bir komut(playbook) ve de bir ini dosyası(inventory.ini).

ansible-playbook -i inventory.ini locust-setup.yml

Bu komut çalıştırıldıktan sonra direkt tasks/main.yml altındaki işlemleri yapar. Dosya içeriklerini proje yapısında anlatacağım.

Proje Yapısı

Kurulum tamamlandıktan sonra, sitede de yer alan(default values) değerler ile kurulum yapıyor. Biz bu değerleri templates/locust-values.yml dosyasından kendi konfigürasyonlarımızı içerecek şekilde güncelliyoruz.

  • Values parametreleri, defaults/main.yml dosyasından değerleri okuyor.
values.yml
  • tasks/main.yml dosyasından ansible komutuna göre kurulum yapılıyor ve testlerin yazıldığı dosya da templates/main.py olarak buraya ekleniyor.
main.yml

Projenin Çalıştırılması

Biz projenin çalıştırılmasını bir Bitbucket pipeline ına bağladık. Projeye bir commit attığımızda otomatik deploy oluyor ve ilk run edilen adım yukarıda bahsettiğim ansible komutu oluyor. Bu komutun ardından Azure AKS üzerinde locust ayağa kalkmış oluyor ve bize erişebileceğimiz bir erişim adresi ve kullanıcı bilgilerini veriyor.

Pipeline Log

Biz bu bilgilerle aşağıdaki ekrana ulaşıyoruz.

Locust Home Page

Sonuç

Locustu localde çalıştırabildiğimiz gibi, dağıtık ortamlarda da çalıştırabilmek mümkündür. Dağıtık sistemlerde çalışan Locust, yükü dengeli bir şekilde dağıtarak sunucuların ve altyapının dayanıklılığını local ortama göre daha net test etme imkanı sağlar. Ayrıca farklı konumlardan veya farklı cihazlardan gelen kullanıcıların eşzamanlı etkileşimlerini bu şekilde daha net görebilir ve uygulamanın gerçek dünya koşullarında nasıl performans göstereceğini daha iyi anlayabiliriz.

--

--