Persistence Volume to definicja wolumenu jako oddzielnego zasobu – czyli jaki to wolumen, ile ma mieć pamięci itd. A Persistent Volume Claim pozwala na, zdefiniowanie żądania wolumenu – czyli coś w stylu „Hej, chcę taki i taki wolumen, posiadający tyle i tyle pamięci”:

Czyli zastosowana jest tutaj znana już zasada rozdzielania odpowiedzialności (w tym wypadku na trzy zasoby):
Pod – definiuje, że chce zażądać wolumenu korzystając z Persistent Volume Claim
Persistent Volume Claim – określa jakiego wolumenu oczekuje
Persistent Volume – to definicja wolumenu
Definicja wolumenu – Persistent Volume
apiVersion: v1
kind: PersistentVolume
metadata:
name: your-pv-name
spec:
capacity:
storage: 2Gi
volumeMode: Filesystem
storageClassName: standard
accessModes:
- ReadWriteOnce
hostPath:
path: /data
type: DirectoryOrCreateJest to definicja wolumenu typu hostPath o pojemności 2 giga bajty.
Określenie wymaganego wolumenu – Peristent Volume Claim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: your-pvc-name
spec:
volumeName: your-pv-name
accessModes:
- ReadWriteOnce
storageClassName: standard
resources:
requests:
storage: 2GiJest to określenie wymaganego wolumenu. W tym wypadku w sekcji spec, określamy oczekiwany wolumen po nazwie (volumeName: your-pv-name). Oraz dodatkowe wymagania wobec tego wolumenu:
– accessModes (ReadWriteOnce) – czyli, chcemy taki wolumen, który może być użyty tylko przez jednego noda (więcej na temat accessModes tutaj)
– storageClassName: standard – czyli jakiej klasy wolumen potrzebujemy (patrz StorageClass)
– requests: storage: 2Gi – czyli potrzebujemy wolumenu posiadającego 2 giga bajty
Wykorzystanie Persistent Volume Claim
apiVersion: v1
kind: Pod
metadata:
name: your-pod-name
spec:
containers:
- name: your-container
image: your-docker-image
volumeMounts:
- name: pvc-volume
mountPath: /data
volumes:
- name: pvc-volume
persistentVolumeClaim:
claimName: your-pvc-nameNa początku w sekcji spec.volumes należy niejako zadeklarować wolumen. A następnie go użyć w konkretnym kontenerze – spec.containers.volumeMounts
Oczywiście w podobny sposób można użyć Persistent Volume Claim w definicji deploymentu:
apiVersion: apps/v1
kind: Deployment
metadata:
name: your-deployment-name
spec:
replicas: 1
selector:
matchLabels:
app: your-pod-name-selector
template:
metadata:
labels:
app: your-pod-name-selector
spec:
containers:
- name: your-container-name
image: your-docker-image
volumeMounts:
- name: pvc-volume
mountPath: /data
volumes:
- name: pvc-volume
persistentVolumeClaim:
claimName: your-pvc-nameWarto zajrzeć
1. https://kubernetes.io/docs/concepts/storage/persistent-volumes/
2. https://kubernetes.io/docs/reference/kubernetes-api/config-and-storage-resources/persistent-volume-claim-v1/#PersistentVolumeClaimSpec
