Kubernetes – Persistent Volume (Claim) – czyli jak wydzielić konfigurację wolumenów

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: DirectoryOrCreate

Jest 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: 2Gi

Jest 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-name

Na 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-name

Warto 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

Pozostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *