Kubernetes Volume

Volume(存儲卷)

Volume是在Pod中能夠被多個容器訪問的共享目錄。k8s中的Volume與Pod的生命週期相同,但是與容器的生命週期不同。
Volume的使用比較簡單,大多數情況下在Pod上聲明一個Volume,然後在容器引用該Volume並Mount到容器裏的某個目錄上。

k8s提供了豐富的Volume類型:
1. emptyDir: Pod分配到Node時創建,由k8s自動分配,作爲臨時目錄
2. hostPath:爲在Pod上掛載宿主機上的文件或目錄,可以用於日誌文件的永久保存,訪問宿主機docker引擎內部數據結構的容器應用
3. gcePersistentDisk:表示使用了谷歌公有云提供的永久磁盤存放Volume數據
4. awsElastiBlockStore:表示使用了亞馬遜公有云提供的EBS Volume存儲數據
5. NFS:使用NFS(Network File System, 網絡文件系統)
5. 其他類型的Volume

Persistent Volume

PV可以理解成k8s中某個網絡存儲中對應的一塊存儲,與Volume類似,但是有以下區別:

  • PV只能是網絡存儲,不屬於任何Node,但可以在每個Node上訪問
  • PV並不是定義在Pod上的,而是獨立於Pod之外定義

我們通常會先定義一個網絡存儲,然後從中劃出一個“網盤”並掛接到虛擬機上。PV是有狀態的,有如下幾種狀態:

  • Available: 空閒狀態
  • Bound:已經綁定到某個PVC上
  • Released:對應的PVC已經刪除,但資源還沒有被集羣收回
  • Failed:PV自動回收失敗

下面例子聲明瞭一個PV:

apiVersion: v1
kind: PersistentVolume
metadata:
    name: pv1
spec:  
    capacity:
        storage: 5Gi
    accessModes:
        - ReadWriteOnce
    persistentVolumeReclainmPolicy: Recycle
    storageClassName: slow
    nfs:
        path: /tmp
        server: 172.17.0.2

PV 和 PVC 的生命週期

這裏寫圖片描述
1. 資源供應(Provisioning)
分爲靜態模式和動態模式
- 靜態模式手動創建PV,
- 動態模式午需管理員手動創建PV,而是通過StorageClass的設置對後端存儲進行描述,標記爲某種“類型”
2. 資源綁定(Binding)
系統根據PVC對資源的請求(存儲空間storage和訪問模式Access Mode)在已存在的PV中選擇一個滿足PVC要求的PV,一旦找到,就將該PV與用戶定義的PVC進行綁定,然後用戶的應用就可以使用這個PVC了。如果不存在,則PVC會無限期處於Pending狀態。
3. 資源使用(Using)
Pod使用volume的定義,將PVC掛載到容器內的某個路徑進行使用,在容器掛載了一個PVC後,就能被持續獨佔使用。不過,多個Pod可以同時掛載同一個PVC,應用程序需要考慮多個實例共同訪問一塊存儲空間的問題。
4. 資源釋放(Releasing)
當用戶對存儲資源使用完畢後,用戶可以刪除PVC,與該PVC綁定的PV將會被標記爲“已釋放”
5. 資源回收(Reclaiming)
對於PV,管理員可以設定回收策略(Reclaim Policy)

發佈了63 篇原創文章 · 獲贊 24 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章