通過一個例子學習Kubernetes裡的PersistentVolumeClaim的用法
Kubernetes的pod本身是無狀態的(stateless),生命週期通常比較短,只要出現了異常,Kubernetes就會自動建立一個新的Pod來代替它。
而容器產生的資料,會隨著Pod消亡而自動消失。
為了實現Pod內資料的儲存管理,Kubernetes引入了兩個API資源:Persistent Volume(持久卷,以下簡稱PV)和Persistent Volume Claim(持久卷申請,以下簡稱PVC)。
PV是Kubernetes叢集中的一種網路儲存實現,跟Node一樣,也是屬於叢集的資源。
PV跟Docker裡的Volume(卷)類似,不過會有獨立於Pod的生命週期。
使用kubectl get pv檢視列表:
而PVC是使用者的一個請求,跟Pod類似。Pod消費Node的資源,PVC消費PV的資源。
Pod 能夠申請特定的資源(CPU和記憶體);PVC能夠申請特定的尺寸和訪問模式,例如可以載入一個讀寫例項或者多個只讀例項,(就是上圖kubectl get pvc返回結果的Access Mode這一列的值RWO, ROX等等)而無須感知這些例項背後具體的儲存實現。
我們來看一個具體的PVC例項,名稱為nginx-pvc:
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nginx-pvc spec: storageClassName: default accessModes: - ReadOnlyMany resources: requests: storage: 1Gi
使用命令kubectl create -f pvc.yaml建立這個yaml檔案定義的persistent volume claim:
然後定義一個pod,消費這個名為nginx-pvc的persistent volume claim:
使用kubectl describe pvc nginx-pvc檢視這個persistent volume claim對應生成的persistent volume:
現在我用命令kubectl cp train.jpg nginx-storage-pod:/usr/share/nginx/html將兩個檔案train.jpg和index.html檔案拷貝到pod內部檔案路徑/usr/share/nginx/html下面:
現在切換到nginx-storage-pod pod裡,在/usr/share/nginx/html目錄下果然發現了這兩個檔案:
接下來我定義了另一個pod,同樣適用nginx-pvc這個PVC:
建立完這個pod之後,then kubectl exec -ti another ash 進入pod內部/usr/share/nginx/html,同樣發現了index.html和train.jpg.
這個例子說明persistent volume claim能夠用於在多個pod間共享持久化資料。
要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2221872/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 通過一個實際的例子學習 combineLatest
- 通過一個實際例子理解Kubernetes裡pod的自動scale - 水平自動伸縮
- 第一個JavaScript的例子學習JavaScript
- 一個學習 Koa 原始碼的例子原始碼
- 學習儲存過程時寫的個例子儲存過程
- 幽默:“通過128個簡單的步驟學習Kubernetes!” - iamdevloperdev
- 一個測試陣列用法的例子陣列
- 通過一個簡單的例子,瞭解 Cypress 的執行原理
- 通過 Route 配置的例子,學習SAP Cloud for Customer 的scoping操作Cloud
- 通過Redux原始碼學習基礎概念一:簡單例子入門Redux原始碼單例
- 通過10個好玩的遊戲來學習 CSS遊戲CSS
- Rust之旅 02.通過例子學習自定義型別Rust型別
- 一個簡單的netty通訊的例子Netty
- 通過describe命令學習Kubernetes的pod屬性詳解
- 通過階乘的例子,練習在JavaScript, Scala和ABAP裡實現尾遞迴(Tail Recursion)JavaScript遞迴AI
- Flutter | 通過一個小例子帶你認識動畫 AnimationFlutter動畫
- 一個具體的例子學習Java volatile關鍵字Java
- 從一個例子學習 instanceof 和 getclass 的區別
- 從一個MysqL的例子來學習查詢語句(轉)MySql
- 通過實際的例子,介紹 SAP ABAP 裡的 Repository Information System 的使用技巧ORM
- 通過一個具體的例子,講解 SAP Cloud Platform Integration(CPI) 的使用方法CloudPlatform
- 通過例子學習 Keystone - 每天5分鐘玩轉 OpenStack(19)
- 通過做一個基於Node的微伺服器來學習Docker伺服器Docker
- 透過例子學習Lua(4)--函式的呼叫(轉)函式
- 透過一個具體的例子理解 npm 的 peerDependencyNPM
- Mybatis學習筆記 1:一個Mybatis使用例子MyBatis筆記
- JavaScript 裡三個點 ... 的用法JavaScript
- 一個簡單例子教會你C++動態庫的用法單例C++
- 一個簡單的例子理解Kubernetes的三種IP地址型別型別
- 幽默:“透過128個簡單的步驟學習Kubernetes!” - iamdevloperdev
- 透過三個例子,學習 Go 語言併發程式設計的利器 - goroutineGo程式設計
- 學習一個簡單的儲存過程儲存過程
- 通過一個具體的例子,講解 SAP BDC 技術的使用步驟試讀版
- [AI開發]一個例子說明機器學習和深度學習的關係AI機器學習深度學習
- Angular 原理圖 Schematics 學習 - 動手開發一個實際的例子Angular
- SAP MTA 裡定義 SAP UI5 module 的一個例子UI
- 三. 基於例子的學習
- 透過例子學習Lua(5)--Lua與C的互動(轉)