56 votes

Kubernetes Deployments vs StatefulSets

J'ai beaucoup fouillé dans Kubernetes et j'aime ce que je vois beaucoup! Une chose que je n'ai pas pu comprendre clairement est la distinction exacte entre les ressources Deployment et StatefulSet et dans quels scénarios les utiliseriez-vous (ou est-il généralement préférable à l'autre).

Toutes les expériences que les gens peuvent partager seraient géniales !!

66voto

pagid Points 2159

Les déploiements et ReplicationControllers sont destinés aux apatrides d'utilisation et sont plutôt léger. StatefulSets sont utilisés lors de l'état doit être maintenu. Par conséquent, les seconds volumeClaimTemplates / créances sur les volumes afin de s'assurer qu'ils peuvent garder l'état à travers la composante redémarre.

Donc, si votre application est dynamique ou si vous souhaitez déployer dynamique de stockage sur le dessus de Kubernetes utiliser un StatefulSet.

Si votre demande est apatride ou si l'état peut être construit à partir de backend systèmes au cours de la démarrer, puis utilisez les Déploiements.

Plus de détails sur l'exécution dynamique de l'application peuvent être trouvés en 2016 kubernetes' entrée de blog à propos des applications globales

21voto

eosimosu Points 1085
  • Déploiement - Vous spécifier un PersistentVolumeClaim qui est partagé par tous les pod répliques. En d'autres termes, le volume partagé.

    Le support de stockage doit évidemment avoir ReadWriteManyou ReadOnlyMany accessMode si vous avez plus d'une réplique de la gousse.

  • StatefulSet - Vous spécifier un volumeClaimTemplates de sorte que chaque réplique pod obtient un unique PersistentVolumeClaim associé avec c'. En d'autres termes, pas de volume partagé.

    Ici, le support de stockage peut avoir ReadWriteOnce accessMode.

    StatefulSet est utile pour des choses en cours d'exécution dans le groupe e.g Hadoop cluster, le cluster MySQL, où chaque noeud a son propre espace de stockage.

5voto

Anurag Points 334

L'utilisation de 'StatefulSet' avec une application distribuée qui exige que chaque nœud ait un état persistant et la possibilité de configurer un nombre quelconque de nœuds grâce à une configuration (répliques = 'X').

Tous les nœuds dans un master-configuration du maître et de l'esclave nœuds dans une configuration maître-esclave peut faire usage d'un StatefulSet avec un Service. Maître des nœuds (comme le maître, le maître-secondaire) peuvent chacun être un Pod avec certains persistante du volume avec un Service comme ces nœuds n'ont pas besoin à l'échelle vers le haut ou vers le bas. Ils peuvent aussi bien être un StatefulSet avec des répliques = 1.

Exemples de StatefulSet sont:
- Datanodes (esclaves) dans un cluster Hadoop (maître-esclave)
- Base de données des nœuds (master-master) dans un cluster Cassandra

Chaque Pod (réplique) dans un StatefulSet a
- Un unique et stable de l'identité de réseau
- Kubernetes crée un PersistentVolume pour chaque VolumeClaimTemplate
https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/

'Déploiement' sur l'autre main est adapté pour les applications sans état/services où les nœuds ne nécessitent aucune identité particulière (un équilibreur de charge peut atteindre n'importe quel nœud qu'il choisit) et le nombre de nœuds peut être un nombre arbitraire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: