Перейти к основному содержимому
Добавить персистентный диск

Добавить персистентный диск

Персистентный диск (PersistentVolume) используется в качестве хранилища в кластере.

В Managed Kubernetes используются сетевые диски Облачной платформы Selectel. Все созданные персистентные диски отображаются в панели управления в разделе Облачная платформа → Диски.

Персистентный диск создается через PersistentVolumeClaim — запрос на создание диска. Диск нужно создавать в пуле, в котором находится кластер.

к сведению

Работа с дисками возможна только в режиме ReadWriteOnce — один диск может быть примонтирован только к одной ноде, при этом на ноде может быть заупщено несколько подов. Для работы с режимом ReadWriteMany (монтирование диска к нескольким нодам) вы можете подключить к нодам кластера Файловое хранилище Selectel.

Создание диска через механизм Topology-Aware Volume Provisioning недоступно.

Создание персистентного диска

Манифест для создания StorageClass

Для создания PersistentVolume используется объект StorageClass. StorageClass позволяет заранее описать конфигурацию персистентных дисков, которые понадобятся в работе кластера. В объекте Storage Class необходимо указать тип и пул диска. Например, для создания быстрых дисков в пуле ru-1a в описании StorageClass в разделе parameters необходимо добавить поля:

type: fast.ru-1a
availablity: ru-1a

Типы дисков fast, basic, universal соответствуют сетевым дискам Облачной платфоры Selectel.

При создании кластера в панели управления будет автоматически создан один StorageClass с быстрым сетевым диском в пуле, который соответствует пулу группы нод кластера. При создании кластера через Terraform или API StorageClass не создается автоматически.

Для того чтобы посмотреть, какие StorageClass были созданы (для OpenStack cinder), используйте команду:

$ kubectl get sc
NAME PROVISIONER AGE
fast.ru-3a cinder.csi.openstack.org 2d19h

Пример манифеста StorageClass для быстрого диска в пуле ru-1a:

# fast.ru-1a.yaml
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: fast.ru-1a
provisioner: cinder.csi.openstack.org
parameters:
type: fast.ru-1a
availability: ru-1a
allowVolumeExpansion: true

Вы можете использовать другие готовые манифесты StorageClass для создания PersistentVolume.

Манифест для создания PersistentVolumeClaim

Создайте манифест PersistentVolumeClaim, использующий StorageClass:

# my-pv-claim.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pv-claim
spec:
storageClassName: fast.ru-3a
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi

Пул в манифесте PVC должна совпадать с пулом ноды, к которой она должна быть подключена. В случае использования нескольких пулов для нод кластера и PVC вам потребуется указать в описании объектов Pod их привязку к пулу.

Манифест для создания Pod

Если вы создаете под (Pod) с персистентным диском, то диск сохраняется при удалении пода.

Манифест для создания пода с персистентным диском:

# nginx-with-volume.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app: webservice
spec:
containers:
- name: nginx
image: library/nginx:1.17-alpine
ports:
- containerPort: 80
volumeMounts:
- mountPath: "/var/www/html"
name: data
volumes:
- name: data
persistentVolumeClaim:
claimName: my-pv-claim

Информация для подов с securityContext.fsGroup

При создании пода с параметром securityContext.fsGroup диск не будет смонтирован с соответствующим GID. Чтобы решить эту проблему, в параметрах (parameters) StorageClass добавьте fsType: ext4

Создание PVC и Pod

Для создания запроса и пода используйте:

kubectl create -f my-pv-claim.yaml
kubectl create -f nginx-with-volume.yaml

Проверьте, что диск подключен:

$ kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-f171f94c-0d38-41be-947e-2f5d7e46a6c3 10Gi RWO Delete Bound default/my-pv-claim fast.ru-3a 97s