歡迎訪問我的GitHub
https://github.com/zq2599/blog_demos
內容:所有原創文章分類匯總及配套源碼,涉及Java、Docker、Kubernetes、DevOPS等;
關於StorageClass
在K8S環境,當pod需要存儲空間時,StorageClass比PV更靈活和方便,官方文檔地址:https://kubernetes.io/docs/concepts/storage/persistent-volumes/
本次實戰
本次實戰的目標是快速創建NFS類型的StorageClass,並驗證該StorageClass正常可用,全文由以下部分組成:
- 創建StorageClass;
- 通過helm下載tomcat的chart;
- 修改chart,讓tomcat使用剛才創建的StorageClass;
- 在NFS服務端檢查文件夾已正常寫入;
環境信息和准備工作
以下是創建StorageClass必備的環境信息:
- Kubernetes:1.15
- Kubernetes宿主機:CentOS Linux release 7.7.1908
- NFS服務:IP地址192.168.50.135,文件夾/volume1/nfs-storageclass-test
參考文章
如果您想了解Kubernetes和NFS搭建的更多信息,請參考:
如果您已經准備好了kubernetes和NFS,咱們就開始實戰吧;
如何創建StorageClass
把創建StorageClass要做的的事情理清楚:
- 創建namespace,這里用hello-storageclass(您也可以選用自己喜歡的);
- 創建rbac:因為StorageClass有對應的pod要運行,每個pod都有自己的身份即serviceaccount,而這個serviceaccount是和某個角色綁定的,所以要創建:serviceaccount、rule、rolebinding;
- 創建provisioner,即關聯NFS的工作類,負責給PVC提供存儲資源,這里用的是nfs-client-provisioner;
- 創建StorageClass,所有需要PVC通過該StorageClass即可獲得存儲空間;
接下來請SSH登錄kubernetes環境,按照上述步驟操作;
創建StorageClass
- 創建namespace:kubectl create namespace hello-storageclass
- 創建rbac的腳本直接從我的github下載吧,地址:https://raw.githubusercontent.com/zq2599/blog_demos/master/storageclass-demo/rbac.yaml
- 下載的rbac.yaml文件中,namespace是kafka-test,現在要替換成hello-storages,執行命令替換:sed -i 's/kafka-test/hello-storageclass/' rbac.yaml
- 創建rbac:kubectl apply -f rbac.yaml
- 創建provisioner的腳本也從我的github下載,地址:https://raw.githubusercontent.com/zq2599/blog_demos/master/storageclass-demo/deployment.yaml
- 下載的deployment.yaml文件中,namespace是kafka-test,現在要替換成hello-storages,執行命令替換:sed -i 's/kafka-test/hello-storageclass/' deployment.yaml
- 打開deployment.yaml,設置NFS參數,修改下圖紅框的四個參數,紅框1和3都是NFS server地址,紅框2和4都是NFS分配的文件夾目錄,請您按照實際的NFS資源來設置:
- 創建provisioner:kubectl apply -f deployment.yaml
- 強烈建議用kubectl describe pod xxxxxx -n hello-storageclass和kubectl logs -f xxxxxx -n hello-storageclass命令查看provisioner是否成功創建,下圖是我曾經遇到的問題,NFS服務端權限設置有誤導致NFS無法使用:
- 創建StorageClass的腳本也從我的github下載,地址:https://raw.githubusercontent.com/zq2599/blog_demos/master/storageclass-demo/class.yaml
- 下載的class.yaml無需修改,直接使用:kubectl apply -f class.yaml
- class.yaml中的StorageClass名為managed-nfs-storage,后面的PVC就用這個名字去申請存儲空間;
- 用df命令來檢查掛載情況,發現NFS的已經掛載到K8S宿主機:
- 至此,StorageClass已經就緒,K8S環境中的PVC可以申請使用了,接下來通過實戰驗證應用的pod能否使用StorageClass的存儲空間;
准備工作
- 接下來的實戰是通過helm在kubernetes部署tomcat,該tomcat所需的存儲空間是通過StorageClass分配的,請您在kubernetes上准備好helm,我這里用的是2.16版本
- helm的安裝和使用請參考《部署和體驗Helm(2.16.1版本)》
tomcat使用StorageClass實戰
-
增加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情況,一切正常,並且端口映射到了宿主機的30300:
7. 瀏覽器訪問宿主機IP:30300,出現tomcat歡迎頁面:
8. 去NFS server檢查磁盤使用情況,如下圖,可見已分配給tomcat的PVC,並且寫入了tomcat的基本數據:
清理資源
本次實戰創建了各種類型的資源,使用下面的命令可以將其全部清理掉:
helm del --purge tomcat001
kubectl delete storageclass managed-nfs-storage
kubectl delete deployment nfs-client-provisioner -n hello-storageclass
kubectl delete clusterrolebinding run-nfs-client-provisioner
kubectl delete serviceaccount nfs-client-provisioner -n hello-storageclass
kubectl delete role leader-locking-nfs-client-provisioner -n hello-storageclass
kubectl delete rolebinding leader-locking-nfs-client-provisioner -n hello-storageclass
kubectl delete clusterrole nfs-client-provisioner-runner
kubectl delete namespace hello-storageclass
至此,StorageClass的創建和使用的實戰就完成了,如果您在學習kubernetes存儲相關的知識,希望本文能給您一些參考;
歡迎關注公眾號:程序員欣宸
微信搜索「程序員欣宸」,我是欣宸,期待與您一同暢游Java世界...
https://github.com/zq2599/blog_demos