У 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 ☁️