天天看點

Kubernetes持久化存儲2——探究實驗

  本文在“建立PV,建立PVC挂載PV,建立POD挂載PVC”這個環境的基礎上,進行各種删除實驗,并記錄、分析各資源的狀态。

  實驗建立了一個PV、一個PVC挂載了PV、一個POD挂載PVC,并編寫了兩個簡單的小腳本來快速建立和删除環境。對應的腳本如下所示:

  需要注意的是在建立PV時,PV并不會去檢查你配置的server是否真的存在;也不會檢查server上是否有一個可用的NFS服務;當然更不會檢查你設定的storage大小是否真有那麼大。個人感覺PV的設定隻是一個聲明,系統并不會對此做任何檢查。PVC的挂載也隻是根據配額的大小和通路模式,過濾一下PV,并以最小的代價支援。

  建立PV,建立PVC挂載PV,建立POD挂載PVC。在删除PV後,PVC狀态從Bound變為Lost,Pod中的Volume仍然能用,資料也沒有被删除。

  設定PV時,如果設定了回收政策是“回收”的時候,在删除PVC時,系統(Controller-Manager)會啟動一個recycler的Pod,用于清理資料卷中的内容。每種資料卷的回收Pod是不同的,都有自己特定的邏輯。本文以NFS為例,給出具體配置及Pod描述如下:

  如果不進行上面的設定的話,預設回收Pod用的image是gcr上的busybox,因為種種原因,在國内是無法下載下傳的(即使你的機器上有gcr的busybox也不可以,還需要設定鏡像下載下傳政策為IfNotPresent,否則會一直去gcr查詢是否有新版本的鏡像,這也會導緻imagePullError)。是以必須要在Controller-Manager中進行設定,設定成随便哪個busybox。

建立PV,建立PVC挂載PV,建立POD挂載PVC。删除PVC後,PV狀态從Bound變為Available,系統(controller-manager)調用持久化存儲清理插件(recycler-for-pv0001),将PVC對應的PV清空。Pod中的Volume仍然能用,但volume中的資料被删除了。

  建立PV,建立PVC挂載PV,建立POD挂載PVC。删除Pod後,PV、PVC狀态沒變,Pod中的Volume對應的NFS資料沒有被删除。

繼續閱讀