歡迎訪問我的GitHub
https://github.com/zq2599/blog_demos
內容:所有原創文章分類匯總及配套原始碼,涉及Java、Docker、Kubernetes、DevOPS等;
關于Local Persistent Volumes
文中將Local Persistent Volumes簡稱為Local PV;
- Kubernetes的Local PV自1.7版本進行alpha發布,在1.10版本beta發布,最終的正式發布(General Availability)是在1.14版本;
- 一個Local PV對應指定節點上的一處本地磁盤空間;
- 相比NFS之類的遠程存盤,Local PV提供了本地IO帶來的更好性能;
和HostPath Volume的區別
Local PV出現之前,使用本地磁盤的方法是HostPath Volume,同為使用本地磁盤,區別在哪呢?
- 最重要的區別,就是Local PV和具體節點是有關聯的,這意味著使用了Local PV的pod,重啟多次都會被Kubernetes scheduler調度到同一節點,而如果用的是HostPath Volume,每次重啟都可能被Kubernetes scheduler調度到新的節點,然后使用同樣的本地路徑;
- 當我們要用HostPath Volume的時候,既可以在PVC宣告,又可以直接寫到Pod的配置中,但是Local PV只能在PVC宣告,對于PV資源,通常都有專人管理,這樣就避免了Pod開發者擅自使用本地磁盤帶來的沖突和風險;
- 另外要注意的是,HostPath Volume和Local PV都是在使用本地磁盤,和常見的分布式檔案系統相比,本地磁盤故障會導致資料丟失,保存重要資料請勿使用HostPath Volume和Local PV;
基本概念說完了,接下來實戰體驗;
實戰環境資訊
- 作業系統:CentOS Linux release 7.8.2003 (Core)
- kubernetes:1.15.3
- helm:2.16.1
體驗Local PV的步驟簡述
本次實戰的目標是快速創建Local PV,并驗證該Local PV正常可用,全文由以下部分組成:
- 創建Local PV;
- 通過helm下載tomcat的chart;
- 修改chart,讓tomcat使用剛才創建的Local PV;
- 部署tomcat;
- 在服務器上檢查檔案夾已正常寫入;
參考文章
如果您想了解Kubernetes和helm的更多資訊,請參考:
- 《kubespray2.11安裝kubernetes1.15》;
- 《部署和體驗Helm(2.16.1版本)》;
準備完畢,開始實操;
創建PV
- 在kubernetes作業節點創建檔案夾給Local PV使用,我這是:/root/temp/202005/24/local-pv/
- 給上述檔案夾讀寫權限:chmod -R a+r,a+w /root/temp/202005/24/local-pv
- 創建檔案local-storage-pv.yaml,內容如下:
apiVersion: v1
kind: PersistentVolume
metadata:
name: example-pv
spec:
capacity:
storage: 10Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Delete
storageClassName: local-storage
local:
path: /root/temp/202005/24/local-pv
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- node1
- 關于local-storage-pv.yaml有以下幾點需要注意:
a. spec.storageClassName等于local-storage,后面的PVC中也要指定storageClassName等于local-storage;
b. spec.nodeAffinity是必填引數,用于建立Local PV和節點的關系,spec.nodeAffinity.required,nodeSelectorTerms.matchExpressions.values的值包含node1,表示該Local PV可以在主機名為node1的節點創建; - 執行命令kubectl apply -f local-storage-pv.yaml,即可創建PV;
- 執行kubectl describe pv example-pv檢查是否創建成功,如下圖紅框所示,此PV已經可用:

使用PV
接下來通過helm部署tomcat,并且讓tomcat使用上述Local PV,請確保helm已經裝好;
- 增加helm倉庫(帶有tomcat的倉庫):helm repo add bitnami https://charts.bitnami.com/bitnami
- 下載tomcat的chart:helm fetch bitnami/tomcat
- chart下載成功后,當前目錄出現tomcat配置壓縮包tomcat-6.2.4.tgz,解壓:tar -zxvf tomcat-6.2.4.tgz
- 解壓得到tomcat檔案夾,進入后打開values.yaml檔案,找到persistence節點,增加下圖紅框中的內容:

- 在tomcat目錄下執行命令:helm install --name-template tomcat001 -f values.yaml . --namespace hello-storageclass
- 查看tomcat的pod和service情況,一切正常,并且埠映射到了宿主機的31835:

- 瀏覽器訪問宿主機IP:31835,出現tomcat歡迎頁面:

- 去目錄/root/temp/202005/24/local-pv/檢查磁盤使用情況,如下圖,可見已分配給tomcat的PVC,并且寫入了tomcat的基本資料:

- 再次查看Local PV,發現狀態已經改變:

至此可以確認,tomcat用上了Local PV,資料被保存在宿主機的指定檔案夾;
清理Local PV
- 一般來說,清理PV要做如下操作:
a. 洗掉pod,或者deployment;
b. 洗掉pvc;
c. 洗掉Local PV; - 這里由于用上了helm,因此通過helm將上述步驟1和2執行掉,既命令helm delete tomcat001
- 再在local-storage-pv.yaml所在目錄執行kubectl delete -f local-storage-pv.yaml即可洗掉Local PV;
至此,Local PV的學習和實踐就完成了,如果您正在使用這種存盤,希望本文能給您一些參考;
你不孤單,欣宸原創一路相伴
- Java系列
- Spring系列
- Docker系列
- kubernetes系列
- 資料庫+中間件系列
- DevOps系列
歡迎關注公眾號:程式員欣宸
微信搜索「程式員欣宸」,我是欣宸,期待與您一同暢游Java世界...
https://github.com/zq2599/blog_demos
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/231446.html
標籤:Java
上一篇:手寫Json決議器學習心得
下一篇:WEB網站登錄系統
