Подключение Persistent Volume

Persistent Volume

Механизм Persistent Volume позволяет вам подключить существующий Cinder Volume, находящийся на кластере Ceph в качестве постоянного хранилища данных к Pod.

Хранилище на базе Ceph обеспечивает сохранность данных за счет трехкратной репликации.

Для этого нужно сначала создать диск в интерфейсе Horizon, перейдя «Вычислительные ресурсы» → «Диски», а потом указать его id в манифесте создания Persistent Volume.

apiVersion: v1
kind: Pod
metadata:
 name: web-cinder
spec:
 containers:
   - name: web
     image: nginx
     ports:
       - name: web
         containerPort: 80
         hostPort: 8081
         protocol: TCP
     volumeMounts:
       - name: html-volume
         mountPath: "/usr/share/nginx/html"
 volumes:
   - name: html-volume
     cinder:
       # Введите ID диска ниже в поле $ID
       volumeID: $ID
       fsType: ext4

Механизм Persistent Volume Claim (далее — PVC) позволяет автоматически создать и примонтировать Persistent Volume к Pod. Этот способ удобен тем, что в отличие от Persistent Volume, вам не требуется создавать вручную диск в панели Horizon и указывать его ID.

Persistent Volume Claim

В сервисе PVC создаются на базе Cinder Volumes в кластере распределенной системы хранения Ceph. Доступны два класса хранения:

  1. HDD (по умолчанию) для стандартной скорости работы.

  2. SSD для требовательных к io/iops задач.

Выбор класса хранения происходит на базе использования аннотации volume.beta.kubernetes.io/storage-class

  • volume.beta.kubernetes.io/storage-class: hdd

  • volume.beta.kubernetes.io/storage-class: ssd

Следующий манифест создает Persistent Volume Claim с классом SSD и монтирует его в Pod.


kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: mysql-pvc-ssd
  annotations:
    volume.beta.kubernetes.io/storage-class: ssd
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 30Gi

---

apiVersion: v1
kind: Pod
metadata:
  name: mysql
  labels:
    name: mysql
spec:
  containers:
    - resources:
        limits :
          cpu: 0.5
      image: mysql
      name: mysql
      args:
        - "--ignore-db-dir"
        - "lost+found"
      env:
        - name: MYSQL_ROOT_PASSWORD
          # change this
          value: yourpassword
      ports:
        - containerPort: 3306
          name: mysql
      volumeMounts:
          # name must match the volume name below
        - name: mysql-persistent-storage
          # mount path within the container
          mountPath: /var/lib/mysql
  volumes:
    - name: mysql-persistent-storage
      persistentVolumeClaim:
       claimName: mysql-pvc-ssd

Подключение к NFS с помощью Persistent Volume и Persistent Volume Claim

Вместе с блочной системой хранения на базе Ceph вы можете использовать общее файловое хранилище, доступное по протоколу NFS, для создания Persistent volumes в вашем кластере Kubernetes.

Для этого сначала необходимо создать NFS-диск в приватной подсети, ассоциированной с вашим кластером Kubernetes:

  1. Выберите пункт меню «Вычислительные ресурсы» → «Общие ресурсы».
  2. Перейдите на вкладку «Сети общих ресурсов».
  3. Создайте новую Сеть общего ресурса, указав:
Сеть Neutron
Сеть кластера Kubernetes
Подсеть Neutron
Подсеть кластера Kubernetes
  1. Перейдите на вкладку «Общие ресурсы».
  2. Создайте новый «Общий ресурс», указав:
Протокол общего ресурса
NFS
Размер 
Необходимый размер
Сеть общего доступа
Созданную ранее сеть
  1. Перейдите в созданный ресурс и скопируйте значение поля «Путь». Например, 10.0.0.16:/shares/share-51831cd4-2fe9-4f08-ac45-6be754556519.

Далее вам нужно создать Persistent Volume используя манифест следующего вида (в поле «Server» нужно вписать IP-адрес из значения «Путь» созданного ранее ресурса). 

Также вы можете создать PersistentVolumeClaim, который использует ранее созданный NFS Persistent Volume в качестве источника.

Ниже пример манифеста, создающего Persistent Volume на базе NFS и Persistent Volume Claim, использующий ранее созданный Persistent Volume в качестве источника.

apiVersion: v1
kind: PersistentVolume
metadata:
 name: siud-webadm-uploads
spec:
 accessModes:
   - ReadWriteMany
 capacity:
   storage: 10Gi
 nfs:
   server: 10.0.0.16
   path: "/shares/share-51831cd4-2fe9-4f08-ac45-6be754556519"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
 name: siud-webadm-upload
spec:
 accessModes:
 - ReadWriteMany
 resources:
   requests:
     storage: 10Gi
 volumeName: "siud-webadm-uploads"