What is a Kubernetes Stateful Set?

Aktualisiert: 21. Dez 2019

Stateful Sets are used specifically to run stateful, replicated services, like Databases inside Kubernetes cluster.


Configuration of a Stateful Set:


apiVersion: apps/v1

kind: StatefulSet

metadata:

name: mysql

spec:

replicas: 3

template:

spec:

containers:

- name: mysql

image: mysql:8.0

env:

- name: MYSQL_DATABASE

value: my-db

- name: MYSQL_ROOT_PASSWORD

valueFrom:

secretKeyRef:

name: mysql-credentials

key: password

ports:

- name: mysql

containerPort: 3306

The main part of stateful set, that makes it able to run databases is that each replica pod gets assigned a unique ID. This ID sticks to the pod even when its rescheduled to another worker node. Through this unique ID, the pod retains the connection to the volume that holds the state of the database. However because when rescheduling the pod, the volume get detached and then reattached again, the storage volumes must be on a remote persistent disk, which means the storage need to be hosted outside of the cluster itself.

So overall, each replica pod in a stateful set has its state and data. So when it gets restarted it needs to regain that state. This means we can't use local storage for stateful sets, since local storage is bound to node, so when pod is rescheduled to another node its previous state won't be available for it. Instead it should use a remote storage that isn't bound to any specific node.


Kubernetes popularity rises constantly. So, what is Kubernetes actually and what problems does it solve - explained here in 15mins:



Nicole Hiller  |  Nana Janashia

Mail: info@nnsoftware.at

©2018 by nnSoftware