Persistent Volumes

To run or not to run a database on Kubernetes: What to consider

[Kubernetes] Persistent Volume (Claim) Overview

[Kubernetes] 設定 StorageClass (以 NFS 為例)

<aside> 💡 Persistent Volume(PV) & Persistent Volume Claim(PVC),透過這兩個概念將連結 storage 的過程抽象化

</aside>

PersistentVolume


PersistentVolume 是一個 Storage 的抽象物件,可以由管理者直接提供,或是由 StorageClass 來動態產生。PersistentVolumeVolume 類似,但是 PersistentVolume 的 Lifecycle 獨立的,也就是當與其綁定的 Pod 消失時,PersistentVolume 不一定會跟著消失。

Define a PersistentVolume

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv0003
spec:
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  storageClassName: slow
  mountOptions:
    - hard
    - nfsvers=4.1
  nfs:
    path: /tmp
    server: 172.17.0.2

PersistentVolumeClaim


PersistentVolumeClaim 是用來 **Request Storage (PersistentVolume),**若 PersistentVolume 不存在,要求 StorageClass 建造 PersistentVolume,否則 PersistentVolumeClaim 會一直在 Unbound State。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: myclaim
spec:
  accessModes:
    - ReadWriteOnce
  volumeMode: Filesystem
  resources:
    requests:
      storage: 8Gi
  storageClassName: slow
  selector:
    matchLabels:
      release: "stable"
    matchExpressions:
      - {key: environment, operator: In, values: [dev]}
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
    - name: myfrontend
      image: nginx
      volumeMounts:
      - mountPath: "/var/www/html"
        name: mypd
  volumes:
    - name: mypd
      persistentVolumeClaim:
        claimName: myclaim

StorageClass


用於動態的產生新的 PersistentVolume 給 PersistentVolumeClaim 使用。

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: managed-nfs-storage
provisioner: nthu.laslab.com/nfs
parameters:
  archiveOnDelete: "false"