K8S的StorageClass實戰(NFS)

程式設計師欣宸發表於2022-12-15

歡迎訪問我的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正常可用,全文由以下部分組成:

  1. 建立StorageClass;
  2. 通過helm下載tomcat的chart;
  3. 修改chart,讓tomcat使用剛才建立的StorageClass;
  4. 在NFS服務端檢查資料夾已正常寫入;

環境資訊和準備工作

以下是建立StorageClass必備的環境資訊:

  1. Kubernetes:1.15
  2. Kubernetes宿主機:CentOS Linux release 7.7.1908
  3. NFS服務:IP地址192.168.50.135,資料夾/volume1/nfs-storageclass-test

參考文章

如果您想了解Kubernetes和NFS搭建的更多資訊,請參考:

  1. 《kubespray2.11安裝kubernetes1.15》
  2. 《Ubuntu16環境安裝和使用NFS》
  3. 《K8S使用群暉DS218+的NFS》

如果您已經準備好了kubernetes和NFS,我們們就開始實戰吧;

如何建立StorageClass

把建立StorageClass要做的的事情理清楚:

  1. 建立namespace,這裡用hello-storageclass(您也可以選用自己喜歡的);
  2. 建立rbac:因為StorageClass有對應的pod要執行,每個pod都有自己的身份即serviceaccount,而這個serviceaccount是和某個角色繫結的,所以要建立:serviceaccount、rule、rolebinding;
  3. 建立provisioner,即關聯NFS的工作類,負責給PVC提供儲存資源,這裡用的是nfs-client-provisioner;
  4. 建立StorageClass,所有需要PVC通過該StorageClass即可獲得儲存空間;

接下來請SSH登入kubernetes環境,按照上述步驟操作;

建立StorageClass

  1. 建立namespace:kubectl create namespace hello-storageclass
  2. 建立rbac的指令碼直接從我的github下載吧,地址:https://raw.githubusercontent.com/zq2599/blog_demos/master/storageclass-demo/rbac.yaml
  3. 下載的rbac.yaml檔案中,namespace是kafka-test,現在要替換成hello-storages,執行命令替換:sed -i 's/kafka-test/hello-storageclass/' rbac.yaml
  4. 建立rbac:kubectl apply -f rbac.yaml
  5. 建立provisioner的指令碼也從我的github下載,地址:https://raw.githubusercontent.com/zq2599/blog_demos/master/storageclass-demo/deployment.yaml
  6. 下載的deployment.yaml檔案中,namespace是kafka-test,現在要替換成hello-storages,執行命令替換:sed -i 's/kafka-test/hello-storageclass/' deployment.yaml
  7. 開啟deployment.yaml,設定NFS引數,修改下圖紅框的四個引數,紅框1和3都是NFS server地址,紅框2和4都是NFS分配的資料夾目錄,請您按照實際的NFS資源來設定:

在這裡插入圖片描述

  1. 建立provisioner:kubectl apply -f deployment.yaml
  2. 強烈建議kubectl describe pod xxxxxx -n hello-storageclasskubectl logs -f xxxxxx -n hello-storageclass命令檢視provisioner是否成功建立,下圖是我曾經遇到的問題,NFS服務端許可權設定有誤導致NFS無法使用:
    在這裡插入圖片描述
  3. 建立StorageClass的指令碼也從我的github下載,地址:https://raw.githubusercontent.com/zq2599/blog_demos/master/storageclass-demo/class.yaml
  4. 下載的class.yaml無需修改,直接使用:kubectl apply -f class.yaml
  5. class.yaml中的StorageClass名為managed-nfs-storage,後面的PVC就用這個名字去申請儲存空間;
  6. 用df命令來檢查掛載情況,發現NFS的已經掛載到K8S宿主機:
    在這裡插入圖片描述
  7. 至此,StorageClass已經就緒,K8S環境中的PVC可以申請使用了,接下來通過實戰驗證應用的pod能否使用StorageClass的儲存空間;

準備工作

  1. 接下來的實戰是通過helm在kubernetes部署tomcat,該tomcat所需的儲存空間是通過StorageClass分配的,請您在kubernetes上準備好helm,我這裡用的是2.16版本
  2. helm的安裝和使用請參考《部署和體驗Helm(2.16.1版本)》

tomcat使用StorageClass實戰

  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節點,增加下圖紅框中的內容:
    在這裡插入圖片描述

  5. 在tomcat目錄下執行命令:

helm install --name-template tomcat001 -f values.yaml . --namespace hello-storageclass
  1. 檢視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

相關文章