Nginx Kurulum ve Ayarlama
Load Balancer Uygulama Örneği Docker & Kubernetes
Merhabalar,
Bu yazımda Docker ve Kubernetes ile Nginx kurulumu ve ayarlamasını inceliycez.
Nginx: Rus yazılım mühendisi Igor Sysoev tarafından mail.ru için yapılmış mail sunucusudur ve geliştirilip tüm platformlarda kullanılabilir hale getirilmiştir.
Temel Özellikleri,
- Reverse Proxy (Ters Vekil Sunucusu)
- Load Balancing (Yük Dengeleme)
- Virtual Host (Sanal Sunucu)
ilk olarak nginx docker ile load balancer örneğini inceliycez. Örneğimize detaylarına bakacak olursak iki ayrı Python Flask ile geliştirilmiş uygulamayı nginx load balancer kurarak sayfalar arasında yük dağılımına bakacaz. Uygulamamızın code yapısına bakalım.
ilk olarak Flask-1 uygulamazı çalıştıralım. Bunun için terminalden python3 app1.py ile uygulamızı çalıştırıp çıktıya bakalım.
ikinci olarak da Flask-2 uygulamazı çalıştıralım. Bunun için terminalden python3 app2.py ile uygulamızı çalıştırıp çıktıya bakalım.
Çıktılar görülüğü gibi basit load balancer mantığını test etmek için iki farklı çıktı elde ettik. Uygulama kodlarına bakalım.
ve
Şimdide iki ayrı uygulamamız için Dockerfile yazalım ve Dockerfile dan bir docker image oluşturalım.
ve
Dockerfile ların bulunduğu dizinde
docker image build --tag app1 .docker image build --tag app2 .
ve
“docker image ls” komutu ile baltığımızda.
Oluşturduğumuz “app1” ve “app2” image lerinden docker container oluşturalım. Bunun için ,
docker run --name app1 -dp 5001:5000 app1docker run --name app2 -dp 5002:5000 app2
Tarayıcıdan “localhost:5001” ve “localhost:5002” gittiğimizde
ve
Şimdi yazımızın konusu olan Laod Balancer yazalım. İlk olarak Dockerfile bakalım.
Dockerfile göz atacak olursak nginx default.conf siliyoruz ve kendi oluşturduğumuz default.conf ile docker image alıyoruz. default.conf göz atacak olursak.
Configte bilmemiz gereken,
- “server” ip adresi bilgisayarımızın ip adresini ve 2 adet ayağa kaldırdığımız container portunu veriyoruz ve yük dağılımını iki container arasında gidip gelmesini sağlıyoruz.
docker image build --tag load_balancer_nginx .docker run --name nginx -dp 8082:80 load_balancer_nginx
Şimdide basit bir script ile test edelim.
while true; do curl http://localhost:8082 && sleep 2 && echo ""; done;
Nginx ile load balancer kurulumuz başarılı şekilde gerçekleşti.
Şimdi de aynı uygulamayı kubernetes ile yapalım. Bunun için ilk olarak app1 için yaml yazalım. Daha öncesinde kubernetes minikube clusterı üzerinde gerçekleştirceğimiz için minikube çalıştırmalıyız.
minikube start --memory=8000 --cpus=4 --kubernetes-version=v1.21.1
ilk olarak load-balancer adında bir tane namespace oluşturalım.
kubectl create ns load-balancerkubectl get ns
“app1” uygulamamızın yaml bakacak olursak.
kubectl apply -f app1.yamlkubectl get svc -n load-balancerkubectl get pods -n load-balancerminikube service list
“app2” uygulamamızın yaml bakacak olursak.
kubectl apply -f app2.yamlkubectl get svc -n load-balancerkubectl get pods -n load-balancerminikube service list
Şimdide nginx için load balancer yaml bakalım.
kubectl appy -f nginx_load_balancer.yamlkubectl get configmaps -n load-balancerkubectl get svc -n load-balancerkubectl get pods -n load-balancerminikube service list
Son olarak test edelim. Bunun için,
while true; do curl http://192.168.49.2:32430 && sleep 2 && echo “”; done;
Görüldüğü üzere başarılı.
Bu yazımızın da sonuna gelmiş bulunmaktayız. Araştırmalarım ve sektörde karşılaştığım senaryolar üzerine yazılarımı yazmaya devam edeceğim. Umarım faydalı bir yazı olmuştur. Yazımı okuduğunuz için teşekkürler.