Kubernetes Nedir?

Kapsayıcıları, mikro hizmet mimarisini, modern uygulama geliştirmeyi ve yerel bulut bilişimi anlamak isteyenler Kubernetes Nedir? sorusunun yanıtlarıyla önde gelen teknolojilere yol alabilir.

K8s olarak da bilinen Kubernetes, kapsayıcılı uygulamaların mikro hizmet kümelerini yönetmeyi daha basit ve daha otomatik hale getirmek için tasarlanmış oldukça esnek ve karmaşık bir sistemdir.

Bulutun Linux işletim sistemi olarak görülen Kubernetes, iş yüklerini ölçeklendirmekten sorumludur. Kubernetes, genel bir bulut hizmetinde veya şirket içinde çalıştırılabilir, son derece modülerdir, açık kaynaklıdır ve aktif bir topluluğa sahiptir.

Kubernetes genellikle “kapsayıcılı uygulamaları dağıtmaya, ölçeklendirmeye ve yönetmeye olanak tanıyan bir kapsayıcı düzenleme sistemi” olarak tanımlandığından kapsayıcı düzenlemenin ne olduğunu bilmek önemlidir:

Kapsayıcı düzenleme, kapsayıcıları başlatmak ve yaşam döngülerini yönetmek için birden çok sanal makineden veya fiziksel sunucudan oluşan bir bilgi işlem kümesini tanımlama, dağıtma ve çalıştırma yeteneğidir.

Çok büyük bilgi işlem gücü gerektiren hesaplamaların birden çok bilgisayar arasında dağılımını yönetmek için Kubernetes kümesi doğal bir çözümdür. Kubernetes ayrıca Sürekli Entegrasyon/Sürekli Dağıtım veya Sürekli Teslimat metodolojisi için de önemli faydalar sağlar.

Kubernetes’in anlaşılması için mikro hizmet, kapsayıcı, Docker gibi bazı kavramların açıklanmasına ihtiyaç duyulur.

Mikroservis Nedir?

Mikro Hizmet de denen mikroservis, yalnızca bir sunucuda veya sanal bir bilgi işlem örneğinde çalışan ve ağ isteklerine yanıt veren bir bilgisayar programıdır. Tipik bir Rails, Django, Node.js uygulamasından farklı olmayan mikro hizmet, nasıl oluşturulduğuna göre değil, daha geniş bir sistem veya çözüme nasıl uyduğuna göre tanımlanır. Bir hizmeti, mikro hizmet yapan genel olarak daha dar bir kapsama sahip olması ve daha küçük görevleri iyi yapmaya odaklanmasıdır.

Kapsayıcı Nedir?

Geliştiriciler kod yazarken kendi yerel geliştirme ortamlarında çalışırlar ancak kodu üretime taşımaya hazır olduklarında, cihazlarında mükemmel çalışan kod, farklı işletim sistemi, farklı kütüphaneler gibi nedenlerle üretimde çalışmama gibi sorunlar çıkarabilir. .

Kapsayıcılar (container), bu kritik taşınabilirlik sorununu çözerek, kodu üzerinde çalıştığı temel altyapıdan ayırmanıza olanak tanır. Geliştiriciler, doğru çalışması için gereken tüm bin’ler ve kitaplıklar dahil olmak üzere uygulamalarını küçük bir kapsayıcı görüntüsünde paketleyebilir.

Kapsayıcıları VM’lerin daha hafif sürümleri olarak düşünebiliriz. Kapsayıcılar ve VM’ler arasındaki önemli fark, kapsayıcıların kendi işletim sistemlerine ihtiyaç duymamasıdır. Bir ana bilgisayardaki tüm kapsayıcılar, o ana bilgisayarın işletim sistemini paylaşır ve bu da birçok sistem kaynağını serbest bırakır.

Teknik olarak kapsayıcı yalnızca, kendisine uygulanan bazı kısıtlamalara sahip bir Linux cihazında çalışan yürütülebilir bir dosyadan oluşturulur. Ancak “Kapsayıcı” dendiğinde çoğu zaman sadece bir Linux sürecinden bahsedilmez, aynı zamanda yürütülebilir dosyanın nasıl paketlendiğinden ve saklandığından da bahsedilir.

Kapsayıcılar ve kapsayıcı platformları, büyük taşınabilirlik sorununu çözmenin yanı sıra geleneksel sanallaştırmaya göre birçok avantaj sağlar.

Kapsayıcılı uygulamaların dağıtımını, zamanlamasını ve ölçeklenmesini otomatikleştirmek için kullanılan bir sistem olan Kubernetes, Docker gibi birçok kapsayıcı aracını destekler.

Docker Nedir?

Docker, Linux ve Windows üzerinde çalışan, uygulamalarınızı altyapınızdan ayırmanıza olanak tanıyan, açık kaynaklı bir yazılımdır. Şirketlerin uygulama geliştirme yöntemlerini değiştiren Docker, kurulu olduğu bilgisayarın işletim sistemini sanallaştırarak ona taşınabilir olma işlevselliği kazandırır.

Bugün, birçok şirket, uygulama oluşturma, çalıştırma ve yönetme sürecini basitleştirmek için Docker’ı kullanmaktadır. En popüler kapsayıcı platformu olan Docker’ın, piyasaya çıktığı 2013 yılından bu yana açık kaynaklı olması, mevcut pazar hakimiyetine sahip olmasında etkili olmuştur.

Kubernetes ve Docker

Kubernetes ve Docker, kapsayıcılı uygulamaları akıllıca yönetmek için kullanılan çözümlerdir. makine kümelerinde kapsayıcıları düzenlemek ve zamanlamak için kullanılabilecek kendi yerel kümeleme aracını sunar.

Kubernetes, Docker gibi konteynerleştirme platformları için açık kaynaklı bir düzenleme yazılımıdır. Bir Kubernetes kümesinde kolaylıkla bir Docker derlemesi çalıştırılabilir. Konteyner işlemlerini kontrol eden bir API’ye sahip olan Kubernetes, bir sanal makine kümesi düzenlemenize ve kapsayıcıları bu sanal makinelerde çalışacak şekilde zamanlamanıza olanak tanır.

Kubernetes ve Docker temelde farklı teknolojilerdir ancak birlikte çok iyi çalışırlar ve her ikisi de dağıtılmış bir mimaride kapsayıcıların yönetimini ve dağıtımını kolaylaştırır.


Docker Kubernetes olmadan kullanılabilir, geliştirme ortamlarında, Docker’ı Kubernetes gibi bir kapsayıcı düzenleyici olmadan kullanmak yaygındır. Oysa Kubernetes’in orkestrasyon yapmak için Docker gibi bir “kapsayıcı çalışma zamanına” ihtiyacı vardır.

Kapsayıcıları geliştirmek, dağıtmak ve çalıştırmak için basit, temel düzeyde bir platform sağlayan Docker’ın, Kubernetes çerçevesinin oturduğu zemin olduğu söylenebilir. Kubernetes ve Docker gerçek anlamda rakip değildir ve temel teknolojileri çoğunlukla tamamlayıcıdır.

Gerçekte kapsayıcıların üretim ortamında hacimsel olarak yönetilmesi kolay değildir, bu nedenle bir düzenleme sistemine ihtiyaç duyulur. Docker gibi kapsayıcı platformları için kapsayıcı düzenleyicisi olan Kubernetes, yaygın olarak Docker ile kullanılır, ancak RunC ya da cri-o gibi diğer kapsayıcı çalışma zamanları da Kubernetes ile dağıtılabilir.

Docker ve Kubernetes arasındaki önemli fark, Docker’ın tek bir düğümde çalışması, Kubernetes’in ise bir kümede çalışacak şekilde tasarlanmış olmasıdır.

Docker birçok farklı modül ve eklenti sunar. En popüler olanları Docker Compose (geliştirme, test etme, CI iş akışları ve hazırlama ortamları için), Docker Machine (Dağıtım ortamları oluşturmak ve uygulamanızda çalışan mikro hizmetleri yönetmek için), Docker Stack (birden fazla hizmeti tek bir dosyada tanımlamak için), Docker Swarm‘dır (farklı ana makinelerde birden çok kapsayıcıyı yönetmek için).

Kubernetes ve Docker’ı karşılaştırmak oldukça yaygındır, ancak asıl karşılaştırma Kubernetes ve Docker Swarm arasında yapılır.

Docker Swarm, Docker ekosistemine entegre edilmiş ve Docker kapsayıcılarının kümelenmesine odaklanan, Kubernetes’e benzer bir düzenleme teknolojisidir. Kubernetes, Docker Swarm’dan daha kapsamlı olan ve üretimde ölçekli düğüm kümelerini verimli bir şekilde koordine etmesi amaçlanan Docker kapsayıcıları için bir kapsayıcı düzenleme sistemidir.

Docker kendi başına kapsayıcı görüntüleri oluşturmanıza, bunları bir kayıt defterinde yönetmenize, kapsayıcıları çalıştırmanıza ve onlarla iletişim kurmanıza ve bunları Docker Compose kullanarak çok kapsayıcılı bir uygulamada bir araya getirmenize olanak tanır.

Kubernetes ve Docker, kendi temel uzmanlık alanlarında endüstri standartlarıdır ve birlikte, kapsayıcı yönetimi, dağıtımı ve geniş ölçekte orkestrasyon için iyi entegre edilmiş bir platform sağlarlar.

Kubernetes Neden Önemli?

Kubernetes Nedir? Kubernetes ve Docker
Kubernetes; Google, AWS, Microsoft, IBM, Intel, Cisco ve Red Hat gibi önemli oyuncular tarafından desteklenen Cloud Native Computing Foundation’ın (CNCF) amiral gemisi projesidir.

Farklı ölçeklerdeki şirketlerin yatırım yaptığı ve çok sayıda bulut sağlayıcısının sunduğu bir hizmet olan Kubernetes;

  • çok sayıda kapsayıcıyı ve kullanıcıyı aynı anda idare etmeye olanak tanır (Bir uygulama, aynı anda birbiriyle etkileşimde bulunan binlerce kapsayıcıya ve kullanıcıya sahip olabilir; bu etkileşimleri yönetmek ve takip etmek, özellikle bu amaç için tasarlanmış kapsamlı bir genel sistem gerektirir),
  • kapsayıcılar ve kullanıcılar arasındaki hizmet keşfini ve iletişimi yönetmeye yarar,
  • yükleri verimli bir şekilde dengelemeyi sağlar (Geçici, düzenlenmemiş bir ortamda, konteyner düzeyindeki yüklerin büyük ölçüde kullanıcı gereksinimlerine dayalı olması muhtemeldir, bu da sunucu düzeyinde oldukça dengesiz yüklere ve verimsiz tahsisten kaynaklanan günlük sıkışmalara, sınırlılıklara neden olur. Yük dengeleme, bu kaosu düzen ve verimli kaynak tahsisi ile değiştirir),
  • kimlik doğrulama ve güvenliği; uygulama yerine altyapı düzeyinde ele almayı ve tüm platformlarda tutarlı politikalar uygulamayı kolaylaştırır,
  • kapsayıcı tabanlı bir uygulama için dinamik, kapsamlı bir altyapı görevi görür ve dış dünya ile etkileşimlerini yönetirken korumalı, yüksek düzeyde organize bir ortamda çalışmasına olanak tanır,
  • çok platformlu dağıtım sağlar (Orkestrasyon, çok platformlu, çok bulutlu bir ortamda konteyner operasyonunu, mikro hizmet kullanılabilirliğini ve senkronizasyonu koordine etmek gibi çok karmaşık görevleri yönetir).

Kubernetes’in Bileşenleri

Kubernetes'in Bileşenleri

Kubernetes kümesinde kontrol düzlemi (Control Plane); depolama için etcd, bileşenler arasındaki iletişim için API sunucusu, hangi düğüm pod’larının çalıştırılacağına karar veren zamanlayıcı ve mevcut durumu istenen duruma göre kontrol etmekten sorumlu denetleyici yöneticisi (Controller Manager) gibi bileşenlerden oluşur.

Kubernetes kümesinde, kapsayıcılı uygulamaları çalıştıran düğüm (node) adı verilen bir dizi cihaz bulunur. Her kümenin en az bir düğümü vardır. Çalışan düğümler, uygulama iş yükünün bileşenleri olan Pod’ları barındırır. Kontrol düzlemi, kümedeki çalışan düğümleri ve Pod’ları yönetir. Üretim ortamlarında, kontrol düzlemi genellikle birden çok bilgisayarda çalışır ve bir küme genellikle birden çok düğümü çalıştırarak yüksek kullanılabilirlik ve dayanıklılık sağlar.

Etcd

Etcd, dağıtılmış bir anahtar/değer veritabanıdır. Kubernetes’te yaptığınız her değişiklik etcd’de JSON olarak saklanır. Etcd; REST API çağrısı veya kubectl aracılığıyla Kubernetes’e gönderilen herhangi bir değişikliğe karşı sistemde yapılandırılmış olanı kontrol eder.

API Sunucusu

Kubernetes bileşenlerin tümü, API sunucusu aracılığıyla birbirleriyle iletişim kurar. API Sunucusu ayrıca etcd’ye veri göndermekten ve veri çekmekten sorumludur.

Zamanlayıcı

Zamanlayıcı (Scheduler), işi birden çok düğüm arasında dağıtır. Bir pod’un ne zaman çalıştırılacağını ve hangi düğümde çalıştırılacağını bulmak için CPU ve bellek gibi kaynak gereksinimlerine bakar.

Pod

Pod’lar, Kubernetes’te dağıtabileceğiniz en küçük konuşlandırılabilir bilgi işlem birimleridir. Bir pod, bir veya daha fazla kapsayıcıdan oluşur.

Düğümler

Düğümler (Node), Kubernetes kümesinin toplu işlem gücünü oluşturan ve kapsayıcıların çalıştırılmak üzere konuşlandırıldığı yerdir. Düğümler, uygulamanızın üzerinde çalıştığı fiziksel altyapı, ortamınızdaki VM’lerin sunucusudur.

Kubelet

Kubelet, kümedeki her düğümde var olan küçük uygulamadır ve kapsayıcıların fiilen çalıştırılmasından sorumludur. Kontrol düzlemi bir düğümde bir şeye ihtiyaç duyduğunda, bunu gerçekleştiren kubelet’tir. Kubelet bir kapsayıcının tüm yaşam döngüsünü yönetir.

Kube-proxy

Kube-proxy, kümenizin içindeki ve dışındaki ağ iletişimlerini yönetir. Pod’ların birbirleriyle konuşmasına veya bazı harici hizmetlerin bir bölmeyle konuşmasına, kube-proxy yardımcı olur.

Denetleyici Yöneticisi

Kontrolör / denetleyici yöneticisi (Controller Manager), orkestrasyonun arkasındaki beyindir. Kubernetes, her biri farklı şeylerden sorumlu birden fazla denetleyiciye sahiptir. Denetleyiciler, kümenizin durumunu izler, gerektiğinde değişiklik yapar veya talep eder.

CNI – CSI

CNI; ağ sağlayıcıları ve Kubernetes arasındaki ağ arabirimlerini tanımlamak için kullanılan bir tanımdır ve bir dizi araçtır. CSI (Container Storage Interface) ise Kubernetes kümeleriyle entegre edilecek veri depolama araçları ve uygulamalarını ifade eder.

Kubernetes’in Çalışma Biçimi

Kubernetes, kapsayıcıları yönetmek için “düğüm” olarak adlandırılan bir grup fiziksel veya sanal ana makineyi bir kümede birleştirerek çalışır. Bir Kubernetes kümesini oluşturan düğümler, fiziksel veya sanal makineler olabilir. Bir kümenin tipik olarak bir ana düğümü ve bir grup işçi (veya minyon) düğümü vardır. Bir veya daha fazla düğümden oluşan bir kümenizin olması herhangi bir makinenin kendi başına sahip olabileceğinden daha yüksek işlem hızına, daha fazla depolama kapasitesine ve artırılmış ağ özelliklerine sahip bir “süper bilgisayar” yaratır.

Düğümler, tekli veya çoklu kapsayıcıları çalıştıran “pod’ları” çalıştırmak için gerekli tüm hizmetleri içerir. Kontrol düzlemi kümenin tüm yönleriyle izlenmesinden sorumludur; arıza durumunda iş yüklerinin otomatik olarak yeniden tahsis edilmesi, daha fazla kaynağa ihtiyaç duyan görevlerin ölçeklendirilmesi ve atanan iş yüklerinin her zaman doğru şekilde çalışmasının sağlanması gibi işlevlerin gerçekleştirilmesinden sorumludur.

Kubernetes Neden Kullanılmalı?

Açık kaynaklı bir kapsayıcı düzenleme platformu olan K8s, çeşitli kapsayıcı tabanlı uygulama senaryolarıyla başa çıkacak kadar esnektir. Kubernetes, uygulamaları dağıtmak ve uygulamalara güç sağlayan kapsayıcı altyapıyı daha verimli kullanmaya olanak tanır. 

Kubernetes, uygulamaları daha esnek ve performanslı hale getirir, BT’yi yönetmek için daha az insan gücü gerektirdiğinden kuruluşların tasarruf etmesini sağlayabilir. K8’leri kullanarak maliyet optimizasyonunda çarpıcı gelişmeler gören çok sayıda işletme ve Spotify ve Pinterest gibi birçok ünlü isimden bahsetmek mümkündür.

Kubernetes’ten önce yöneticiler, beklenmedik artışları ihtiyatlı bir şekilde ele almak için altyapı ihtiyaçlarını genellikle gereğinden fazla tedarik etme eğilimindeydiler. Kubenetes, mevcut kaynakları dikkate alarak kapsayıcıları akıllıca planlamaya olanak tanır. İhtiyaçları karşılamak için uygulamanızı otomatik olarak ölçeklendirirerek altyapı kullanımını optimize eder. Üstelik Kubernetes’in otomatik ölçeklendirmesi yalnızca altyapı ölçümleriyle sınırlı değildir; K8s, özel metrikler dahil her tür metrik ölçekleme sürecinde kullanılabilir.

Kubernetes’i şirket içinde veya genel bulut içinde çalıştırabilirsiniz. 

Kubernetes uygulamaları farklı bulutlar ve dahili ortamlar arasında daha kolay taşınabilir hale getirir. Herhangi bir uygulamayı herhangi bir genel bulut hizmetinde veya genel + özel bulut kombinasyonunda çalıştırmayı kolaylaştırır. Kubernetes, uygulamanızı şirket içinden bulut ortamlarına taşımak için sorunsuz bir yol sunar. Örneğin Shopify, veri merkezi tabanlı bir uygulama olarak yola çıkmış ve sonra K8’leri dinamik bir kapsayıcı yönetimi ve düzenleme sistemi olarak kullanmaya başlamıştır.

Kubernetes’in Yaygın Kullanım Örnekleri

Kubernetes karmaşık bir sistemdir ve basit bir uygulamayı çalıştırmak için bir Kubernetes kümesi oluşturmak gereksizdir. Ayrıca, bu tür bir uygulama daha ucuz çözümler kullanarak dağıtılabilir. Ancak eğitim amacıyla bir Kubernetes kümesini nasıl çalıştıracağınızı ve bunun üzerinde uygulamaları nasıl dağıtacağınızı öğrenmek için Kubernetes kullanmak isteyebilirsiniz.

Ana sayfada reklamı yapılan her ürün hakkında bilgi içeren apayrı bir web sayfası gerektiren ve her ürün için özel uygulamanın olduğu durumlarda, Kubernetes’in gücünden yararlanmamız tavsiye edilir. Sağladığı verimli kaynak tahsisi sayesinde, her bir web sitesi için birçok ayrı sunucudan ziyade özel bir K8s kümesi çalıştırmak daha hesaplı olacaktır. Dahası, böyle bir kümeyi yönetmek, ayrı ana bilgisayarlar kullanmaktan çok daha kolay olacaktır.

Birbiriyle iletişim kuracak birçok bileşene sahip daha karmaşık bir uygulamayı dağıtmak Kubernetes için klasik bir senaryodur. Çünkü, Kubernetes zaten Google’da bu amaç için doğmuştur. Bir uygulamada birbiriyle iletişim kuran çok sayıda bileşen söz konusuysa Kubernetes bu iletişimi yönetmenize yardımcı olur. Bu, yazılım geliştirmede önemli bir eğilim olan mikro hizmet mimarisi ile yakından ilişkilidir.

Kubernetes’in mikro hizmetleri yönetmedeki gücü; geliştiriciler için uygulama içi bileşenler arasındaki iletişimle ilgili sorunları tespit etme, bir arıza durumunda bileşenlerin davranışını yönetme veya bileşenler arasındaki kimlik doğrulama süreçlerini yönetme gibi görevleri yerine getirmesinden kaynaklanır.

Ayrıca, belirli bir bileşen için daha fazla veya daha az kaynağa ihtiyaç duyulduğundan, Kubernetes bunları otomatik olarak ölçeklendirir. Tüm uygulama yerine tek bir bileşeni ölçeklendirebilirsiniz.

Kubernetes, her bir mikro hizmetin optimum sayıda kopyaya sahip olmasını sağlamaya yardımcı olan yerleşik araçlara sahiptir (Horizontal Pod Autoscaler gibi). Böylece operatörler, uygulamanın sorunsuz çalışması için yeterli kaynağa sahip olduğundan ve değerli kaynakları boşa harcamadığından emin olabilirler.

Elbette, tasarım aşamasında, yazılım geliştirmeye birçok farklı yaklaşım olduğundan, belirli bir uygulama için hangi mimarinin daha iyi olduğuna karar verilmelidir. Mikro hizmetler her zaman en iyi seçim değildir. Yine de mikro hizmet mimarisi seçilirse Kubernetes tüm uygulama bileşenlerini yönetme sürecini basitleştirimek ve uygulamayı çalışır duruma getirmek için gereken işi önemli ölçüde azaltmak gibi avantajlarla doludur.

Etkili bir yapay zeka modeli oluşturma ve bunu üretimde kullanma süreci karmaşık ve zaman alıcıdır. Bu süreci basitleştirmek ve hızlandırmak için gereken işlem sayısını önemli ölçüde azaltan ve uygulamanın piyasaya sürülme süresini kısaltan bir çözüm olarak Kubernetes’in gücünden yararlanılmaktadır.

Özet

2015’teki ilk sürümünden bu yana Kubernetes geniş çapta benimsenmiş, kapsayıcı yönetimi ve orkestrasyonu için fiili standart haline gelmiştir. Kapsayıcıları uygun ölçekte düzenlemek ve bunlarla kullanıcı etkileşimini yönetmek için altyapı düzeyinde bir çerçeve sağlayan Kubernetes, yazılım mimarisine yönelik mevcut yaklaşımlarda önde gelen teknolojidir. 

Ölçeklenebilir modern uygulamalar oluşturma konusunda iddialı olanlar, ihtiyaç duydukları akıllıca çözümlere Kubernetes Nedir? sorusuyla ulaşabilir.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bunlar da İlginizi Çekebilir
Devamı
Google Webmaster Araçları Nelerdir?
Google arama sonuçlarında sitelerin durumları hakkında sınırlı bilgi vermekle birlikte, analiz yapılabilmesi ve site üzerindeki problemlerin tespit edilerek…
Devamı
FTP Nedir?
Sitenizi oluşturmak ve dizinlerinize dosya yüklemek için kullanabileceğiniz, güvenli ve toplu dosya aktarımları yapmanızı sağlayan FTP hakkındaki açıklamalarımız burada!