Je suis une recrue de Kubernetes, comme on peut probablement le supposer, alors pardonnez-moi si mon utilisation de la terminologie n'est pas tout à fait correcte. J'espère que l'intention de ma question est néanmoins claire.
J'essaie d'envelopper ma tête autour Stateful Sets . En quoi leur utilisation diffère-t-elle de l'utilisation de pods "sans état" avec des volumes persistants? Autrement dit, en supposant qu'un pod "normal" puisse prétendre à un stockage persistant, quelle chose évidente me manque qui nécessite cette nouvelle construction (avec un démarrage/arrêt ordonné, etc.)?
Oui, un pod régulier peut utiliser un volume persistant. Cependant, il existe parfois plusieurs modules qui forment logiquement un "groupe". Des exemples de cela seraient des répliques de bases de données, des hôtes ZooKeeper, Kafka, etc. Dans tous ces cas, il y a un tas de serveurs et ils travaillent ensemble et se parlent. Ce qui est spécial à leur sujet est que chaque individu du groupe a une identité. Par exemple, pour un cluster de base de données, un est le maître et deux sont des suiveurs et chacun des suiveurs communique avec le maître pour lui faire savoir ce qu'il a et n'a pas synchronisé. Les suiveurs savent donc que "db-x-0" est le maître et le maître sait que "db-x-2" est un suiveur et a toutes les données jusqu'à un certain point mais a encore besoin de données au-delà.
Dans de telles situations, vous avez besoin de quelques choses que vous ne pouvez pas facilement obtenir à partir d'un pod régulier:
Les StatefulSets résolvent ces problèmes car ils fournissent (citant https://kubernetes.io/docs/concepts/abstractions/controllers/statefulsets/ ):
Je n'ai pas vraiment parlé de (3) et (4) mais cela peut aussi aider avec les clusters car vous pouvez dire au premier à déployer pour devenir le maître et au suivant de trouver le premier et de le traiter comme maître, etc.
Comme certains l'ont noté, vous pouvez en effet certains des mêmes avantages en utilisant des pods et des services réguliers, mais c'est beaucoup plus de travail. Par exemple, si vous vouliez 3 instances de base de données, vous pouvez créer manuellement 3 déploiements et 3 services. Notez que vous devez créer manuellement 3 déploiements car vous ne pouvez pas avoir de point de service sur un seul pod dans un déploiement. Ensuite, pour évoluer, vous devez créer manuellement un autre déploiement et un autre service. Cela fonctionne et était une pratique quelque peu courante avant l'arrivée de PetSet/PersistentSet. Notez qu'il manque certains des avantages énumérés ci-dessus (mappage de volume persistant et ordre de démarrage fixe par exemple).