Kubernetes Nedir?
1

Containerların popülerleşmesi ile beraber teknoloji dünyasında containerlar için bir çok hizmet çıkıyor. Bunun en önemli sebeplerinden bir tanesi Docker ekosisteminin kendisinin de microservice yapısında olmasından kaynaklanıyor. Yani siz containların çalışması için docker engine kullanabilirsiniz ama onların loglanması ve monitor edilmesi için başka bir framework kullanabilirsiniz. Bu hizmetlerin bir çoğu Docker ekosisteminde bulunuyor fakat açık kaynak kod topluluğu birbirinden farklı yeni hizmetler sunmaya devam ediyor.

Kubernetes ilk olarak Google tarafından geliştirilen bir hizmettir. Daha sonrasında open source olarak herkesin kullanımına açılmıştır. Kubernetes servisi temel olarak container ekosisteminde microservice uygulamalarının orkestrasyonu için geliştirilmiş bir üründür. Günümüzün en önemli ve meşhur container yönetim ve orkestrasyon araçlarından bir tanesidir.

Resim-1

Kubernetes cluster’ ın özet görüntüsü yukarıda ki gibidir. Docker swarm da olduğu gibi master ve node şeklinde önemli iki bileşeni vardır.

Masterları Kubernetes clusterının kontrol merkezi olarak düşünebilirsiniz. Tüm cluster’ I yönetmekten, izlemekten, değişiklikler yapmaktan ve oluşan olaylara cevap vermekten sorumludur. Nodelar ise esas işi yapan bileşenlerdir. Yaptıkları işleri, durumlarını masterlara sürekli olarak iletirler.

Kubernetes altyapı olarak sadece çalışan işletim sisteminin Linux olmasını ister, onun haricinde Linux’ un hangi platformda çalıştığı ile ilgilenmez. Kubernetes clusterlarını VMWare, Azure, Amazon, Openstack, Google Cloud vs. gibi istediğiniz birçok platformda çalıştırabilirsiniz.

Masters

Kubernetes Master içerisinde bir çok bileşen vardır fakat bunların hepsi tek sunucu da çalışırlar. Bunları bir den fazla Master kurarak High Available hale getirebilirsiniz.

Genel olarak Master Nodelar üzerinde herhangi bir iş yükü çalıştırılması tercih edilmez. Çalıştırılacak iş yükleri nodular üzerinde çalıştırılırlar.

Kubernetes de Master ile api server (kube-apiserver) ile haberleşiriz. Restful API JSON ile manifest(konfigurasyon) dosyaları kubernetes master’a iletilir. Docker da olduğu gibi Kubernetes de bir cluster store’ a sahiptir(KV). Cluster store da cluster durumu ve configurasyonu saklanır. Veritabanı olarak NoSQL bir yapı olan etcd kullanılır.

Master içerisinde ki bir diper bileşen Controller Managerdır (kube-controller-manager). Bu bileşen kubernetes sistemine verilen manifest dosyası ile desired state dediğimiz istenilen durumu korumak ve tüm konfigurasyonu istenilen durumda tutmaktan sorumludur (node sayıları, Enpointler, dns vs.)

Bir diğer bileşen ise scheduler servisidir(kube-scheduler). Bu servis işlemlerin zamanlaması için kullanılır ve nodelara görevler atar.

Tüm bu bileşenlere işlemleri daha önce de bahsettiğimiz gibi apiserver üzerinden erişiriz. Master ile tek iletişim aracımız apiserver’ımızdır. Biz JSON dosyaları hazırlayarak istediğimiz işlemleri kubectl komutları ile apiserver’ a iletiriz api server master içerisinde yukarıda bahsettiğimiz bileşenlere ilgili görevleri kendisi dağıtır.

Nodes

Nodelar kubernetes ekosisteminde iş yüklerinin çalıştığı yerlerdir. Nodelar da Master da olduğu gibi bir çok bileşenden oluşturlar.

Bu bileşenlerin en önemlisi kubelet‘ dir. Kubelet bir anlamda node’ un kendisidir. Node’ u bir agent olarak da düşünebiliriz. Node kubernetes cluster’a kubelet ile üye olur. Podların başlatılmasından kubelet sorumludur. Ve node içerisinde ki olaylar için master’a bilgilerin iletilmesinden sorumludur.

Bir diğer bileşen ise container engine dir. Container engine container yönetiminden sorumludur. Containerların başlatılması, durdurulması, container imajlarının alınması vs. Kubernetes içerisinde iki container engine desteklenir, rkt ve Docker. Genellikle docker tercih edilir.

Bir diğer bileşen ise kube-proxy bileşenidir. Bu bileşen kubernetes network’ünden sorumludur. Pod IP adreslerini yönetir, load balancingden sorumludur. Kubernetes de pod içerisinde ki tüm kontainerlar tek IP yi paylaşırlar.

Pods

Kubernetes sisteminde ki en atomik computing birimi Podlardır. Bunları sanallaştırma ekosisteminde ki sanal makinalar, docker ekosisteminde ki containerlar olarak düşünebilirsiniz. Nodelar ve Masterlar podları host etmek ve organize etmek için vardır.

Kubernetes’I tanımlarken container orkestrasyon servisi olarak tanımlamıştırk. Kubernetes ekosisteminde containerlar podların içerisinde çalışırlar. Her container bir pod içerisinde çalışmak zorundadır. Bir pod içerisinde birden fazla container da çalışabilir fakat bu çok tercih edilen bir senaryo değildir. Çok özel bir ihtiyaç olamadığı zaman her pod bir container olarak düşünülebilir.

Pod pratikte herhangi bir şey çalıştırmaz. Podlar sadece container orkestrasyonunu kolaylaştırmak için bazı servisleri barındırır. Bunların tamamı containerların daha esnek, performanslı ve high available çalışması içindir.

Yukarıda bahsettiğimiz gibi her pod bir container olarak düşünülebilir. Çünkü dediğimiz gibi en atomic işlem birimlerimiz podlardır. Siz bir servisi scale etmek istiyorsanız yani fazla yükten dolayı gelen istekleri karşılamak için kaynak sayısını arttırmak istiyorsanız pod sayısını arttırırsınız. Pod içerisinde ki container sayısını değil. Unutmayalım bir pod içerisinde bir den fazla container özel mimariler için kullanılıyor.

Resim-2

Podlar yaşam süresi olan bileşenlerdir. Bir Pod da sorun olduğu zaman, replication controller bileşeni manifest dosyasında belirtilen tanıma göre aynı özelliklerde uygun bir node üzerinde bir pod oluşturulur. Bu oluşturulan pod tamamen yeni bir poddur. Dolayısı ile mevcut pod’un yeniden kullanılması söz konusu değildir.

Resim-3

Yukarıda ki resimde anlatıldığı gibi, veritabanı barındıran bir podda sorun oluyor ve pod cluster durumuna göre farklı bir node’da yeniden açılıyor. Bu tamamen yeni bir pod’dur.

Yukarıda anlattığımız resmi incelediğimiz zaman hemen bir sorun gözümüze çarpıyor, yeni oluşturulan pod’un IP adresi farklı. Aynı zamanda bu sadece sorun olduğu durumlarda geçerli bir durumda değildir. Container imaj da bir güncelleme yaptığınızda da bu güncelleme yeni bir pod ile devreye alınr. Veya scale-out ve scale-in durumlarında da aynı durum geçerlidir. Yeni oluşan podlar sürekli yeni IP ler ile oluşacaktır. Bu çok dinamik bir şekilde değişen microservis yapıları için ciddi bir sorun. Bu sorun kubernetes sisteminde çok güzel ve esnek bir servis ile çözüm buluyor.

Services

Yukarıda anlatılan ve yeni pod oluşumlarında sorun yaratan network problem kubernetes de orkestrasyon işlerimizi çok kolaylaştıran servis objeleri ile yapılır. Manifest dosyasında bir servis tanımı yapılır.

Resim-4

Bu load balancing kubernetes de çok kolay, esnek ve hızlı uygulanabilirşekilde çözülmüştür.

Labels

Kubernetes servisleri kendi ile eşleşen ve podlara koyulan etiketler ile load balancing mekanizmasını çalıştırır. Servis ve podlara birden fazla etiket koyulabildiği için dev/test ortamlarında prod ortamına geçişte oldukça basitleştirilmiştir.

Resim-5

Yukarıda gördüğünüz gibi servis kendi etiketleri ile eşleşen podlar arasında load balancing yapmaktadır. Bu etiketleme işlemi versiyonlar arası geçişlerde oldukça esnek bir yapı sunmaktadır.

Kubernetes Management, Images, Services, Pods

Kubernetes orkestrasyon ve pod yönetiminde manifest dosyaları aracılığı ile declarative bir şekilde yönetilir. Manifest dosyları JSON veya YAML dosyalarıdır. Kubernetes üzerinde kuracağınız ortamın tüm konfigurasyonunu bu dosyalarda belirtirsiniz. Replication controller bu dosyaya göre ortamınızı düzenler.

Bu şekilde ortam sürekli istenilen configürasyon da çalışır(desired state).

Resim-6

Yukarıda görüldüğü gibi YAML dosyamızda kubernetes üzerinde yapmak istediğimiz konfigürasyon declarative bir şekilde belirtilmiştir. Kubernetes ortamımız bu şekilde kurulacak ve bu şekilde çalışması için gerekli controller sağlanacak. Yukarıda bahsettiğimiz kubernetes bileşenleri bu konfigürasyonun bu şekilde çalışmasını sağlayacaklar.

Gördüğünüz gibi Kubernetes Container ekosistemine bir çok yenilik, kolaylık ve esneklik getirmekte. Bu anlamda kubernetes şimdiden container ortamları için vazgeçilmez bir yönetim aracı olmuş durumda.

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

Referanslar

https://www.mshowto.org

TAGs: kubernetes, containers, container yönetimi, container management, pods, open source, linux, yaml, json, kubernetes cluster, kubernetes nedir, high available containers, microservice

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

Onur Yüksektepeli - Chief Technology Architect | Micosoft MVP Onur Yüksektepeli Nephocraft firmasının kurucusu aynı zamanda kendi firmasında teknoloji çözümleri mimarıdır. 15 Yıldan fazla IT tecrübesi ile temel uzmanlık alanı olan Platform ve diğer teknolojiler için müşterilerine ürün ve hizmetler sunmaktadır. Microsoft MVP ünvanına sahip Onur Yüksektepeli birçok IT etkinliğinde aktif konuşmacı olarak ve IT topluluklarında yönetici olarak aktif rol üstlenmektedir. Nephocraft firmasın da yönetici olarak oluşturduğu çözümlerde yeni teknoloji gelişmelerini de göz önünde bulundurarak, müşterilerine esnek, yenilikçi, akıllı ve üretken iş çözümleri üretmektedir.Onur Yüksektepeli bulut, platform, data, devops, development gibi konularda aktif danışmanlık ve IT eğitmenliğine de devam etmektedir.

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

Yorumlar (1)

  1. 15/02/2020

    Çok güzel bir yazı olmuş. Bu mimari ile ilgili henüz çok kısıtlı bilgim var, temel noktaları o kadar güzel anlatmışsınızki artık biraz daha detaya girebilecek bilgiye sahip olduğumu hissedebildim. Teşekkürler.

Bir yanıt yazın

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