The introduction of the StatefulSet resource was a game changer when it comes to run stateful workloads in Kubernetes, introducing a wide range of features, including:
- Predictable DNS names for each Pod, allowing one to individually address them in the network.
- Stable persistent storage for each Pod, ensuring that each of them is bound to the same PersistentVolumeClaim.
- Ordered graceful deployments and automated rolling updates.
However, this isn’t quite enough for running databases in Kubernetes in a reliable way. We are missing day 1 and day 2 operations, such as configuring high availability and scheduling backups, which is something not managed by vanilla Kubernetes.