Kubernetes aslında ne yapıyor? [kapalı]


134

Kubernetes , kapsayıcı kümesi "planlayıcı / düzenleyici" olarak faturalandırılır, ancak bunun ne anlama geldiğine dair hiçbir fikrim yok. Kubernetes sitesini ve (belirsiz) GitHub wiki'sini okuduktan sonra, söyleyebileceğim en iyi şey, bir şekilde hangi sanal makinelerin Docker konteynerinizi çalıştırabileceğini / çalıştırabileceğini anlaması ve ardından bunları orada dağıtmasıdır. Ama bu sadece benim tahminim ve belgelerinde bunu destekleyecek somut bir laf görmedim.

Peki Kubernetes tam olarak nedir ve çözdüğü bazı belirli sorunlar nelerdir?


Tüm liman-dünya projelerinin (kubernetes / filo / sürü / vb.) Ne yaptıklarını ve onları neyin farklı kıldığını açıklamakta güçlükler yaşadıkları için, sanırım biraz tuhaf bir soru, biz kullanıcıların sağlayabileceği tek şey ... "filo ve kubernetes arasındaki fark nedir" diye soruyor ve yanıt "kubernetes başlatmak için filoyu kullanabilirsiniz". Aylak. ;-)
Torsten Bronger

3
Bence bu tamamen geçerli bir soru ve doco'daki bazı eksikliklere işaret ediyor. Çok geniş olarak kapatmak kötü bir hizmettir. Benim için en iyi yaklaşım, basitçe k8s kod tabanını indirmek ve örneğin bir kapsülün ne olduğunu bulmak için oraya bakmaktı. Bu bana çok yardımcı oldu.
Beezer

Yanıtlar:


113

Kubernetes'in amacı, uygulamanızı bir makine filosunda organize etmeyi ve planlamayı kolaylaştırmaktır. Yüksek düzeyde, kümeniz için bir işletim sistemidir.

Temel olarak, veri merkezinizdeki her uygulamanın hangi makinede çalıştığı konusunda endişelenmenize izin vermez. Buna ek olarak, bu makinelerde sağlık kontrolü ve uygulamanızı çoğaltmak için genel ilkeler ve uygulamanızı mikro hizmetlere kablolamak için hizmetler sağlar, böylece uygulamanızdaki her katmanın diğer katmanlardan ayrılması, böylece bunları ölçeklendirebilir / güncelleyebilir / koruyabilirsiniz. bağımsız.

Bunların birçoğunu uygulama katmanında yapmak mümkün olsa da, bu tür çözümler tek seferlik ve kırılgan olma eğilimindedir, bir düzenleme sisteminin uygulamanızı nasıl çalıştıracağınız konusunda endişelendiği durumlarda endişelerin ayrılması çok daha iyidir. uygulamanızı oluşturan kod.


3
Teşekkürler @brendan (+1) - cevabınız kesinlikle yardımcı oluyor. Yine de takip eden bir soru: Apache Mesos'un yaptığı bu değil mi? Kubernetes ve Mesos birbirlerine rakip mi? Değilse, birbirleriyle uyum içinde kullanılabilirler mi (ve eğer öyleyse, nasıl)? Tekrar teşekkürler!
smeeb

2
@smeeb Mesos ve Kubernetes birbirini tamamlar (İkincisi bir Mesos çerçevesi olarak desteklenir). Mesos, daha gelişmiş kaynak yönetimi sağlar. Diğer bir deyişle Kubernetes, Mesos'un mevcut kapasiteye göre hangi ana bilgisayarın kullanılacağına karar vermesine izin verir. Mesos diğer çerçeveleri destekler. Belgeleri okursanız, Marathon'un bir Mesos yönetimli sunucu kümesinde kapsayıcıları başlatmanın başka bir yolu olduğunu göreceksiniz.
Mark O'Connor

18

Github sayfasından okuduğunuz gibi :

Kubernetes, birden fazla ana bilgisayarda kapsayıcıya alınmış uygulamaları yönetmek için açık kaynaklı bir sistemdir ve uygulamaların dağıtımı, bakımı ve ölçeklendirilmesi için temel mekanizmalar sağlar.

Kubernetes:

lean: lightweight, simple, accessible
portable: public, private, hybrid, multi cloud
extensible: modular, pluggable, hookable, composable
self-healing: auto-placement, auto-restart, auto-replication

Kubernetes, topluluktaki türünün en iyisi fikirler ve uygulamalarla birlikte, büyük ölçekte üretim iş yüklerini çalıştıran Google'da on buçuk yıllık deneyime dayanmaktadır.

Benim için Kubernetes, Google'ın sunduğu bir konteyner düzenleme aracıdır. Tasarımı nedeniyle herhangi bir konteyner motoruyla uyumluluk sağlayabilirsiniz, ancak artık Docker ile sınırlı olduğunu düşünüyorum. Mimarisinde bazı önemli kavramlar var:

Kubernetes, aşağıdaki kavramlarla çalışır:

Kümeler, kapsayıcılarınızın üzerine inşa edildiği işlem kaynaklarıdır. Kubernetes her yerde çalışabilir! Çeşitli hizmetlere yönelik talimatlar için Başlarken Kılavuzlarına bakın.

Bölmeler, paylaşılan birimlerle birlikte yerleştirilmiş Docker kapsayıcıları grubudur. Kubernetes ile oluşturulabilen, programlanabilen ve yönetilebilen en küçük dağıtılabilir birimlerdir. Bölmeler ayrı ayrı oluşturulabilir, ancak tek bir bölme oluştursanız bile bir çoğaltma denetleyicisi kullanmanız önerilir. Kapsüller hakkında daha fazla bilgi.

Çoğaltma denetleyicileri, kapsüllerin yaşam döngüsünü yönetir. Gerektiği gibi bölmeler oluşturarak veya öldürerek, herhangi bir zamanda belirli sayıda bölmenin çalışmasını sağlarlar. Çoğaltma denetleyicileri hakkında daha fazla bilgi.

Hizmetler, bir dizi kapsül için tek, sabit bir ad ve adres sağlar. Temel yük dengeleyici görevi görürler. Hizmetler hakkında daha fazla bilgi.

Etiketler, anahtar: değer çiftlerine göre nesne gruplarını düzenlemek ve seçmek için kullanılır. Etiketler hakkında daha fazla bilgi.

Yani, konteynerlerinizin çalıştırıldığı bir küme oluşturan bir grup makineniz var. Fig gibi diğer araçlarla yaptığınız gibi bir hizmet sağlayan bir grup kapsayıcı da tanımlayabilirsiniz (yani: webapp podu bir ray sunucusu ve bir postgres veritabanı olabilir). Aynı anda çalışan bir hizmetin bir dizi kapsayıcısını / bölmesini sağlamak için başka araçlara da sahipsiniz, bir anahtar-değer deposu, bir tür yerleşik yük dengeleyici ...

Coreos hakkında bir şey biliyorsanız, bu çok benzer bir çözüm ama Google'dan. Algo Kubernetes, Google Cloud Engine ile iyi bir entegrasyona sahiptir.


2
Teşekkürler @jcortejoso (+1) - ancak sizin için sakıncası yoksa birkaç takip sorum var: (1) Kubernetes'in CoreOS'a benzediğini söylüyorsunuz, ancak Google'dan. Bu, Kubernetes ve CoreOS'un aynı sorunu çözdüğü anlamına gelir. Ama gelen [Kubernetes kendi web sitesi] (), o Kubernetes yükleyebilirsiniz diyor üzerine CoreOS. Öyleyse hangisi?!? Kubernetes, CoreOS ile aynı mıdır, yoksa Kubernetes CoreOS üzerinde çalışıyor ve belirli bir sorunu çözüyor mu?
smeeb

1
Ayrıca (2) Kubernetes'in "orkestrasyonunun" değerini hala burada göremiyorum. Kubernetes'i bir hizmet sağlayan bir grup kapsayıcı tanımlamak için kullanabileceğinizi söylüyorsunuz, bu da iki ayrı şeyi merak etmeme neden oldu: (2a) Bu tür kümelemeyi uygulama katmanında yapıp uygulamamı bir nginx yük dengeleyici? Ve (2b) "düzenleme" nin hepsi bu mu? Bana göre, uygulama katmanında kolayca elde edilebilecek bir yük dengeleme gibi görünüyor. Düşünceler? Harika cevap için tekrar teşekkürler!
smeeb

1
Eğer kubernetes "hafif" ise, yağ çözümünün ne olacağını merak ediyorum.
Torsten Bronger

@smeeb nginx'e pek aşina değilim (bu yüzden saflığımı bağışlayın), ancak nginx'in çökmüş bir sunucuyu yeniden başlatacağını düşünmüyorum; ve bir makine (veya tüm veri merkezi) çökerse, nginx uygulamanızı farklı bir makinede yeniden başlatmaz. kubernetes, her zaman n sayıda "pod" un bir yerde çalışmasını sağlar ve bunun nerede ve nasıl olduğu önemli değildir.
kgreenek

10

Kubernetes, bir Hizmet API'leri olarak Altyapı ile aynı işlevselliğin çoğunu sağlar, ancak sanal makineler yerine dinamik olarak planlanan kapsayıcıları ve Hizmet olarak Platform olarak, ancak aşağıdakileri içeren daha fazla esnekliği hedefler:

  • depolama sistemleri montajı,
  • sırları dağıtmak,
  • uygulama durum denetimi,
  • uygulama örneklerini çoğaltma,
  • yatay otomatik ölçeklendirme,
  • adlandırma ve keşif,
  • yük dengeleme,
  • değişen güncellemeler,
  • kaynak izleme,
  • günlük erişimi ve alım,
  • iç gözlem ve hata ayıklama desteği ve
  • kimlik ve yetkilendirme.

Hizmet keşfi, gizli dağıtım, yük dengeleme, izleme vb. İçin halihazırda başka mekanizmalar kullanıyorsanız elbette bunları kullanmaya devam edebilirsiniz, ancak bunu sağlayarak mevcut IaaS ve PaaS sistemlerinden Kubernetes'e geçişi kolaylaştırmayı amaçlıyoruz. işlevsellik.

https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/#why-do-i-need-kubernetes-and-what-can-it-do

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.