Yunanca “dümenci” ya da “kaptan” anlamına gelen Kubernetes, konteyner orkestrasyonunu gerçekleştiren açık kaynaklı bir yazılımdır. Kubernetes (sıklıkla “k8s” olarak kısaltılır), Docker gibi kapsayıcılı uygulamaları yönetebilir, ölçeklendirebilir ve dağıtabilir. Kubernetes kullanıcıları, ne tür bir kapsayıcı mimarisi istediklerini tanımlayabilir ve yazılım; kapsayıcılar birden fazla uygulama ve ana bilgisayarda olsa bile, mevcut işlem kaynaklarına dayalı olarak kapsayıcıları bu parametreler içinde çalışacak şekilde otomatik olarak zamanlar.
Kubernetes’in sağladığı yüksek düzeyde otomasyon, onu konteyner alanında farklı kılar. Kapsayıcı düzenleme için endüstri standardı haline gelenKubernetes, ekiplerin bulutta yerel uygulamalara doğru ilerlerken mimarilerinde devrim yaratmasına izin verir.
Cloud Native Computing Foundation (CNCF) tarafından hazırlanan 2019 raporuna göre, kapsayıcıların kullanımı hızla arttıkça Kubernetes’in benimsenmesi de artmıştır.
Kubernetes’in Özellikleri Nelerdir?
Kubernetes, kullanıcıları için aşağıdakiler dahil birçok özellik sunar:
- Otomatik kutu paketleme
- IPv4/IPv6 dual-stack
- Toplu yürütme
- Yük dengeleyici
- zamanlayıcı
- Hizmet keşfi
Kubernetes ayrıca, uygulamalarınızın sağlıklı bir şekilde çalıştığını kontrol etme (ve hatta dağıtım sırasında herhangi bir şeyi olumsuz etkiliyorsa değişikliği tersine çevirme), tercih ettiğiniz depolama sistemini kurma, uygulamalarınızı ölçeklendirme, kendi kendini iyileştirme (container’ları otomatik olarak değiştirme) gibi bir dizi başka otomatik işlevi yerine getirir. Gerektiğinde yanıt vermeyenleri etkisiz hale getir, otomatik ölçeklendirme gerektiğinde, başarısız kapsayıcıları yeniden başlatabilir veya yeniden zamanlayabilir.
Kapsayıcı (Container) Nedir?
Kapsayıcılar, bir uygulamayı daha taşınabilir hale getirmek amacıyla, o uygulamayı çalıştırmak için gereken her şeyle birlikte paketleyebileceğiniz yazılım birimleridir. Kapların nasıl çalıştığını daha iyi anlamak için boş bir kutu hayal edin. Bu kutuya (veya kapsayıcıya), bir uygulamanın kodunu, sistem araçlarını, yapılandırma dosyalarını ve çalışması için gereken diğer bağımlılıkları koyabilir, daha sonra dağıtabilir ve başka bir yere – yerel bir makineye yerleştirebilirsiniz.
Kapsayıcılar, benzer şekilde uygulamanın parçalarını izole edip altyapısından soyutlayabildikleri için genellikle sanal makinelerle (VM’ler) karşılaştırılır. Ancak VM’lerin aksine, kapsayıcılar çok daha küçüktür ve çok daha az kaynak kullanır. Çok taşınabilir ve hafif olduklarından, geliştiriciler gerektiğinde kapsayıcıları yukarı ve aşağı döndürebilir. Bu sayede mikro hizmet tarzı bir yaklaşım uygulamasına olanak tanır.
Kapsayıcı ortamlar, aşağıdakiler dahil bir dizi avantaj sunar:
Tutarlılık: Uygulamanın tüm bağımlılıkları, konumundan bağımsız olarak kapsayıcıdadır. Bu nedenle geliştiricilerin yeni bir ortamda sorun giderme konusunda endişelenmek yerine işlevselliğe odaklanması daha kolaydır.
Esneklik: Konteynerler, Mac, Linux ve diğer açık kaynak ortamlarında veya Windows’ta, ayrıca bulut hizmetlerinde ve hem yalın donanım hem de sanal sunucularda çalıştırılabilme özelliğiyle oldukça taşınabilirdir. Bu, yalnızca ortamınız için değil, aynı zamanda harici ortamlar için de esneklik sağlayarak herhangi bir satıcıya kolaylıkla geçiş yapmanıza ve satıcıya bağlı kalmamanıza olanak tanır.
Daha az kapalı kalma süresi: Kapsayıcılara ayrılan uygulamalar, işletmelerin bunları bulutta veya şirket içinde farklı fiziksel ve sanal makinelere yerleştirmesine olanak tanır. Bu da sistem hata toleransını artırır.
Ölçeklenebilirlik: Birden çok gigabayt olabilen VM’lerin aksine, kapsayıcılar genellikle megabayt aralığında kalır. Bu nedenle, tek bir işletim sisteminde çok sayıda kapsayıcı çalıştırabilir ve VM’lerden çok daha verimli şekilde ölçeklendirebilirsiniz.
Hız: Konteynerler hafiftir ve dönmesi bir saniyeden kısa sürer. Daha az sunucu kaynağı kullandıkları için hızlı çalışırlar. Geliştiriciler de bunları hızlı bir şekilde oluşturabilir, bu da artan üretkenlik ve daha hızlı pazara sunma süresi sağlar.
Bulutistan Kubernetes hizmetinin detaylarına ulaşmak için tıklayınız.
Kubernetes Nasıl Kullanılır?
Diğer kapsayıcı düzenleme araçları gibi Kubernetes de kapsayıcıların ağ oluşturma, ölçekleme, zamanlama ve dağıtımını yönetmeye yardımcı olur. Özellikle çok fazla kapsayıcı çalıştırması gereken ölçeklendirilmiş ortamlarda fayda sağlar. Sürekli entegrasyon/sürekli teslim (CI/CD) gibi DevOps uygulamalarını entegre eden ekipler; Kubernetes’in uygulama geliştirmede daha fazla çeviklik sağlaması, aynı uygulamayı farklı ortamlarda çalıştırması ve mikro hizmetleri daha kolay uygulama yeteneğinden yararlanır. Bu araçlar aynı zamanda genellikle “bildirimsel” olarak da bilinir. Yani sisteminizin davranışının parametrelerini beyan ederseniz, araç bunu gerçekleştirir.
Bir kapsayıcı düzenleme aracı olarak Kubernetes, aşağıdaki gibi görevleri otomatikleştirmek ve yönetmek için kullanılabilir:
- Konteyner dağıtımı
- Konteyner kullanılabilirliği
- Kaynak tahsisi
- İzleme
- Yük dengeleme
- Konteyner etkileşiminin güvenliğini sağlama
- Ana bilgisayarın kaynaklarına göre kapsayıcı boyutunun veya konumunun ayarlanması
Kubernetes kullanmanın avantajları, kapsayıcı kullanmanın avantajlarına benzer. Kubernetes taşınabilir olduğundan hibrit, bulut, şirket içi veya çoklu bulut ekosistemlerinde esnek bir şekilde kullanabilir. Bir kapsayıcı başarısız olursa veya düğümler etkisiz hale gelirse, Kubernetes’in “kendi kendini iyileştiren” doğası nedeniyle bunlar otomatik olarak değiştirilebilir veya yeniden planlanabilir. Ve belki de en önemlisi, Kubernetes tüm ekibinizin ihtiyaçlarına göre milyarlarca kapsayıcı çalıştırabilir. Kubernetes’e katkıda bulunan bir topluluk vardır ve sektör genelinde kullanımını en üst düzeye çıkarmaya yardımcı olacak Kubernetes destekli çok sayıda araç mevcuttur.
Kubernetes Kullanım Örnekleri
Kubernet’ler; e-ticaret, finans, sağlık veya teknoloji vb. bilgi işlem ortamında kapsayıcıları kullanan herhangi bir işletme tarafından kullanılabilir.
Kubernet’ler özellikle aşağıdakiler için yararlı olabilir:
- Bulutistan gibi bir bulut platformuna geçiş
- Platform ölçeklendirme
- Makine öğrenimini uygulama veya IoT cihazlarını dağıtma
- Mikro hizmet tabanlı uygulama yönetimini kolaylaştırma
Kubernetes Pod (Bölme) Nedir?
Bir Kubernetes bölmesi, kapsayıcıları zamanlamak için en temel birimdir. Kaynakları paylaşma (ağ, IP adresi, ana bilgisayar adı vb. dahil) ve birbirleriyle iletişim kurma yeteneği ile birlikte sarılmış bir veya birden çok kapsayıcıdan oluşur ve tümü tek bir birim olarak bir düğüme dağıtılır. Pek çok kapsayıcı bir bölmede yaşayabilir ve her zaman birlikte ölçeklenir, ancak verimliliği optimize etmek için bir bölmeye gereğinden fazla kap koymaktan kaçınmanız gerekir. Uygulama kapsayıcılarına ek olarak, bir bölmedeki geçici kapsayıcılar ve uygulama kapsayıcısı çalışmaya başlamadan önce, tamamlanana kadar çalışan başlangıç kapsayıcılarını tutabilir. Kapsüllerin kendileri de geçici olarak kabul edilir yani bu, sonsuza kadar çalışacakları anlamına gelmez ve bir bölmeyi bir kez sildiğinizde (veya bir kez başarısız olduğunda), geri getiremezsiniz (Kubernetes’in kendi kendini onaran doğası nedeniyle, başarısız bir düğümden gelen bir bölme, farklı bir düğümde değiştirilebilir). Kapsül yapılandırmanızı ve üzerinde çalışmasını istediğiniz özellikleri bir YAML veya JSON dosyasında tanımlarsınız.
Kubernetes’in bilmenize yardımcı olabilecek birkaç mimari bileşeni daha vardır:
- Düğümler fiziksel veya sanal bilgi işlem makineleri olabilir ve görevleri, bölmeleri gerekli tüm öğelerle çalıştırmaktır. Bir düğüm çalışması sırasında etkisiz hale gelirse küme, kapsayıcıların belirlediğiniz özellikleri karşılamaya devam etmesi için ayarlanır.
- Küme, bir grup düğümdür; bunlar kontrol düzlemi tarafından yönetilir.
- Kubelet, yapılandırma bilgilerini tutan YAML veya JSON dosyasında belirlediğiniz özellikler tarafından tanımlandığı gibi kapsayıcıların kapsülde başlatılmasını, durdurulmasını ve başka bir şekilde çalışmasını sağlayan bir düğümde bulunan bir işlevdir.
Kubernetes Pod (Bölme) Kullanımları Nelerdir?
Kubernetes pod’ları çeşitli şekillerde kullanılabilir, ancak iki ana yol vardır:
Tek kapsayıcılı bölmeler: İçinde yalnızca bir kapsayıcı bulunan bir bölme, Kubernetes için en yaygın kullanım durumudur. Kutu benzetmesini kullanarak, bir kapsül tek bir kutunun etrafına hediye paketi gibiyse, yalnızca birini sarmak en kolay ve verimli yöntemdir.
Çok kapsayıcılı bölmeler: Kapsayıcıların birbirleriyle iletişim kurması ve kaynakları paylaşması gerekiyorsa, bir bölmeye birden fazla kapsayıcı yerleştirebilirsiniz. Birden çok kapsayıcıyla bölmeler oluşturmak, biraz daha gelişmiş bir kullanım durumudur. Örneğin, veri aktarıcı veya proxy gibi birincil uygulamanızla birlikte bir yardımcı uygulama çalıştırıyorsanız bunu yapmanız gerekebilir. Bölme, tüm bu kapsayıcıları ve beraberindeki diğer ilgili kaynakları bir araya getirir. Birden fazla kutuyu tek kutu olarak paketlemek, bir tek kutuyu sarmaktan daha zordur; aynısı Kubernetes için de geçerlidir.
Genel olarak, manuel olarak bölmeler oluşturmanız gerekmez. Bunun yerine, genellikle, bir düğüm başarısız olursa yeni bir bölme oluşturmak da dahil olmak üzere bölme yaşam döngülerini yöneten iş yükü kaynaklarına güvenebilirsiniz.
Ayrıca, kapsayıcı çalışma zamanınız izin veriyorsa, ayrıcalıklı modu etkinleştirerek bir işletim sistemi için kapsayıcılarınıza yönetim özellikleri de verebilirsiniz.
Kubernetes ve Docker İle Arasındaki Farklar Nelerdir?
Docker ve Kubernetes tartışması, ikisi arasında seçim yapmaktan çok, bunları birlikte kullanmanın yollarını bulmakla ilgilidir. Çünkü bu iki platform farklı işlevlere hizmet eder. Docker, kapsayıcıları oluşturan ve dağıtan açık kaynaklı bir kapsayıcı platformudur. Kubernetes ise, bir kapsayıcı düzenleme platformudur. 2013’te piyasaya sürülen Docker, varsayılan kapsayıcı dosya biçimidir ve esasen “kapsayıcıların” ile eş anlamlı hale gelmiştir. Hem Linux hem de Windows ile uyumludur, şirket içinde ve bulutta çalışabilir.
Docker kapsayıcıları oluşturur ve çalıştırır; Kubernetes ise bunları planlayan, ölçekleyen ve taşıyan denetleyici-yöneticidir. İşbirliği içinde, kapsayıcılarınızı oluşturmak, çalıştırmak ve kapsayıcı görüntülerini depolamak için Docker’ı kolayca kullanabilir, ardından bu kapsayıcıları (ve kaynaklarını) bir Kubernetes kontrol düzleminden düzenlemek için Kubernetes’i kullanabilirsiniz. Docker ve Kubernetes’i birlikte kullanmak, deneyimleri ve geliştiricilerin ölçeklenebilir uygulamalar oluşturmasını kolaylaştırırken; ekiplerin bulutta yerel mimarileri veya mikro hizmetleri daha verimli bir şekilde oluşturmasına olanak tanır.
Kubernetes’i Kullanmaya Nasıl Başlarsınız?
Ortamınızda kapsayıcı kullanmaya karar verdikten sonra Kubernetes dağıtımınıza başlayabilirsiniz. Bir kurulum türü seçerken, mevcut kaynaklarınız, çeşitli güvenlik ihtiyaçlarınız ve sizin için uygun olan bakım düzeyi de dahil olmak üzere, göz önünde bulundurulması gereken bir dizi faktör vardır. Neyse ki ilk kez Kubernetes öğrenenler için Kubernetes web sitesinde kapsamlı dökümanlar mevcuttur. Ayrıca kullanıcılardan ve katkıda bulunanlardan oluşan Kubernetes topluluğu, platform hakkında daha fazlasını keşfetmek için paha biçilmez kaynaklar sunar.
Kubernetes’i üretimde kullanmayı planlıyorsanız, bunu kendiniz yönetebilir veya bir Kubernetes sağlayıcısından yardım alabilirsiniz.
Kubernetes’in Geleceği
İşletmeler 2020’nin başında zaten buluta doğru hızla ilerliyordu, fakat COVID-19 salgını bu geçişleri katlanarak hızlandırdı. Bulutta yerel bilgi işlem norm haline geldikçe, kapsayıcılar da dahil olmak üzere altyapıyı destekleme talebi de arttı. Forrester, 2021’in sonuna kadar geliştiricilerin %30’unun kapsayıcı kullanacağını tahmin ediyor.