本地持久存儲卷和臨時存儲卷
更新時間 2024-01-05 16:04:24
最近更新時間: 2024-01-05 16:04:24
分享文章
本文主要介紹本地持久存儲卷和臨時存儲。
持久存儲卷和臨時存儲卷僅在集群版本>= v1.21.2-r0 時支持創建,且臨時存儲卷需要Everest插件版本>=1.2.29,持久存儲卷需要Everest插件版本>=1.2.31。
持久存儲卷和臨時存儲卷
CCE支持將節點上數據盤設置為持久存儲卷和臨時存儲卷。
- 持久存儲卷通過LVM組成存儲池(VolumeGroup),然后劃分LV給容器掛載使用。使用持久存儲卷作為存儲介質的PV的類型可稱之為Local PV。
- 臨時存儲卷可以作為EmptyDir的存儲介質。臨時存儲卷通過LVM組成存儲池(VolumeGroup),然后劃分LV給容器掛載使用,相比原生EmptyDir默認的存儲介質類型性能更好。
持久存儲卷和臨時存儲卷支持如下兩種寫入模式。
- 線性:線性邏輯卷是將一個或多個物理卷整合為一個邏輯卷,實際寫入數據時會先往一個基本物理卷上寫入,當存儲空間占滿時再往另一個基本物理卷寫入。
- 條帶化:創建邏輯卷時指定條帶化,當實際寫入數據時會將連續數據分成大小相同的塊,然后依次存儲在多個物理卷上,實現數據的并發讀寫從而提高讀寫性能。多塊卷才能選擇條帶化。
約束與限制
- 移除節點、刪除節點、重置節點和縮容節點會導致與節點關聯的本地持久存儲卷類型的PVC/PV數據丟失,無法恢復,且PVC/PV無法再正常使用。移除節點、刪除節點、重置節點和縮容節點時使用了本地持久存儲卷的Pod會從待刪除、重置的節點上驅逐,并重新創建Pod,Pod會一直處于pending狀態,因為Pod使用的PVC帶有節點標簽,由于沖突無法調度成功。節點重置完成后,Pod可能調度到重置好的節點上,此時Pod會一直處于creating狀態,因為PVC對應的底層邏輯卷已經不存在了。
- 持久存儲卷或臨時存儲卷創建后,請勿在節點上手動刪除對應的存儲池或卸載數據盤,否則會導致數據丟失等異常情況。
- 如果要使用臨時存儲卷,請確保節點上Pod不要掛載/var/lib/kubelet/pods/目錄,否則可能會導致使用了臨時存儲卷的Pod無法正常刪除。
添加持久存儲卷或臨時存儲卷
有兩種方法可以添加持久存儲卷或臨時存儲卷。
- 在創建節點時,可以為節點添加數據盤作為持久存儲卷或臨時存儲卷。

- 如果創建節點時沒有添加持久存儲卷或臨時存儲卷,或當前存儲卷容量不夠,可以去ECS中為節點添加磁盤,然后在CCE的存儲池中導入,導入時可以選擇寫入模式。
說明
條帶化模式的存儲池不支持擴容,條帶化擴容后可能造成碎片空間,無法使用。
存儲池不支持縮容和刪除。
如果刪除節點上存儲池的磁盤,會導致存儲池異常。

使用持久存儲卷
本地持久存儲卷支持使用StorageClass動態創建PVC,StorageClass名稱為csi-local-topology。csi-local-topology的行為相比csi-disk等他類型StorageClass有較大差異,使用csi-local-topology行為如下。
添加了本地持久存儲卷的節點會自動加上node.kubernetes.io/local-storage-persistent的標簽。如果Pod使用csi-local-topology類型的PVC,調度器會將Pod調度到擁有node.kubernetes.io/local-storage-persistent標簽的節點上,也就是擁有本地持久存儲卷的節點上。
- 單獨創建PVC,PVC創建后,狀態會一直為Pending,不會立即創建PV。等有Pod使用PVC,調度器將Pod調度到節點后,everest再創建localpv所需的邏輯卷,并返回PV,PVC完成與PV的綁定。待掛載成功后,Pod啟動。
- 創建應用時選擇動態創建PVC,此時動態創建PVC后,調度器將Pod調度到節點,everest再創建邏輯卷,并返回PV,PVC完成與PV的綁定。待掛載成功后,Pod啟動。
- 刪除應用時,可選擇不刪除使用的PVC。這樣在下一次創建應用時可以使用使用過的PVC,這樣Pod會被調度到PVC關聯的節點上。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-local-example
namespace: default
spec:
accessModes:
- ReadWriteOnce # 必須為ReadWriteOnce
resources:
requests:
storage: 10Gi # 本地持久存儲卷大小
storageClassName: csi-local-topology # StorageClass類型為csi-local-topology
使用臨時存儲卷
創建工作負載時,EmptyDir的磁盤介質選擇為LocalVolume,表示使用臨時存儲卷。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
namespace: default
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: container-1
image: nginx:alpine
resources:
requests:
cpu: 250m
memory: 512Mi
limits:
cpu: 250m
memory: 512Mi
volumeMounts:
- name: vol-164284390917275733
mountPath: /tmp
imagePullSecrets:
- name: default-secret
volumes:
- name: vol-164284390917275733
emptyDir:
medium: LocalVolume # emptyDir磁盤介質選擇LocalVolume,表示使用臨時存儲卷
sizeLimit: 1Gi
臨時存儲卷異常處理說明
用戶如果手動從ECS側卸盤、手動執行vgremove兩種誤操作致臨時卷存儲池異常。可以先將節點設置為不可調度,具體方法請參見節點調度設置,然后通過重置節點進行恢復。