Персистентные диски

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

PersistentVolumeClaim — это запрос на создание диска.

Работа с дисками возможна только в режиме ReadWriteOnce.

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

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

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

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

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

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

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

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

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

Вы можете использовать примеры готовых манифестов 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

Создание 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