Kubernetes Dağıtımları ile StatefulSets karşılaştırması


112

Kubernetes üzerinde çok araştırma yapıyorum ve gördüklerimi çok beğeniyorum! Hakkında net bir fikir edinemediğim bir şey, Deployment ve StatefulSet kaynakları arasındaki tam farkların ne olduğu ve hangi senaryolarda her birini kullanacağınız (veya genellikle biri diğerine tercih edilir).

İnsanların paylaşabileceği herhangi bir deneyim harika olurdu !!

Yanıtlar:


116

Dağıtımlar ve ReplicationControllers, durum bilgisi içermeyen kullanım içindir ve oldukça hafiftir. StatefulSets , durumun kalıcı olması gerektiğinde kullanılır. Bu nedenle, ikincisi volumeClaimTemplates, durumu bileşen yeniden başlatmalarında tutabildiklerinden emin olmak için kalıcı birimler üzerinde kullanır / talep eder.

Dolayısıyla, uygulamanız durum bilgisine sahipse veya Kubernetes üzerine durum bilgisi içeren depolama dağıtmak istiyorsanız bir StatefulSet kullanın.

Uygulamanız durum bilgisiz ise veya durum başlangıç ​​sırasında arka uç sistemlerinden oluşturulabiliyorsa, Dağıtmaları kullanın.

Durum bilgisi olan uygulamanın çalıştırılmasıyla ilgili daha fazla ayrıntı, 2016 kubernetes'in durum bilgisi olan uygulamalar hakkındaki blog girişinde bulunabilir.


16
Kalıcı birim talepleriyle bir dağıtımın kapsüllerini de bağlayabilir ve güvende olabilirim.
Torsten Bronger

9
@TorstenBronger Katılıyorum - hangi noktada StatefulSets'in amacı nedir sorusuna geri dönüyoruz?
HDave

6
@HDave Dinamik kalıcı birimler ve hızla gelişen depolama sağlayıcıları (Portworx, OpenEBS gibi) ile veri kalıcılığı sorunu çözülebilir, ancak adlandırma ve başlatma / yükseltme sırası StatefulSets ile hala farklıdır ve ana / bağımlı veya diğer kurulumlara ihtiyaç duyan uygulamalara izin verir. uygun şekilde bir küme oluşturur. Yine de tüm bunların deploymentdüğüm başına 1'i (arka plan seti), kopyaları veya durum bilgisi içeren sıralamayı ayarlamak için basit bir spesifikasyonla tek bir yapılandırmaya katlanabileceğini kabul etmeme rağmen.
Mani Gandham

4
"Başlangıç ​​/ yükseltme sırasının" Kapsül kopyaları (yani 1, 2, 3 ...) hakkında olduğunu - farklı bölmelerle (ör. Web, srv, db, vb.) İlgili olduğunun farkında olmak önemlidir. Başka bir deyişle, docker-compose bağımlılıklarının ikamesi değildir.
HDave

73
  • Dağıtım - Tüm bölme kopyaları tarafından paylaşılan bir PersistentVolumeClaim belirtirsiniz. Başka bir deyişle, paylaşılan hacim.

    Birden fazla çoğaltma bölmeniz varsa , yedekleme deposunun açıkça ReadWriteMany veya ReadOnlyMany accessMode'a sahip olması gerekir .

  • StatefulSet - Her çoğaltma bölmesinin kendisiyle ilişkilendirilmiş benzersiz bir PersistentVolumeClaim alması için bir volumeClaimTemplates belirtirsiniz . Başka bir deyişle, paylaşılan hacim yok.

    Burada, yedekleme deposu ReadWriteOnce accessMode'a sahip olabilir .

    StatefulSet, her düğümün kendi depolamasına sahip olduğu Hadoop kümesi, MySQL kümesi gibi kümedeki şeyleri çalıştırmak için kullanışlıdır.


23

TL; DR

Dağıtım, durum bilgisiz bir uygulamayı dağıtmak için bir kaynaktır, bir PVC kullanılıyorsa, tüm replikalar aynı Birimi kullanır ve hiçbirinin kendi durumu olmaz.

Durum bilgisi kümeleri, Durum bilgisi olan uygulamalar için kullanılır, bölmenin her kopyası kendi durumuna sahip olacak ve kendi Birimini kullanacaktır.

DaemonSet, bölmenin kümenin tüm düğümlerinde çalışmasını sağlayan bir denetleyicidir. Bir kümeden bir düğüm eklenir / kaldırılırsa, DaemonSet bölmeyi otomatik olarak ekler / siler.

Deployments, StatefulSets ve DaemonSets arasındaki ayrıntılı farklar ve bu Kaynaklar K8'leri kullanarak örnek bir uygulamanın nasıl dağıtılacağı hakkında yazdım: Deployments - StatefulSets - DaemonSets .


5
Yorumunuzu takip etmek gerekirse, bana öyle geliyor ki, ikisi arasındaki fark, birinin kapsüle özel depolamayı belirleme yeteneğine sahip olması (ve dolayısıyla kapsüle özgü durumda kalması), diğerinin sahip olmaması (ve bu nedenle yalnızca hizmette kalması) geniş devlet). Bu anlamda, hizmet düzeyinde, her ikisi de durum bilgili olarak görülebilir. Ancak bölme düzeyinde, yalnızca Statefulsets durum bilgisidir.
scabbage

14

StatefulSet

Her düğümün kalıcı bir duruma sahip olmasını gerektiren Durum Bilgili Dağıtılmış Uygulamalar ile 'StatefulSet' kullanın . StatefulSet, bir yapılandırma (replikalar = N) aracılığıyla durum bilgisi olan bir uygulama / bileşen için rastgele sayıda düğüm yapılandırma yeteneği sağlar.

İki tür durum bilgili dağıtılmış uygulama vardır: Master-Master ve Master-Slave. Bir Master-Master konfigürasyonundaki tüm düğümler ve Master-Slave konfigürasyonundaki Slave düğümleri bir StatefulSet'i kullanabilir.
Örnekler:
Master-Slave -> Hadoop kümesi
Master-Master içindeki Datanodes (slave) -> Cassandra kümesindeki veritabanı düğümleri (master-master)

Bir StatefulSet'teki her Bölme (çoğaltma / düğüm), Benzersiz ve Kararlı bir ağ kimliğine sahiptir. Örneğin, 'cassandra' adlı bir Cassandra StatefulSet'te ve N olarak çoğaltma düğümlerinin sayısına sahip bir Cassandra StatefulSet'te, her Cassandra bölmesi (düğüm) şunları içerir:

  • Her bölme için Sıralı Dizin: 0,1, .., N-1
  • Kararlı ağ kimliği: cassandra-0, cassandra-1, .., cassandra-N-1
  • Bir birim talep şablonuna karşı her bölme için ayrı bir kalıcı birim, yani her bölme (düğüm) için ayrı bir depolama
  • Bölmeler, 0 - N-1 sırasıyla oluşturulur ve N-1 - 0 arasında ters sırada sonlandırılır

Bakın: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/

Dağıtım

Öte yandan 'Dağıtım' , düğümlerin herhangi bir özel kimlik gerektirmediği durumsuz uygulamalar / hizmetler için uygundur . Yük dengeleyici, seçtiği herhangi bir düğüme ulaşabilir. Tüm düğümler eşittir. Bir Dağıtım, bir yapılandırma aracılığıyla herhangi bir sayıda rastgele düğüm oluşturmak için kullanışlıdır (çoğaltma = N).


7

StatefulSet ve dağıtım arasındaki fark

StatefulSet, özel bir dağıtıma eşdeğerdir. StatefulSet'teki her bölmenin, kümedeki diğer üyeleri keşfetmek için kullanılabilen kararlı, benzersiz bir ağ tanımlayıcısı vardır. StatefulSet'in adı Kafka ise, ilk bölmeye Kafka-0, ikinci Kafka-1 vb. Denir; StatefulSet tarafından kontrol edilen pod kopyasının başlama ve durdurma sekansı kontrol edilir. N'inci bölme çalıştırıldığında, ilk N-1 bölmeleri zaten çalışıyor ve İyi durumda hazırdır; StatefulSet'teki bölme, PV veya PVC tarafından uygulanan kararlı bir kalıcı depolama birimi kullanır. Bölmeyi silerken, StatefulSet ile ilişkili depolama birimi varsayılan olarak silinmez (veri güvenliği için); StatefulSet, PV hacmine bağlı olmaya bağlıdır. Kapsül durumu verilerini depolamak için kullanılır ve ayrıca bu başsız hizmete ait olduğu beyan edilen başsız hizmetlerle birlikte kullanılır;

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.