当前位置:网站首页>Kubernetes的Local Persistent Volumes使用小記

Kubernetes的Local Persistent Volumes使用小記

2020-12-08 10:54:11 itread01

### 歡迎訪問我的GitHub [https://github.com/zq2599/blog_demos](https://github.com/zq2599/blog_demos) 內容:所有原創文章分類彙總及配套原始碼,涉及Java、Docker、Kubernetes、DevOPS等; ### 關於Local Persistent Volumes 文中將Local Persistent Volumes簡稱為Local PV; 1. Kubernetes的Local PV自1.7版本進行alpha釋出,在1.10版本beta釋出,最終的正式釋出(General Availability)是在1.14版本; 2. 一個Local PV對應指定節點上的一處本地磁碟空間; 3. 相比NFS之類的遠端儲存,Local PV提供了本地IO帶來的更好效能; ### 和HostPath Volume的區別 Local PV出現之前,使用本地磁碟的方法是HostPath Volume,同為使用本地磁碟,區別在哪呢? 1. 最重要的區別,就是Local PV和具體節點是有關聯的,這意味著使用了Local PV的pod,重啟多次都會被Kubernetes scheduler排程到同一節點,而如果用的是HostPath Volume,每次重啟都可能被Kubernetes scheduler排程到新的節點,然後使用同樣的本地路徑; 2. 當我們要用HostPath Volume的時候,既可以在PVC宣告,又可以直接寫到Pod的配置中,但是Local PV只能在PVC宣告,對於PV資源,通常都有專人管理,這樣就避免了Pod開發者擅自使用本地磁碟帶來的衝突和風險; 3. 另外要注意的是,HostPath Volume和Local PV都是在使用本地磁碟,和常見的分散式檔案系統相比,本地磁碟故障會導致資料丟失,儲存重要資料請勿使用HostPath Volume和Local PV; 基本概念說完了,接下來實戰體驗; ### 實戰環境資訊 1. 作業系統:CentOS Linux release 7.8.2003 (Core) 2. kubernetes:1.15.3 3. helm:2.16.1 ### 體驗Local PV的步驟簡述 本次實戰的目標是快速建立Local PV,並驗證該Local PV正常可用,全文由以下部分組成: 1. 建立Local PV; 2. 通過helm下載tomcat的chart; 3. 修改chart,讓tomcat使用剛才建立的Local PV; 4. 部署tomcat; 5. 在伺服器上檢查資料夾已正常寫入; ### 參考文章 如果您想了解Kubernetes和helm的更多資訊,請參考: 1. [《kubespray2.11安裝kubernetes1.15》](https://xinchen.blog.csdn.net/article/details/103106314); 2. [《部署和體驗Helm(2.16.1版本)》](https://xinchen.blog.csdn.net/article/details/103667500); 準備完畢,開始實操; ### 建立PV 1. 在kubernetes工作節點建立資料夾給Local PV使用,我這是:/root/temp/202005/24/local-pv/ 2. 給上述資料夾讀寫許可權:chmod -R a+r,a+w /root/temp/202005/24/local-pv 3. 建立檔案local-storage-pv.yaml,內容如下: ```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 ``` 4. 關於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的節點建立; 5. 執行命令kubectl apply -f local-storage-pv.yaml,即可建立PV; 6. 執行kubectl describe pv example-pv檢查是否建立成功,如下圖紅框所示,此PV已經可用: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202012/485422-20201208074135716-846394936.png) ### 使用PV 接下來通過helm部署tomcat,並且讓tomcat使用上述Local PV,請確保helm已經裝好; 1. 增加helm倉庫(帶有tomcat的倉庫):helm repo add bitnami https://charts.bitnami.com/bitnami 2. 下載tomcat的chart:helm fetch bitnami/tomcat 3. chart下載成功後,當前目錄出現tomcat配置壓縮包tomcat-6.2.4.tgz,解壓:tar -zxvf tomcat-6.2.4.tgz 4. 解壓得到tomcat資料夾,進入後開啟values.yaml檔案,找到persistence節點,增加下圖紅框中的內容: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202012/485422-20201208074137005-1268924347.png) 5. 在tomcat目錄下執行命令:helm install --name-template tomcat001 -f values.yaml . --namespace hello-storageclass 6. 檢視tomcat的pod和service情況,一切正常,並且埠對映到了宿主機的31835: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202012/485422-20201208074137752-239355716.png) 7. 瀏覽器訪問宿主機IP:31835,出現tomcat歡迎頁面: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202012/485422-20201208074138873-1832822747.png) 8. 去目錄/root/temp/202005/24/local-pv/檢查磁碟使用情況,如下圖,可見已分配給tomcat的PVC,並且寫入了tomcat的基本資料: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202012/485422-20201208074139832-771586843.png) 9. 再次檢視Local PV,發現狀態已經改變: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202012/485422-20201208074141001-1061044729.png) 至此可以確認,tomcat用上了Local PV,資料被儲存在宿主機的指定資料夾; ### 清理Local PV 1. 一般來說,清理PV要做如下操作: a. 刪除pod,或者deployment; b. 刪除pvc; c. 刪除Local PV; 2. 這裡由於用上了helm,因此通過helm將上述步驟1和2執行掉,既命令helm delete tomcat001 3. 再在local-storage-pv.yaml所在目錄執行kubectl delete -f local-storage-pv.yaml即可刪除Local PV; 至此,Local PV的學習和實踐就完成了,如果您正在使用這種儲存,希望本文能給您一些參考; ### 你不孤單,欣宸原創一路相伴 1. [Java系列](https://xinchen.blog.csdn.net/article/details/105068742) 2. [Spring系列](https://xinchen.blog.csdn.net/article/details/105086498) 3. [Docker系列](https://xinchen.blog.csdn.net/article/details/105086732) 4. [kubernetes系列](https://xinchen.blog.csdn.net/article/details/105086794) 5. [資料庫+中介軟體系列](https://xinchen.blog.csdn.net/article/details/105086850) 6. [DevOps系列](https://xinchen.blog.csdn.net/article/details/105086920) ### 歡迎關注公眾號:程式設計師欣宸 > 微信搜尋「程式設計師欣宸」,我是欣宸,期待與您一同暢遊Java世界... [https://github.com/zq2599/blog_demos](https://github.com/zq2599/blo

版权声明
本文为[itread01]所创,转载请带上原文链接,感谢
https://www.itread01.com/content/1607392866.html