kubernetes pv та pvc ☁️

У Kubernetes поди мають тимчасовий характер: коли под видаляється, всі дані всередині нього також зникають. Однак деяким додаткам потрібен постійнє сховище, і для цього використовуються PV (PersistentVolume) та PVC (PersistentVolumeClaim). Завдяки створенню pv і pvcl, ці дані можуть зберігатися поза межами кластеру і бути доступними для всіх вузлів або лише для одного, залежно від налаштувань.

Що таке PersistentVolume (PV)?

PV — це постійний диск, який був заздалегідь визначений адміністратором кластеру. Він може використовувати різні типи інфраструктури, наприклад, NFS, iSCSI, hostPath або хмарні диски, такі як EBS.

Що таке PersistentVolumeClaim (PVC)?

PVC — це запит користувача на певну кількість сховища. Якщо є відповідний PV, PVC автоматично підключається до нього.

PV — це загальний ресурс в кластері, фізичний диск.
PVC — це запит на використання диску від конкретного пода. Под не взаємодіє безпосередньо з PV.

Перш за все створюється PV, а потім за допомогою PVC цей ресурс запитується. ВАЖЛИВО!

Для налаштування NFS-диска на Docker можна виконати такі команди:

$ docker volume create nfsvol

$ docker network create --driver=bridge --subnet=10.255.255.0/24 --ip-range=10.255.255.0/24 --gateway=10.255.255.10 nfsnet

$ docker run -dit --privileged --restart unless-stopped -e SHARED_DIRECTORY=/data -v nfsvol:/data --network nfsnet -p 2049:2049 --name nfssrv ozgurozturknet/nfs:latest

Цей контейнер дозволяє підключитися до каталогу /data через NFS. IP-адреса контейнера — 10.255.255.10.

Підключення через Kubernetes PersistentVolume:

apiVersion: v1
kind: PersistentVolume
metadata:
name: mysqlpv
labels:
app: mysql
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
nfs:
path: /
server: 10.255.255.10

У цьому конфігурації:

  • nfs.path вказує на каталог на NFS-сервері, який буде доступний для спільного використання (у нашому випадку це /data).
  • nfs.server — IP-адреса NFS-сервера Docker.

Цей конфіг дозволяє Kubernetes підключатися до зазначеного IP і використовувати цей каталог.

Приклад PersistentVolumeClaim і Pod:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysqlclaim
spec:
accessModes:
- ReadWriteOnce
volumeMode: Filesystem
resources:
requests:
storage: 5Gi
storageClassName: ""
selector:
matchLabels:
app: mysql

Щоб створити pod, потрібно додати інформацію про PVC в його конфігурацію:

volumes:
- name: mysqlvolume
persistentVolumeClaim:
claimName: mysqlclaim

Основні моди та політики для доступу:

  • ReadWriteOnce: Тільки один pod може читати/писати ✅
  • ReadOnlyMany: Багато pod можуть тільки читати ✅
  • ReadWriteMany: Багато pod можуть читати/писати ✅

Політика для того, що відбудеться з PV після його видалення:

  • Retain — зберегти
  • Recycle — очистити вміст
  • Delete — повністю видалити

Ці налаштування дозволяють гнучко керувати доступом до сховищ і даних у Kubernetes.

Перекладено з: kubernetes pv and pvc ☁️