Docker Desktop Üzerinde Kubernetes Kullanımı – Bölüm 3: Traefik ile Yük Dengeleme
  1. Anasayfa
  2. Container

Docker Desktop Üzerinde Kubernetes Kullanımı – Bölüm 3: Traefik ile Yük Dengeleme

0

İlk bölümde Docker Desktop üzerinde Kubernetes özelliğini etkinleştirip Kubernetes’e bir Nginx container’ı deploy etmiş, ikinci bölümde ise Kubernetes Dashboard kurulumu yapmıştım. Bu kez ise yine Docker Desktop üzerinde yer alan Kubernetes‘e daha önce Azure VM üzerine kurulumunu gerçekleştirdiğim, http reverse proxy ve load balancer olarak özetleyebileceğim Traefik kurulumu yapacağım.

Traefik kurulumu öncesinde yük dengeleme yapacağımız container’ı deploy edeceğim. Bunun için ilk olarak Kubernetes deployment objesi için Resim-1‘de göreceğiniz gibi bir yaml dosyası oluşturalım. Burada işletim sistemi ve http isteği ile ilgili bilgileri dönen containous/whoami imajı kullanacağım.

Resim-1

Daha sonra da Kubernetes service objesi oluşturalım (Resim-2).

Resim-2

Son olarak da bir Ingress tanımı yapıyorum (Resim-3).

Resim-3

Bütün bu obje tanımlarını deployment.yml adında tek bir dosya olarak kaydediyorum. Bu yaml dosyasının tamamına buradan erişebilirsiniz. PowerShell üzerinden bu dosyanın bulunduğu klasörde kubectl apply -f .\deployment.yml komutu ile tanımını yaptığımız objeleri Kubernetes üzerinde oluşturuyorum ve kubectl get all komutu ile kontrol ediyorum (Resim-4).

Resim-4

Pod çalışıyor olarak görünüyor ancak yine de emin olmak için kubectl port-forward pods/my-dep-7578c56cdc-mkls2 80:80 komutu ile container’ın çalışıp çalışmadığı kontrol edebiliriz. Tarayıcıya http://localhost yazdığımızda pod’a ait hostname ve IP gibi bilgileri görebiliyoruz. (Resim-5).

Resim-5

Kubernetes’e uygulamamızı başarılı bir şekilde deploy ettikten sonra sıra Traefik kurulumu yapmaya geldi. Bunun için de benzer bir şekilde bir yaml dosyası oluşturacağım.

NOT: Kurulumu helm chart kullanarak da yapabilirsiniz.

İlk olarak bir service account oluşturarak başlıyorum (Resim-6).

Resim-6

Sırada deployment objesi var (Resim-7). Burada Traefik’in 2.1 sürümünü kullanacağım. Container portu olarak 8000, dashboard erişimi için 8080 portlarını tanımlıyorum. Args kısmında ise;

  • api.insecure : Dashboard’a direkt erişim sağlamak için API’a da direkt erişimi aktif hale getiriyorum. Production için tavsiye edilmediğini belirtmeden geçmeyeyim.
  • providers.kubernetesingress : Traefik’in Kubernetes Ingress provider’ını kullanacağını belirtiyorum.
  • entrypoints.web.Address=:80 : Gelecek isteklerin 80 portundan olacağını tanımlıyorum.

Resim-7

Son olarak da service objesi tanımını yapıyorum (Resim-8). Bu yaml dosyasını da traefik.yml olarak kaydediyorum, dosyanın tamamına buradan erişebilirsiniz.


Resim-8

Benzer şekilde kubectl apply -f .\traefik.yml komutu kullarak deployment işlemini yapıyorum ve kubectl get all komutu ile kontrolleri sağlıyorum (Resim-9).

Resim-9

Tarayıcıya http://localhost:8080/ adresini yazarsanız sizi Resim-10‘da göreceğiniz Traefik Dashboard’a yönlendirecek. Traefik Dashboard ilk versiyona göre oldukça gelişmiş. Yaml üzerinde yaptığımız tanımları Dashboard sayfasında da görebilirsiniz. En üstte entrypoint ve en altta da provider tanımları yer alıyor. Orta kısımda da http ve tcp için ayrı ayrı routers ve services, http için de bunlara ek olarak middlewares grafikleri yer alıyor. Tracing, Metrics ve Access Log özelliklerini aktif hale getirmediğim için kapalı olarak göreceksiniz.

Resim-10

İlk olarak Http Routers kutusu içerisinde yer alan Explore linkine tıklayarak ilgili sayfaya gidiyorum (Resim-11). Router isminden de anlaşılacağı üzere gelen istekleri ilgili servislere yönlendiren özellik. Burada Traefik’in kendi API ve Dashboard’u ile yazının başında deploy ettiğimiz servis yönlendirmelerini görebilirsiniz. Örnek olarak localhost@kubernetes isimli kural http://localhost/ ‘a gelen istekler tanımladığımız my-service‘e yönlendiriyor.

Resim-11

En altta yer alan ve localhost@kubernetes isimli kurala tıkladığımızda ise Resim-12‘de göreceğiniz detay sayfasını açıyor.

Resim-12

HTTP Services ise Kubernetes üzerine gelen istekleri kontrol eden servislere nasıl erişileceğinin yapılandırılmasından sorumlu olan kısım. Burada da Traefik’in kendi API ve Dashboard’u ile load balancer tipindeki default-my-service-http@kubernetes‘i
görebilirsiniz (Resim-13).

Resim-13

default-my-service-http@kubernetes’e tıkladığımda ise Resim-14‘te görebileceğiniz servis detaylarına yönlendirecek. Kısaca özetlemek gerekirse http://localhost/ a gelen istekler 10.1.0.167 IP adresli pod’un 80 portuna yönlendirilecek.

Resim-14

Tek bir pod olduğu zaman yük dengelemeyi nasıl yaptığını anlayamayacağız için pod sayısını kubectl scale –replicas=2 deployments/my-dep komutu ile arttıralım ve kubectl get pods komutu ile de 2 pod çalıştığını teyit edelim (Resim-15).

Resim-15

Traefik Dashboard üzerinde tekrar geldiğimizde ise Servers altında yeni pod’u da görebiliyorum (Resim-16).

Resim-16

Dashboard üzerinde görebiliyoruz ancak gerçekten de yük dengeleme nasıl gerçekleşiyor denemek için iki tarayıcı birden açıp http://localhost/ adresine istek gönderiyorum. Resim-17‘de de göreceğiniz gibi istekler farklı pod’lara gidiyor.

Resim-17

Bu konuyla ilgili sorularınızı alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.

Referanslar

www.mshowto.org

https://www.mshowto.org/yazilim-gelistiriciler-icin-azure-azure-vm-uzerine-traefik-kurulumu.html

https://www.mshowto.org/docker-desktop-uzerinde-kubernetes-kullanimi-bolum-1.html

https://www.mshowto.org/docker-desktop-uzerinde-kubernetes-kullanimi-bolum-2.html

https://github.com/containous/whoami

https://docs.traefik.io/

TAGs: Docker, Docker Desktop, Containers, Container, Traefik, Traefik Dashboard, Kubernetes, Kubernetes Ingress, k8s, kubectl, PowerShell, YAML, HTTP Router, Load Balancer

Bu İçeriğe Tepkin Ne Oldu?
  • 5
    harika_
    Harika!!
  • 0
    be_enmedim
    Beğenmedim
  • 1
    _ok_iyi
    Çok iyi
  • 0
    sevdim_
    Sevdim!
  • 0
    bilemedim_
    Bilemedim!
  • 0
    olmad_
    Olmadı!
  • 0
    k_zd_m_
    Kızdım!

Mert Yeter, lisans eğitimini Yıldız Teknik Üniversitesi'nde, yüksek lisans eğitimini ise Bahçeşehir Üniversitesi'nde tamamlamıştır. Yazılım dünyasına üniversitenin ilk yıllarında aldığı QBasic ile başlayan Mert, .NET ve SQL Server gibi Microsoft teknolojileri ile devam etmiş; yüksek lisans tezini ise Linux konusunda yapmıştır. Netaş ve Ziraat Teknoloji gibi sektörün önde gelen firmalarında C#, .NET, SQL Server, Cisco Contact Center ürünleri ve Linux üzerine çalışmış, bir çok firmaya da bu konularda danışmanlık vermiştir.

Yazarın Profili

Bültenimize Katılın

Tıklayın, üyemiz olun ve yeni güncellemelerden haberdar olan ilk kişi siz olun.

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir