База знаний LinxCloud Services

Persistent Volumes и StatefulSet

StatefulSet — это удобный способ работы со Stateful-приложениями, которым требуется обрабатывать события об остановке работы Pod и осуществления Graceful Shutdown. Обычно, такие приложения — это базы данных и очереди сообщений, которые работают в нескольких экземплярах, синхронизируемых друг с другом посредством репликации или кластеризации.

Существует несколько способов организации таких схем: с использованием общих Persistent Volumes (RWX) и с помощью индивидуальных Persistent Volumes (RWO).

В случае RWX Persistent Volumes (NFS, GlusterFS) вы можете использовать существующий Persistent Volume Claim в декларации StatefulSet. Однако, такой способ не подойдет для RWO Persistent Volumes (Block Storage), т.к. блочное хранилище монтируется в эксклюзивном режиме к каждому Pod. В результате, если StatefulSet будет иметь 2 или более реплики Persistent Volume будет примонтирован только к 1 из Pod, а монтирование ко всем остальным Pod завершится неудачей.

Для того, чтобы избежать подобных проблем, вы должны использовать volumeClaimTemplates в декларации StatefulSet:

volumeClaimTemplates:
 - metadata: name: www
 spec: accessModes: [ "ReadWriteOnce" ]
 storageClassName: "csi-dp1-ssd"
 resources:
requests:
storage: 1Gi

В этом случае для каждой реплики StatefulSet будет создан PVC с именем data-0, data-1, data-2 и т.д. в зависимости от количества реплик. Каждый из этих PVC выделит Persistent Volume нужного объема, который и будет примонтирован к подам, соответствующим репликам StatefulSet.

Что вас интересует?
Получить демо-доступ

Спасибо за ваш запрос, мы свяжемся с вами в ближайшее время!