¿Cómo puedo modelar un clúster de conmutación por error de PostgreSQL con Docker / Kubernetes?

Todavía estoy envolviendo a Kubernetes con la cabeza y cómo se supone que funciona. Actualmente, me cuesta entender cómo modelar algo así como un clúster de PostgreSQL con replicación de transmisión, ampliación y failover / pgpool-II automático ( pgpool-II , repmgr , pick your poison).

Mi principal problema con el enfoque es la naturaleza dual de una instancia de PostgreSQL, en lo que respecta a la configuration: es un maestro o un modo de espera frío / cálido / caliente. Si aumente el número de réplicas, esperaría que todas aparezcan en modo de espera, así que me imagino creando un controller de replicación postgresql-standby por separado de un pod postgresql-master . Sin embargo, también esperaría que uno de esos juegos base se convierta en un maestro en caso de que el maestro actual esté inactivo, por lo que es un controller de replicación postgresql común después de todo.

La única idea que he tenido hasta ahora es colocar la configuration de replicación en un volumen externo y administrar los cambios de estado y estado fuera de los contenedores.

(en el caso de PostgreSQL, la configuration probablemente ya estaría en un volumen dentro de su directory de data , lo cual es obviamente algo que me gustaría tener en un volumen, pero eso está al lado)

¿Es ese el enfoque correcto, o hay alguna otra manera más limpia?

Hay un ejemplo en OpenShift: https://github.com/openshift/postgresql/tree/master/examples/replica El principio es el mismo en Kube puro (no está utilizando nada realmente específico de OpenShift, y puedes usar las imágenes de forma sencilla docker)

El estado de Kubernetes es una buena base para establecer el service con estado. Aún necesitará algún trabajo para configurar la membresía correcta entre las réplicas de PostgreSQL.

Kubernetes tiene un ejemplo para eso. http://blog.kubernetes.io/2017/02/postgresql-clusters-kubernetes-statefulsets.html