1?什么是Persistent Volume?
在容器化應(yīng)用中,Pod的生命周期是短暫的,當(dāng)Pod終止時,其中的數(shù)據(jù)通常也會被銷毀。為了解決這個問題,Kubernetes引入了Persistent Volume(PV)的概念。PV是集群中的一塊持久化存儲,它獨立于Pod存在,可以被多個Pod共享,并且在Pod終止后仍然保留數(shù)據(jù)。
PV允許開發(fā)者將數(shù)據(jù)存儲和Pod解耦,提供了一種靈活且可靠的存儲解決方案。PV的生命周期與Pod無關(guān),可以手動配置也可以使用動態(tài)存儲類(StorageClass)來動態(tài)創(chuàng)建。
2?Persistent Volume的基本結(jié)構(gòu)
PV有一些基本的屬性和狀態(tài),這些屬性決定了PV的可用性和使用方式。
2.1?Access Modes(訪問模式)
PV支持不同的訪問模式,它定義了Pod如何與PV進(jìn)行交互。主要有以下三種訪問模式:
- ReadWriteOnce(RWO):?讀寫模式,只能被單個Pod掛載為讀寫模式。
- ReadOnlyMany(ROX):?只讀模式,可以被多個Pod掛載為只讀模式。
- ReadWriteMany(RWX):?讀寫模式,可以被多個Pod掛載為讀寫模式。
2.2?Storage Class(存儲類)
Storage Class是一種動態(tài)創(chuàng)建PV的機(jī)制,它定義了PV的屬性,包括存儲類型、訪問模式等。Storage Class可以根據(jù)需求動態(tài)地創(chuàng)建PV,使得存儲的管理更加靈活。
2.3?Capacity(容量)
PV的容量定義了可以存儲的數(shù)據(jù)量,以GiB或TiB為單位。Pod可以使用PV上的所有容量,但不會超過PV的限制。
2.4?Reclaim Policy(回收策略)
Reclaim Policy定義了當(dāng)PV釋放后的行為。主要有以下三種策略:
- Retain:?保留,PV的數(shù)據(jù)會被保留,需要手動清理。
- Recycle:?回收,PV的數(shù)據(jù)會被清空,重新變?yōu)榭捎脿顟B(tài)。
- Delete:?刪除,PV的數(shù)據(jù)會被刪除,PV也會被刪除。
3?Persistent Volume的使用示例
為了更好地理解Persistent Volume的使用,以下是一個詳細(xì)的示例,涉及PV的手動創(chuàng)建和使用。
步驟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
PV只是存儲資源的定義,要在Pod中使用這些資源,我們需要創(chuàng)建一個Persistent Volume Claim(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-828709.html
kubectl exec -it my-pod -- /bin/sh
# 在Pod中執(zhí)行以下命令
echo "Hello, Persistent Volume!" > /usr/share/nginx/html/index.html
exit
通過訪問PV的存儲路徑,我們也可以驗證數(shù)據(jù)是否持久化。文章來源地址http://www.zghlxwxcb.cn/news/detail-828709.html
cat /mnt/data/index.html
到了這里,關(guān)于Kubernetes基礎(chǔ)(十八)-k8s存儲對象Persistent Volume的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!