¿Cuál es el impacto de usar Helm Deployments en lugar de StatefulSets para bases de datos como MongoDB o MySQL?

7

La definición de una aplicación sin estado parece aplicarse a servidores de bases de datos como MongoDB o MySQL. Encontré Helm Charts como una especie de repositorio de plantillas para Kubernetes. Sin embargo, las compilaciones estables utilizan todas las implementaciones. Solo en la incubadora, que no se proporcionan como estables.

¿Cuál es el impacto del uso de implementaciones para servidores DB?

¿Hay algún problema, como problemas de sincronización / replicación, cuando se ejecutan varias instancias en un clúster, por ejemplo?

Antecedentes: quiero ejecutar MongoDB en un clúster de conmutación por error, por lo que se ejecutan al menos 2 instancias.

Daniel
fuente

Respuestas:

5

Cuando Kubernetes anunció la nueva función StatefulSet con K8s v1.5 (convirtiéndola del antiguo PetSetnombre), 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.

BoomShadow
fuente