Где Kubernete Postgresql хранит данные

Я прочитал много форумов, но так и не нашел об этом вообще ничего. Как я знаю, что если docker контейнер упадет, то все данные из базы удалятся и для этого вписывают volume для хранения данных. Но я не смог найти это в kubenetes.

Я бы хотел узнать нужно ли это делать, если нет, то почему?


Ответы (2 шт):

Автор решения: Roman Konoval

Действительно, если хранить данные в файловой системе контейнера, то сохранность их не гарантируется. kubernetes может в любой момент остановить (уничтожить) контейнер, чтобы, например, перенести его на другой узел для распределения нагрузки. В этом случае все данные в файловой системе такого контейнера будут утеряны.

Правильный подход, это использовать persisten volume, которые в свою очередь основаны на volume из docker. Это долговременное хранилище, по сути как отдельный диск, который может быть присоединен к контейнеру, но не привязан к его жизненному циклу. Т.е. даже при остановках и пересозданиях конейнера/пода он будет хранить данные.

→ Ссылка
Автор решения: Dmitry Shurupov

Основной ресурс (API-объект) в Kubernetes для приложений, которые хранят/используют постоянные данные (т.е. stateful), — это StatefulSets. (Они похожи на ReplicaSets, предназначенные для stateless-приложений.) В StatefulSets определяются PersistentVolumeClaims (PVC), которые и ссылаются на PersistentVolumes (подробнее о них было в соседнем комментарии).

Вообще же, для более простого управления СУБД вроде PostgreSQL в Kubernetes можно использовать готовые Kubernetes-операторы, где решены эти (и многие другие) проблемы эксплуатации. Такие операторы создают нужные StatefulSets, а также могут позволять хранить данные на внешних облачных хранилищах — например, оператор от Zalando полноценно поддерживает AWS EBS.

P.S. Русскоязычный обзор с актуальным списком операторов конкретно для PgSQL (Stolon, Crunchy Data, Zalando, KubeDB, StackGres) и сравнением их возможностей есть здесь.

→ Ссылка