Kubernetes CKA課程筆記 54
如前面介紹的,我們可以設計各種不同的Volume提供給應用程式使用:
Volume的種類則大致由data儲存在哪,來加以區分為三類:
- Cloud Storage
- Remote Storage(這個也會是正式環境最常用的,儲存重要的Data)
- Local Storage(通常用在Data沒那麼重要的測試環境)
Local Storage中的其中一種 — hostPath
hostPath:
- 很容易設定(因為碰不到遠端介面/平台)
- →通常只用來做單一Node測試
- 若是Multi-Node建議用其他的Local Volume
- →並且有許多的安全性問題,盡量能不用就不用
但是hostPath是CKA考試測驗的一個題目
本篇筆記重點將示範使用hostPath:
- 1.首先建立PersistentVolume(PV),並且以hostPath做為背後儲存Storage
- 亦即以local機器(如後面範例就是隨意worker node)
- worker node機台上指定的一個路徑當作儲存位置來提供給應用程式使用
- 2.上述PV建好後,接著就是建立PVC(PersistentVolumeClaim)
- PVC將對PV進行儲存空間的請求
- 若當PV有很多個,則PVC會對合適的那一個PV進行空間請求
- 3.接著就是建立Deployment裡面定義的Pod來取用Volume
- 正確來說是Pod取用PVC
建立PersistentVolume(PV):
首先嘗試透過指令查詢如何建立PV,執行:
kubectl create --help
也就是並不是所有物件在kubectl create指令都有包含
這時候就要轉往官網找相關Configuration File範例
接著開始嘗試建立PersistentVolume的Configuration檔:
下圖我找出背後不同實體Storage的spec寫法範例,都不一樣!!!
接著參考下圖hostPath的寫法決定路徑與size:
接著參考下表來看看Access Mode:
查看建立的PersistentVolume(PV)執行:
kubectl get pv
建立PersistentVolumeClaim(PVC):
一樣建立Configuration檔案:
同樣官網找一個範例:
接著spec內容要定義幾個項目:
1.透過PVC要提供給Pod多少physical storage
這邊要注意,因為PVC與PV是分開建立的
我們暫時不管Cluster提供多少Volume可供調用或Volume種類也先不管
我們將建立一個(PVC)claim,將會自動的找到適合的PV
亦即我們是定義一個wish(願望)般
讓這個claim自動對應PV及其背後的storage
2.接著accessModes即完成!
接著就是執行建立,並執行以下指令確認PVC:
kubectl get pvc
再來看看原本PV的狀態:
PV的狀態由Available轉為Bound!
這邊可以注意,PV提供10G,但是PVC只要求5G
兩個PV與PVC已完成綁定,代表PV就算剩餘5G,仍無法提供給下一個PVC取用
除非這個PVC釋放!!!(如下圖,其實有一半空間浪費了)
所以盡量想辦法讓PV與PVC提供與要求大小一致會比較好!!
建立Deployment裡面的Pod來調用上述的PVC:
貼上基本Deployment Configuration File的範例:
在上圖Deployment Configuration File內容底下
1.在container同階層處插入PVC:
2.接著要讓Container取用上述插入的PVC,並綁定給Container內某個路徑
如上圖,將方才插入的db-data這個volume導入給container使用
並指定到路徑:/var/lib/mqsql目錄下
對於這個Pod或Container來說其實根本不在意這個Volume實際實體在哪裡
最後還要幫mqsql透過環境變數建立密碼,參考:
完成如下
接著做一些確認:
實際要看看Pod是否有插入Volume則要使用describe指令,執行:
kubectl describe pod {pod name}
接著當然就是進到Pod的Container裡面看看,執行:
kubectl exec -it {Pod name} -- bash
如上圖
亦即mysql建立在/var/lib/mysql目錄下的檔案,即便現在這個mysql Pod掛了
該目錄下的檔案都還會在!
至於在哪呢? 當然就是前面PV的指定路徑拉:
至於實體哪一台的這個路徑呢?
我們可以在看一次describe Pod:
所以我們嘗試去到worker2機台上找找看!!!
然後就會見到:
比對圖如下:
我們嘗試也看看另一台worker1該目錄:
以上即完成整個示範!
但是還是要強調建議只將hostPath用做測試,或是存放不重要的資料
並且K8s官網也是不建議使用hostPath
更別把它用在正式環境!
另外就是完成以上範例後知曉Pod去插入PVC給Container使用
PVC去請求PV
當哪一天更換儲存的Storage的時候,就只要改改PV的設定就好
其他Container與PVC基本不用調整
也就是開發者不用異動Deployment Configuration File或說裡面的Pod
次日補充:
由於上完課後我都會關閉wokrer機,後來隔天上課開機後Pod長到worker1去
然後真的看到worker1內有:
但是當然要回頭看看前一天worker2的相同目錄:
比對檔案時間好像都沒差:
改天放個檔案在重啟試看看
2021/11/20周末:
一樣使用mysql-deployment.yaml內容如下:
先以上述deployment檔案直接建立:
確認當下Pod長在哪裡:
確認worker2的/mnt/data目錄:
同理確認worker1
接著嘗試直接進到mysql Container內echo一個檔案出來:
實驗結束移除: