Dużo kopałem na Kubernetes i bardzo podoba mi się to, co widzę! Jedną z rzeczy, których nie mogłem uzyskać jasnego pojęcia, jest to, jakie są dokładne różnice między zasobami Deployment i StatefulSet oraz w jakich scenariuszach będziesz używać każdego z nich (lub jest ogólnie preferowany w stosunku do drugiego).
Jakiekolwiek doświadczenia, którymi ludzie mogliby się podzielić, byłyby niesamowite !!
źródło
deployment
konfigurację z prostą specyfikacją, aby ustawić 1-na-węzeł (zestaw demonów), repliki lub porządkowanie stanowe.Wdrożenie - należy określić PersistentVolumeClaim, który jest współużytkowany przez wszystkie repliki pod. Innymi słowy, współdzielona głośność.
Magazyn zapasowy oczywiście musi mieć tryb dostępu ReadWriteMany lub ReadOnlyMany, jeśli masz więcej niż jedną replikę pod.
StatefulSet - możesz określić volumeClaimTemplates , aby każda replika otrzymała unikatową powiązaną z nią PersistentVolumeClaim . Innymi słowy, brak wspólnego woluminu.
W tym przypadku magazyn zapasowy może mieć tryb dostępu ReadWriteOnce .
StatefulSet jest przydatny do uruchamiania rzeczy w klastrze, np. Klastrze Hadoop, klastrze MySQL, gdzie każdy węzeł ma swój własny magazyn.
źródło
TL; DR
Wdrożenie to zasób służący do wdrażania aplikacji bezstanowej. W przypadku korzystania z obwodu PVC wszystkie repliki będą używać tego samego wolumenu i żadna z nich nie będzie miała własnego stanu.
Statefulsets jest używany dla aplikacji Stateful, każda replika pod będzie miała swój własny stan i będzie używać własnego woluminu.
DaemonSet to kontroler, który zapewnia, że pod działa na wszystkich węzłach klastra. Jeśli węzeł jest dodawany / usuwany z klastra, DaemonSet automatycznie dodaje / usuwa pod.
Pisałem o szczegółowych różnicach między Deployments, StatefulSets i Daemonsets oraz o tym, jak wdrożyć przykładową aplikację przy użyciu tych zasobów K8: Deployments vs StatefulSets vs DaemonSets .
źródło
StatefulSet
Użyj „StatefulSet” ze stanowymi aplikacjami rozproszonymi, które wymagają, aby każdy węzeł miał trwały stan . StatefulSet umożliwia skonfigurowanie dowolnej liczby węzłów dla aplikacji / komponentu pełnostanowego za pomocą konfiguracji (repliki = N).
Istnieją dwa rodzaje aplikacji rozproszonych ze stanem: Master-Master i Master-Slave. Wszystkie węzły w konfiguracji Master-Master i węzły Slave w konfiguracji Master-Slave mogą korzystać z StatefulSet.
Przykłady:
Master-Slave -> Datanodes (slave) w klastrze Hadoop
Master-Master -> Węzły bazy danych (master-master) w klastrze Cassandra
Każdy Pod (replika / węzeł) w StatefulSet ma unikalną i stabilną tożsamość sieciową. Na przykład w zestawie Cassandra StatefulSet o nazwie „cassandra” i liczbie węzłów replik równej N każdy pod (węzeł) Cassandra ma:
Zobacz: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/
Rozlokowanie
Z drugiej strony „wdrażanie” jest odpowiednie dla aplikacji / usług bezstanowych , w których węzły nie wymagają żadnej specjalnej tożsamości. Moduł równoważenia obciążenia może dotrzeć do dowolnego wybranego węzła. Wszystkie węzły są równe. Wdrożenie jest przydatne do tworzenia dowolnej liczby dowolnych węzłów za pomocą konfiguracji (repliki = N).
źródło
Różnica między StatefulSet a wdrożeniem
StatefulSet jest odpowiednikiem specjalnego wdrożenia. Każdy pod w StatefulSet ma stabilny, unikatowy identyfikator sieci, którego można użyć do wykrywania innych członków klastra. Jeśli nazwa StatefulSet to Kafka, to pierwsza kapsuła nazywa się Kafka-0, druga Kafka-1 i tak dalej; kontrolowana jest sekwencja początku i końca kopii pod kontrolowanej przez StatefulSet. Kiedy n-ty kapsuła jest uruchomiona, pierwsze zasobniki N-1 są już uruchomione i gotowe. Stan dobry; kapsuła w StatefulSet wykorzystuje stabilną, trwałą pojemność, zaimplementowaną przez PV lub PVC. Podczas usuwania poda wolumin pamięci skojarzony z StatefulSet nie jest domyślnie usuwany (ze względu na bezpieczeństwo danych); StatefulSet musi być powiązany z wolumenem PV. Używane do przechowywania danych stanu pod, a także używane w połączeniu z usługami headless, zadeklarowanymi jako należące do tej usługi headless;
źródło