Cuando Kubernetes anunció la nueva función StatefulSet con K8s v1.5 (convirtiéndola del antiguo PetSet
nombre), publicaron una muy buena publicación de blog que muestra un ejemplo de su uso: https://kubernetes.io/blog/2016/ 12 / statefulset-run-scale-stateful-aplicaciones-en-kubernetes /
El primer párrafo tiene una muy buena descripción de las características diferenciadoras que siempre se me ocurrieron:
... "como máximo un pod por índice" para la implementación de los Pods en el conjunto. Junto con la implementación ordenada, la terminación ordenada, los nombres de red únicos y el almacenamiento estable persistente ...
Descomponga los importantes:
Nombres de red únicos
En una implementación, no importa el nombre de la red, ya que cualquier pod debería poder retomar el trabajo. Sin embargo, cuando está ejecutando cosas como un clúster con estado, es posible que tenga el concepto de 'maestros' y 'esclavos'. Este nombre de red único le permitirá mantener la distinción haciendo referencia a un pod específico , con un nombre incremental predecible.
Terminación ordenada
Esto es importante para las reimplementaciones en un clúster con estado, ya que podría tener máquinas críticas que necesiten permanecer más tiempo. Si tiene nodos de coordinador o 'líder', estos deberían ser los últimos en reiniciarse. StatefulSets le permite hacer esto. La publicación de blog vinculada incluso muestra un ejemplo de esto.
Almacenamiento estable persistente
Podría decirse que esta es la diferencia más crucial. Por defecto, StatefulSets retiene su almacenamiento. Kubernetes no elimina automáticamente el almacenamiento que se adjuntó a un StatefulSet. Lo mismo se puede lograr con las implementaciones, pero no es el valor predeterminado.