Kubernetes Temelleri 2/20

Kubernetes Temelleri

Merhaba arkadaşlar, bugün sizlerle beraber Kubernetes nedir, hangi temeller üzerine geliştirilmiştir, bileşenleri nelerdir vb. birçok konuyu ele alacağız.

Kendi dizsütü bilgisayarınızda bir container çalıştırmak nispeten basit bir iştir. Ancak container’ları birden fazla host’a bağlamak, onları ölçeklendirmek, aksaklık olmadan uygulamaları dağıtmak ve çeşitli kaynaklar sağlayarak hizmet yönetimi zor olabilir.

Kubernetes bu zorluklara başlangıçta basit, güçlü, açık ve genişletilebilir API ile hitap ediyor. Yeni nesneler ve controller’lar ekleme yeteneği, çeşitli üretim ihtiyaçları için kolay özelleştirmelere olanak tanır.

“Container’lı uygulamaların dağıtımını, ölçeklendirilmesini ve yönetimini otomatikleştirmek için açık kaynaklı bir sistemdir.”

kubernetes.io web sitesinde anlatılanlara göre Kubernetes;

Kubernetes’lerin önemli bir yönüde, Google’da Borg adlı bir projede 15 yıllık bir tecrübeye dayanmasıdır. Google’ın altyapısındaki sanal makineler verimerkezlerinde yüksek ölçeklere ulaşmaya başlamasıyla birlikte container’lar cluster’ları verimli bir şekilde paketlemek için iyi bir çözüm sunmaya başladı.

Kubernetes yunancada, Helmsman ve geminin pilotu anlamına gelmektedir. Docker container’ların denizcilik temasını koruyan kubernetes, bir container gemisinin pilotudur.

İsminin söylenmesindeki zorluk nedeniyle K ile s arasında 8 tane harf olması sebebiyle k8s takma adını kullanmaktadır.

Kubernetes Bileşenleri

Container’ların dağıtılması ve kubernetes’in kullanılması, uygulamaların dağıtılmasında geliştirme ve sistem yönetimi yaklaşımında bir değişiklik gerektirebilir. Geleneksel bir ortamda, bir uygulama(web sunucusu gibi..), özel bir sunucuya yerleştirilmiş yekpare bir uygulama olarak çalışır. Web trafiği arttıkça, uygulama ayarlanacak ve belkide daha büyük donanıma taşınacaktır. Birkaç yıl sonra bile donanımda, mevcut web trafiği gereksinimlerini karşılamak için birçok özelleştirme yapılmaya devam edilecektir.

Kubernetes büyük bir sunucu kullanmak yerine, çok sayıda küçük web sunucusunu yada microservis’i dağıtarak aynı konuya yaklaşım sağlar. Uygulamanın server ve client tarafı bir isteğe cevap verebilecek birçok olası ajan olmasını beklemektedir.

Küçük servislerin geçici doğası, ayrıştırma işleminede izin verir. Geleneksel uygulamanın her yönü geçici microservis veya ajanlar ile değiştirilir. Bu ajanlara veya onların değişikliklerine katılmak için servisler ve API çağrılarını kullanırız. Bir servis, trafiği bir ajandan başka bir yere (örneğin; frontend web sunucusundan, backend web sunucusuna) aktarır ve birisinin yıkılması veya değiştirilmesi durumunda yeni bir IP ile birlikte yeniden inşa edilir.

Bileşenler arasında iletişim kurmak esneklik sağlayan API çağrılarına dayanır. Yapılandırma bilgileri bir JSON dosya formatında saklanır, ancak en çok YAML formatında yazılır. Kubernetes ajanları, veritabanına kayıt gerçekleştirmeden önce YAML dosyalarını JSON formatına çevirir.

Kubernetes, C++, Python ve Java dilleri arasındaki hibridizasyona benzeyen taşınabilir bir dil olan Go dilinde yazılmıştır.

Kubernetes Mimarisi

Kubernetes Mimarisi
Kubernetes Mimarisi

Kubernetes’i hızlı bir şekilde gözden geçirmek için, sistem bileşenlerinin üst düzey bir mimari şemasını gösteren Kubernetes Mimarisi grafiğine bir göz atalım.

En basit haliyle kubernetes minions olarak adlandırılan bir merkez yönetici(master node) ve bazı worker node’lardan oluşur. Yönetici, cluster’ın durumunu, kapsayıcı ayarlarını ve ağ yapılandırmasını korumak için bir API Server, bir zamanlayıcı(schedular), çeşitli controller’lar ve bir depolama sistemi çalıştırır.

Kubernetes API Server üzerinden bir API sunar. API ile kubectl adında yerel bir istemci kullanarak iletişim kurabilir veya kendi istemcinizi yazıp curl komutlarını kullanabilirsiniz. kube-schedular, API’ya, gelen container’ların çalıştırılması taleplerini iletir ve bu container’ı çalıştırmak için uygun bir node bulur. Cluster’daki her node iki tane işlem yürütür: bir kubelet ve kube-proxy. kubelet container’ları çalıştırma taleplerini alıyor, gerekli kaynakları yönetiyor ve local node’da container’ları izliyor. kube-proxy, container’ları ağ içerisinde ortaya çıkarmak için ağ kuralları oluşturur ve yönetir.

Terminoloji

Kubernetes’in container’ları dağıtmak ve yönetmek içib bir orchestration sistemi olduğunu öğrendik. Container’lar ayrı ayrı yönetilmez; bunun yerine Pod adı verilen daha büyük bir nesnenin parçası olarak yönetilirler. Pod, bir IP adresini paylaşan, storage ve namespace alanlarına erişebilen, bir veya birden fazla container’lardan oluşur. Genellikle bir pod’daki bir container bir uygulamayı çalıştırırken, diğer container’lar birincil uygulamayı desteklemektedir.

Orchestration, bir dizi döngü izleyen yapı veya controller aracılığıyla yönetilir. Her controller, belirli bir nesne durumu için kube-apiserver‘ı sorgulayarak, bildirilen durum geçerli durumla eşleşene kadar nesneyi değiştirir. Bu controller’lar kube-controller-manager’da derlenir. Container’lar için varsayılan olarak controller’lar Deployment olarak adlandırılır. Bir Deployment, PodSpec‘te IP adresi ve storage gibi bildirilen kayakların kullanılabilir olmasını ve ReplicaSet‘i dağıtmasını sağlar. ReplicaSet, container engine’nına Docker’a bildirilmiş olan istenilen adet kadar container’ı çalıştırılana kadar bir container’ı ortaya çıkartmak veya sonlandırmak için pod’u dağıtan ve yeniden başlatan bir controller’dır. Önceden bu işlev ReplicationController ile gerçekleştirilirdi. Ayrıca tek veya tekrar eden görevleri yerine getirmek için Jobs ve CronJobs işlemleri vardır.

Yüzlerce node’da binlerce pod’u yönetmek, yönetimi zor bir görev olabilir. Yönetimi kolaylaştırmak için metadata’nın bir parçası olan label‘ları kullanıyoruz. Label, tek tek adları veya UID’leri bilmek zorunda kalmadan nesnelerin durumunu kontrol ederken veya değiştirirken işimizi kolaylaştırır. Pod metadata’larında bir toleration olmadıkça, node’lara pod atamalarını engellemek için taints kullanılabilir.

Metadata içerisinde nesnede kalan ama kubernetes komutları tarafından kullanılmayan annotations adı verilen ek açıklamalar vardır. Bu bilgi üçüncü taraf ajanları veya diğer araçlar tarafından kullanılabilir.

Kubernetes Kullanıcıları

Kubernetes Kullanıcıları
Kubernetes Kullanıcıları

Kubernetes çok hızlı benimseniyor. Daha fazla bilgi için kubernetes web sitesinde yer alan bu başlığı incelemelisiniz.

Kubernetes eğitim serisinin 2. yazısını bu noktada sonlandırmış oluyoruz. Kubernetes Temellerine hızlı bir giriş yaptık, 3. yazımızda Kubernetes Kurulum ve Yapılandırma işlemlerine giriş yapacağız, görüşmek üzere !

Umarım bu yazı sizin için bilgilendirici olmuştur. Yazıyla ilgili bir sorunuz, görüşünüz veya isteğiniz varsa alt kısımda bulunan yorumlardan veya mail adresimden iletişime geçebilirsiniz. Bu yazının başkaları içinde bilgilendirici olduğunu düşünüyorsanız sosyal olun ve sosyal medyada paylaşın! Okuduğunuz için teşekkürler !!!!

Leave a Reply

Your email address will not be published. Required fields are marked *