Kubernetes, kapsayıcı düzenlemesi için popüler bir açık kaynak platformudur - yani kapsayıcı adı verilen birden çok, büyük ölçüde kendi kendine yeten çalışma zamanlarından oluşturulan uygulamaların yönetimi için . 2013'te başlatılan Docker konteynerleştirme projesinden bu yana konteynerler giderek daha popüler hale geldi, ancak büyük, dağıtılmış konteynerleştirilmiş uygulamaların koordine edilmesi giderek daha zor hale gelebilir. Kapsayıcıya alınmış uygulamaların ölçeğe göre yönetilmesini önemli ölçüde kolaylaştıran Kubernetes, kapsayıcı devriminin önemli bir parçası haline geldi.
Kapsayıcı orkestrasyonu nedir?
Kapsayıcılar, endişelerin VM benzeri ayrılmasını destekler, ancak çok daha az ek yük ve çok daha fazla esneklikle. Sonuç olarak, konteynerler, insanların yazılım geliştirme, dağıtma ve sürdürme hakkındaki düşünme biçimlerini yeniden şekillendirdi. Kapsayıcıya alınmış bir mimaride, bir uygulamayı oluşturan farklı hizmetler, ayrı kaplar halinde paketlenir ve bir fiziksel veya sanal makine kümesi boyunca dağıtılır. Ancak bu , kapsayıcı tabanlı uygulamaların dağıtımını, yönetimini, ölçeklendirmesini, ağ oluşturmasını ve kullanılabilirliğini otomatikleştiren bir araç olan kapsayıcı düzenleme ihtiyacını doğurur .
Kubernetes nedir?
Kubernetes, etrafındaki en popüler konteyner düzenleme araçlarından biri haline gelen açık kaynaklı bir projedir; çok kapsayıcılı uygulamaları geniş ölçekte dağıtmanıza ve yönetmenize olanak tanır. Uygulamada Kubernetes, en popüler konteynerleştirme platformu olan Docker ile birlikte kullanılsa da, konteyner görüntü formatları ve çalışma zamanları için Açık Konteyner Girişimi (OCI) standartlarına uyan herhangi bir konteyner sistemiyle de çalışabilir. Ve Kubernetes açık kaynak olduğundan ve nasıl kullanılabileceğine dair nispeten az kısıtlama olduğu için, konteyner çalıştırmak isteyen herkes tarafından, çoğu yerde çalıştırmak istedikleri her yerde - şirket içinde, genel bulutta veya her ikisinde de özgürce kullanılabilir. .
Google ve Kubernetes
Kubernetes, Google'da bir proje olarak hayata başladı. Bu, Google'ın dahili olarak kullandığı eski bir kapsayıcı yönetim aracı olan Google Borg'un (doğrudan bir soyundan gelmese de) halefidir. 2014'te Google'ın açık kaynaklı Kubernetes'i, kısmen Kubernetes'in kolaylaştırdığı dağıtılmış mikro hizmet mimarilerinin bulutta uygulamaları çalıştırmayı kolaylaştırması nedeniyle. Google, kapsayıcıların, mikro hizmetlerin ve Kubernetes'in benimsenmesini potansiyel olarak müşterileri bulut hizmetlerine yönlendiren bir unsur olarak görüyor (Kubernetes kesinlikle Azure ve AWS ile de çalışıyor olsa da). Kubernetes şu anda kendisi Linux Foundation çatısı altında bulunan Cloud Native Computing Foundation tarafından sürdürülmektedir.
Kubernetes, Docker ve Kubernetes, Docker Swarm
Kubernetes Docker'ın yerini almaz, ancak onu güçlendirir. Ancak Kubernetes , Docker çevresinde ortaya çıkan bazı üst düzey teknolojilerin yerini alıyor.
Böyle bir teknoloji, Docker ile birlikte gelen bir orkestratör olan Docker Swarm'dır. Kubernetes yerine Docker Swarm'ı kullanmak hala mümkündür, ancak Docker Inc., Kubernetes'i ileriye dönük Docker Community ve Docker Enterprise sürümlerinin bir parçası yapmayı seçmiştir.
Kubernetes, Docker Swarm'ın yerine geçmez. Kubernetes, Swarm'dan önemli ölçüde daha karmaşıktır ve dağıtılması için daha fazla çalışma gerektirir. Ancak yine, çalışmanın uzun vadede büyük bir getiri sağlaması amaçlanıyor - daha yönetilebilir, esnek bir uygulama altyapısı. Geliştirme çalışmaları ve daha küçük konteyner kümeleri için Docker Swarm daha basit bir seçim sunar.
Kubernetes ve Mesos
Kubernetes'e rakip olarak duymuş olabileceğiniz bir diğer proje de Mesos'tur . Mesos, başlangıçta Twitter'daki geliştiricilerden ortaya çıkan bir Apache projesidir; aslında Google Borg projesine bir cevap olarak görülüyordu.
Mesos aslında konteyner düzenleme hizmetleri sunuyor, ancak hedefleri bunun çok ötesine geçiyor: hem konteynerli hem de konteynerli olmayan bileşenleri koordine edebilen bir tür bulut işletim sistemi olmayı hedefliyor. Bu amaçla, Kubernetes'in kendisi dahil birçok farklı platform Mesos içinde çalışabilir.
Kubernetes mimarisi: Kubernetes nasıl çalışır?
Kubernetes'in mimarisi çeşitli kavramlardan ve soyutlamalardan yararlanır. Bunlardan bazıları mevcut, tanıdık kavramların varyasyonudur, ancak diğerleri Kubernetes'e özgüdür.
Kubernetes kümeleri
En üst düzey Kubernetes soyutlaması olan küme , Kubernetes (kendisi kümelenmiş bir uygulama) çalıştıran makineler grubunu ve onun tarafından yönetilen kapsayıcıları ifade eder. Bir Kubernetes kümesinin , kümedeki diğer tüm Kubernetes makinelerine komut veren ve kontrol eden bir ana sisteme sahip olması gerekir . Yüksek kullanılabilirliğe sahip bir Kubernetes kümesi, ana makinenin tesislerini birden çok makinede çoğaltır. Ancak bir seferde yalnızca bir yönetici, iş planlayıcısını ve denetleyici yöneticisini çalıştırır.
Kubernetes düğümleri ve bölmeleri
Her kümede Kubernetes düğümleri bulunur . Düğümler fiziksel makineler veya VM'ler olabilir. Yine, fikir soyutlamadır: Uygulama her ne çalışırsa çalışsın, Kubernetes bu alt tabaka üzerinde dağıtımı yönetir. Kubernetes, belirli konteynerlerin yalnızca sanal makinelerde veya yalnızca çıplak metalde çalışmasını sağlamayı bile mümkün kılar.
Düğümler , oluşturulabilen veya yönetilebilen en temel Kubernetes nesneleri olan bölmeleri çalıştırır . Her bölme, Kubernetes'te bir uygulamanın veya çalışan işlemin tek bir örneğini temsil eder ve bir veya daha fazla kapsayıcıdan oluşur. Kubernetes, bir bölmedeki tüm kapsayıcıları bir grup olarak başlatır, durdurur ve çoğaltır. Bölmeler, kapsayıcıların kendileri yerine kullanıcının dikkatini uygulama üzerinde tutar. Kapsül durumundan başlayarak Kubernetes'in nasıl yapılandırılması gerektiğine ilişkin ayrıntılar , dağıtılmış bir anahtar-değer deposu olan Etcd'de tutulur .
Bölmeler, kullanıcı tarafından bölme tanımında belirtilen istenen duruma uymak için gerektiğinde düğümlerde oluşturulur ve yok edilir. Kubernetes, kapsüllerin nasıl döndürüldüğüne, yayıldığına ve döndürüldüğüne ilişkin lojistik ile ilgilenmek için denetleyici adı verilen bir soyutlama sağlar . Denetleyiciler, yönetilen uygulama türüne bağlı olarak birkaç farklı şekilde gelir. Örneğin, yakın zamanda tanıtılan “StatefulSet” denetleyicisi, kalıcı duruma ihtiyaç duyan uygulamalarla ilgilenmek için kullanılır. Başka bir tür denetleyici olan dağıtım , bir uygulamayı yukarı veya aşağı ölçeklendirmek, bir uygulamayı yeni bir sürüme güncellemek veya bir sorun varsa bir uygulamayı bilinen iyi bir sürüme geri döndürmek için kullanılır.
Kubernetes hizmetleri
Bölmeler gerektiği gibi yaşadığı ve öldüğü için, uygulama yaşam döngüsüyle başa çıkmak için farklı bir soyutlamaya ihtiyacımız var. Uygulamayı oluşturan kapları çalıştıran bölmelerin kendileri kalıcı olmadığında bile, uygulamanın kalıcı bir varlık olduğu varsayılır. Bu amaçla Kubernetes, hizmet adı verilen bir soyutlama sağlar .
Kubernetes'teki bir hizmet, belirli bir bölme grubuna (veya diğer Kubernetes nesnelerine) ağ üzerinden nasıl erişilebileceğini açıklar. Kubernetes belgelerinde belirtildiği gibi, bir uygulamanın arka ucunu oluşturan bölmeler değişebilir, ancak ön ucun bunu bilmesine veya izlemesine gerek yoktur. Hizmetler bunu mümkün kılar.
Kubernetes'in içindeki birkaç parça daha resmi tamamlıyor. Zamanlayıcı onlar kaynaklar arasında dengeli konum ve dağıtımlar uygulama tanımlarının gereksinimlerini karşılamak böylece böylece düğümlere iş yükleri dışarı parseller. Kontrol yöneticisi sistem içeren uygulamalar için, iş yükü, bir bölge vb-maçlar istenen durum Etcd yapılandırma ayarlarında tanımlanan olmasını sağlar.
Docker'ın kendisi gibi konteynerler tarafından kullanılan düşük seviyeli mekanizmaların hiçbirinin Kubernetes ile değiştirilmediğini unutmamak önemlidir. Aksine, Kubernetes, uygulamaların geniş ölçekte çalışmasını sağlamak amacıyla bu mekanizmaları kullanmak için daha geniş bir soyutlama kümesi sağlar.
Kubernetes Girişi
Kubernetes hizmetlerinin bir küme içinde çalıştığı düşünülmektedir . Ancak bu hizmetlere dış dünyadan erişebilmek isteyeceksiniz. Kubernetes, bunu çeşitli derecelerde basitlik ve sağlamlıkla kolaylaştıran NodePort ve LoadBalancer gibi çeşitli bileşenlere sahiptir, ancak en fazla esnekliğe sahip bileşen Ingress'tir. Giriş, bir kümenin hizmetlerine, genellikle HTTP aracılığıyla harici erişimi yöneten bir API'dir.
Ingress'in düzgün bir şekilde kurulması için biraz yapılandırma gerekiyor — Kubernetes gelişimi üzerine bir kitap yazan Matthew Palmer, web sitesinde süreç boyunca sizi yönlendiriyor.
Kubernetes Kontrol Paneli
Tüm bu diğer bileşenlerin üzerinde kalmanıza yardımcı olan bir Kubernetes bileşeni, uygulamaları dağıtabileceğiniz, sorunlarını giderebileceğiniz ve küme kaynaklarını yönetebileceğiniz web tabanlı bir kullanıcı arayüzü olan Dashboard'dur. Kontrol paneli varsayılan olarak yüklenmez, ancak eklemek çok fazla sorun değildir.
İlgili video: Kubernetes nedir?
Bu 90 saniyelik videoda, teknolojinin mucitlerinden biri olan Heptio'nun kurucusu ve CTO'su Joe Beda'dan konteynere alınmış uygulamaları otomatikleştirmek için açık kaynaklı sistem Kubernetes hakkında bilgi edinin.
Kubernetes avantajları
Kubernetes yeni soyutlamalar ve kavramlar sunduğundan ve Kubernetes için öğrenme eğrisi yüksek olduğundan, Kubernetes kullanmanın uzun vadeli getirilerinin ne olduğunu sormak yalnızca normaldir. Kubernetes içinde uygulama çalıştırmanın daha kolay hale geldiği belirli yöntemlerin bir özetini burada bulabilirsiniz.
Kubernetes sizin için uygulama durumunu, çoğaltmayı, yük dengelemeyi ve donanım kaynağı tahsisini yönetir
Kubernetes'in elinizden aldığı en temel görevlerden biri, bir uygulamayı çalışır durumda tutmak ve kullanıcı taleplerine yanıt vermekle meşgul olmasıdır. "Sağlıksız" hale gelen veya onlar için tanımladığınız sağlık tanımına uymayan uygulamalar otomatik olarak iyileştirilebilir.
Kubernetes'in sağladığı diğer bir avantaj, bellek, depolama G / Ç ve ağ bant genişliği dahil olmak üzere donanım kaynaklarının kullanımını en üst düzeye çıkarmaktır. Uygulamaların, kaynak kullanımlarında önceden belirlenmiş esnek ve katı sınırları olabilir. Minimum kaynakları kullanan birçok uygulama aynı donanım üzerinde paketlenebilir; Genişlemesi gereken uygulamalar, büyümek için alanların olduğu sistemlere yerleştirilebilir. Ve yine, güncellemeleri bir küme genelinde yayınlamak veya güncellemeler bozulursa geri almak otomatik hale getirilebilir.
Kubernetes, Helm grafikleriyle önceden yapılandırılmış uygulamaların dağıtımını kolaylaştırır
Debian Linux'un APT'si ve Python'un Pip'i gibi paket yöneticileri, kullanıcıları bir uygulamayı manuel olarak kurma ve yapılandırma zahmetinden kurtarır. Bu, özellikle bir uygulamanın birden çok harici bağımlılığı olduğunda kullanışlıdır.
Helm, aslında Kubernetes için bir paket yöneticisidir. Birçok popüler yazılım uygulamasının Kubernetes'te birbirine bağımlı konteynerler grubu olarak çalışması gerekir. Helm, bir uygulamanın veya hizmetin Kubernetes içinde bir grup kapsayıcı olarak nasıl çalıştırılabileceğini açıklayan bir tanım mekanizması, bir "grafik" sağlar.
Sıfırdan kendi Helm grafiklerinizi oluşturabilirsiniz ve dahili olarak dağıtılacak özel bir uygulama oluşturuyorsanız bunu yapmanız gerekebilir. Ancak ortak bir dağıtım modeline sahip popüler bir uygulama kullanıyorsanız, birisinin bunun için bir Helm şeması oluşturmuş ve bunu resmi Helm çizelgeleri havuzunda yayınlamış olma ihtimali yüksektir. Resmi Helm çizelgelerini aramak için başka bir yer de Kubeapps.com dizinidir.
Kubernetes, depolama, sırlar ve uygulamayla ilgili diğer kaynakların yönetimini basitleştirir
Konteynerlerin değişmez olması amaçlanmıştır; Onlara koyduğunuz her şeyin değişmesi gerekmiyor. Ancak uygulamaların duruma ihtiyacı vardır, bu da harici depolama hacimleriyle başa çıkmak için güvenilir bir yönteme ihtiyaç duydukları anlamına gelir. Bu, kapsayıcıların bir uygulamanın ömrü boyunca yaşama, ölme ve yeniden doğma biçimleriyle daha da karmaşık hale geliyor.
Kubernetes, kapsayıcıların ve uygulamaların depolamayla diğer kaynaklarla aynı ayrıştırılmış şekilde ilgilenmesine olanak tanıyan soyutlamalar sağlar. Amazon EBS birimlerinden düz eski NFS paylaşımlarına kadar birçok yaygın depolama türüne, birimler adı verilen Kubernetes depolama sürücüleri aracılığıyla erişilebilir. Normalde, birimler belirli bir bölmeye bağlıdır, ancak "Kalıcı Birim" olarak adlandırılan bir birim alt türü, herhangi bir bölmeden bağımsız olarak yaşaması gereken veriler için kullanılabilir.
Kapsayıcıların genellikle, bir kaba kodlanmasını veya bir disk biriminde açık bir şekilde saklanmasını istemediğiniz API anahtarları veya hizmet parolaları gibi kimlik bilgileri olan "gizli diziler" ile çalışması gerekir. Bunun için Docker sırları ve HashiCorp Vault gibi üçüncü taraf çözümler mevcut olsa da, Kubernetes, dikkatli bir şekilde yapılandırılması gerekmesine rağmen, sırları yerel olarak işlemek için kendi mekanizmasına sahiptir. Örneğin Etcd, gizli diziler arasında düz metin yerine düğümler gönderirken SSL / TLS kullanacak şekilde yapılandırılmalıdır.
Kubernetes uygulamaları karma ve çoklu bulut ortamlarında çalışabilir
Bulut bilişimin uzun süredir devam eden hayallerinden biri, herhangi bir uygulamayı herhangi bir bulutta veya genel veya özel bulutların herhangi bir karışımında çalıştırabilmektir. Bu sadece satıcıya bağımlı kalmamak için değil, aynı zamanda bağımsız bulutlara özgü özelliklerden de yararlanmak için.
Kubernetes, birden çok kümeyi birden çok bölgede ve bulutta birbiriyle senkronize halde tutmak için topluca federasyon olarak bilinen bir dizi temel öğe sağlar. Örneğin, belirli bir uygulama dağıtımı birden çok küme arasında tutarlı tutulabilir ve farklı kümeler hizmet keşfini paylaşabilir, böylece herhangi bir kümeden bir arka uç kaynağına erişilebilir. Federasyon, birden fazla bulut ortamını kapsıyor olsanız da olmasanız da, yüksek düzeyde kullanılabilir veya hataya dayanıklı Kubernetes dağıtımları oluşturmak için de kullanılabilir.
Federasyon, Kubernetes için hala nispeten yenidir. Tüm API kaynakları henüz federe örneklerde desteklenmemektedir ve yükseltmelerin henüz otomatik test altyapısı yoktur. Ancak bu eksikliklerin Kubernetes'in gelecekteki sürümlerinde ele alınması planlanıyor.