1?什么是Persistent Volume Claim?
在容器編排中,Pod的生命周期是短暫的,當Pod終止時,其中的數(shù)據(jù)通常也會被銷毀。為了解決這個問題,Kubernetes引入了Persistent Volume(PV)和Persistent Volume Claim(PVC)的概念。
PVC是對PV的一種聲明,它定義了Pod對存儲資源的需求。Pod通過PVC來請求PV,而PV則提供了實際的存儲資源。PVC的引入使得開發(fā)者無需關(guān)心底層存儲的細節(jié),能夠更靈活地使用和管理存儲。
2?Persistent Volume Claim的基本結(jié)構(gòu)
PVC有一些基本的屬性和狀態(tài),這些屬性決定了PVC的行為和與PV的關(guān)聯(lián)。
2.1?Access Modes(訪問模式)
PVC支持與PV相同的訪問模式,用于定義Pod如何與PV進行交互。主要有以下三種訪問模式:
- ReadWriteOnce(RWO):?讀寫模式,只能被單個Pod掛載為讀寫模式。
- ReadOnlyMany(ROX):?只讀模式,可以被多個Pod掛載為只讀模式。
- ReadWriteMany(RWX):?讀寫模式,可以被多個Pod掛載為讀寫模式。
2.2?Storage Class(存儲類)
PVC可以選擇性地指定Storage Class,用于指導Kubernetes動態(tài)地創(chuàng)建PV。Storage Class定義了PV的屬性,包括存儲類型、訪問模式等。
2.3?Resources(資源需求)
PVC可以定義對存儲資源的需求,包括容量和訪問模式。這決定了K8s為Pod提供的PV的選擇。
2.4?Status(狀態(tài))
PVC的狀態(tài)包括當前的Phase,表示PVC的生命周期階段,可能包括Pending、Bound、Lost等
3 Persistent Volume Claim的使用示例
為了更好地理解Persistent Volume Claim的使用,以下是一個詳細的示例,涉及PVC的創(chuàng)建、Pod的聲明和與PV的關(guān)聯(lián)。
步驟1:創(chuàng)建Persistent Volume
首先,我們創(chuàng)建一個PV,作為實際的存儲資源。
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
capacity:
storage: 1Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: manual
hostPath:
path: "/mnt/data"
在這個例子中,我們創(chuàng)建了一個1Gi容量的PV,使用了ReadWriteOnce的訪問模式,并指定了Retain的回收策略。PV的存儲類為manual,表示這是一個手動創(chuàng)建的PV。PV的存儲路徑為/mnt/data
。
步驟2:創(chuàng)建Persistent Volume Claim
接下來,我們創(chuàng)建一個PVC,用于聲明對存儲資源的需求。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: manual
resources:
requests:
storage: 1Gi
在這個例子中,我們創(chuàng)建了一個PVC,請求1Gi容量,并指定了ReadWriteOnce的訪問模式和manual的存儲類。
步驟3:創(chuàng)建Pod
最后,我們創(chuàng)建一個Pod,并將PVC掛載到Pod的路徑中。
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx
volumeMounts:
- name: my-storage
mountPath: "/usr/share/nginx/html"
volumes:
- name: my-storage
persistentVolumeClaim:
claimName: my-pvc
這個Pod使用了Nginx鏡像,并將PVC掛載到了/usr/share/nginx/html
路徑。這樣,Pod就能夠訪問并寫入PV中的持久化數(shù)據(jù)。
步驟4:驗證
通過訪問Pod中掛載的路徑,我們可以驗證數(shù)據(jù)是否能夠持久化。文章來源:http://www.zghlxwxcb.cn/news/detail-831089.html
kubectl exec -it my-pod -- /bin/sh
# 在Pod中執(zhí)行以下命令
echo "Hello, Persistent Volume Claim!" > /usr/share/nginx/html/index.html
exit
通過訪問PV的存儲路徑,我們也可以驗證數(shù)據(jù)是否持久化。文章來源地址http://www.zghlxwxcb.cn/news/detail-831089.html
cat /mnt/data/index.html
4 Persistent Volume Claim的優(yōu)勢
- 抽象存儲細節(jié):?PVC允許Pod聲明對存儲的需求,而無需關(guān)心底層存儲的細節(jié)。這使得應(yīng)用程序更加靈活和可移植。
- 動態(tài)存儲:?通過Storage Class,PVC可以實現(xiàn)動態(tài)地創(chuàng)建PV,使得存儲的管理更加靈活,無需手動創(chuàng)建和管理PV。
- 持久化存儲:?PVC可以確保應(yīng)用程序的數(shù)據(jù)在Pod重啟或遷移時得以保留,提供了持久化存儲的解決方案。
到了這里,關(guān)于Kubernetes基礎(chǔ)(十九)-k8s存儲對象Persistent Volume Claim的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!