J'ai beaucoup creusé sur Kubernetes, et j'aime beaucoup ce que je vois! Une chose sur laquelle je n'ai pas pu me faire une idée claire est de savoir quelles sont les distinctions exactes entre les ressources Deployment et StatefulSet et dans quels scénarios utiliseriez-vous chacune (ou est-ce que l'un est généralement préféré à l'autre).
Toutes les expériences que les gens peuvent partager seraient géniales !!
la source
deployment
configuration avec une spécification simple pour définir 1 par nœud (ensemble de démons), des répliques ou un ordre avec état.Déploiement: vous spécifiez un PersistentVolumeClaim partagé par tous les réplicas de pod. En d'autres termes, volume partagé.
Le stockage de sauvegarde doit évidemment avoir ReadWriteMany ou ReadOnlyMany accessMode si vous avez plus d'un pod de réplica.
StatefulSet - Vous spécifiez un volumeClaimTemplates afin que chaque pod de réplica obtienne un PersistentVolumeClaim unique qui lui est associé. En d'autres termes, pas de volume partagé.
Ici, le stockage de sauvegarde peut avoir ReadWriteOnce accessMode.
StatefulSet est utile pour exécuter des choses dans un cluster, par exemple un cluster Hadoop, un cluster MySQL, où chaque nœud a son propre stockage.
la source
TL; DR
Le déploiement est une ressource pour déployer une application sans état, si vous utilisez un PVC, tous les réplicas utiliseront le même volume et aucun d'entre eux n'aura son propre état.
Statefulsets est utilisé pour les applications avec état, chaque réplica du pod aura son propre état et utilisera son propre volume.
DaemonSet est un contrôleur qui garantit que le pod s'exécute sur tous les nœuds du cluster. Si un nœud est ajouté / supprimé d'un cluster, DaemonSet ajoute / supprime automatiquement le pod.
J'ai écrit sur les différences détaillées entre les déploiements, les StatefulSets et les Daemonsets, et comment déployer un exemple d'application à l'aide de ces ressources K8s: Deployments vs StatefulSets vs DaemonSets .
la source
StatefulSet
Utilisez 'StatefulSet' avec les applications distribuées avec état, qui nécessitent que chaque nœud ait un état persistant . StatefulSet offre la possibilité de configurer un nombre arbitraire de nœuds, pour une application / un composant avec état, via une configuration (réplicas = N).
Il existe deux types d'applications distribuées avec état: maître-maître et maître-esclave. Tous les nœuds dans une configuration maître-maître et les nœuds esclaves dans une configuration maître-esclave peuvent utiliser un StatefulSet.
Exemples:
Master-Slave -> Datanodes (esclaves) dans un cluster Hadoop
Master-Master -> Database nodes (master-master) dans un cluster Cassandra
Chaque pod (réplica / nœud) d'un StatefulSet possède une identité réseau unique et stable. Par exemple, dans un Cassandra StatefulSet avec le nom `` cassandra '' et le nombre de nœuds de réplique sous la forme N, chaque pod Cassandra (nœud) a:
Reportez-vous: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/
Déploiement
« Déploiement » d'autre part convient aux apatrides des applications / services où les nœuds ne nécessitent pas d' identité particulière. Un équilibreur de charge peut atteindre n'importe quel nœud de son choix. Tous les nœuds sont égaux. Un déploiement est utile pour créer n'importe quel nombre de nœuds arbitraires, via une configuration (répliques = N).
la source
La différence entre StatefulSet et déploiement
StatefulSet équivaut à un déploiement spécial. Chaque pod de StatefulSet possède un identifiant de réseau unique et stable qui peut être utilisé pour découvrir d'autres membres du cluster. Si le nom de StatefulSet est Kafka, alors le premier pod est appelé Kafka-0, le deuxième Kafka-1, et ainsi de suite; la séquence de démarrage et d'arrêt de la copie de pod contrôlée par le StatefulSet est contrôlée. Lorsque le nième pod est utilisé, les premiers N-1 pods fonctionnent déjà et sont prêts Bon état; le pod du StatefulSet utilise un volume de stockage persistant stable, implémenté par PV ou PVC. Lors de la suppression du pod, le volume de stockage associé au StatefulSet n'est pas supprimé par défaut (pour la sécurité des données); le StatefulSet est lié au volume PV. Utilisé pour stocker les données d'état du pod, et également utilisé en conjonction avec des services sans tête, déclarés appartenir à ce service sans tête;
la source