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
是一個 Storage 的抽象物件,可以由管理者直接提供,或是由 StorageClass
來動態產生。PersistentVolume
跟 Volume
類似,但是 PersistentVolume
的 Lifecycle 獨立的,也就是當與其綁定的 Pod 消失時,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
FileSystem
/ Block
rm -rf /thevolume/*
)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]}
selector
→ 篩選 PersistentVolume
用storageClassName
→ 篩選 StorageClass
用。resources.requests.storage
→ 要求的大小, PersistentVolume
的大小不一定等於 resources.requests.storage
,但是一定大於。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
volumes.persistentVolumeClaim
→ 指定 PersistentVolumeClaim 的名字spec.containers[].volumeMounts.mountPath
→ 檔案綁定在 PersistentVolume 中的位置。用於動態的產生新的 PersistentVolume 給 PersistentVolumeClaim 使用。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: managed-nfs-storage
provisioner: nthu.laslab.com/nfs
parameters:
archiveOnDelete: "false"