Kubernees PV、PVC

Persistent Volumes

PersistentVolume 爲用戶和管理員提供了一組 API, 將存儲如何控制的細節從其如何被使用中抽象出來。
爲此,k8s 引入了兩個新的 API 資源,PersistentVolume 和 PersistentVolumeClaim

PersistentVolume

無 Namespace 隔離

PersistentVolume(PV) 是集羣中的一塊存儲,可以由管理員事先創建,配置。擁有獨立於任何使用 PV 的 Pod 的生命週期,抽象了存儲細節,PV 可能由NFS、iSCSI 或者特定於雲平臺的存儲系統組成。

PersistentVolumeClaim

Namespace 隔離

PersistentVolumeClaim(PVC) 表達是用戶對存儲的請求, PVC 也可以請求特定的大小和訪問模式的 PV 資源(要求 PV 卷能夠以 ReadWriteOnce、ReadOnlyMany 或 ReadWriteMany 模式之一來掛載)。

NFS 類型的 PV

文檔鏈接

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv0003
spec:
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  storageClassName: slow
  mountOptions:
    - hard
    - nfsvers=4.1
  nfs:
    path: /tmp
    server: 172.17.0.2

回收策略

persistentVolumeReclaimPolicy

  • Retain 保留 PV 內容
  • Recycle 回收,Pod 刪除之後會回收PV,清除 PV 的內容,目前只有 NFS 和 HostPath 支持
  • Delete 刪除 PVC 後,綁定的 PV 會被刪除(PV需要支持,動態存儲默認方式)

PV 狀態

  • Available:空閒的PV,沒有被任何PVC綁定。
  • Bound:已經被PVC綁定
  • Released:PVC被刪除,但是資源未被重新使用
  • Failed:自動回收失敗。

PVC

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: myclaim
spec:
  accessModes:
    - ReadWriteOnce
  volumeMode: Filesystem
  resources:
    requests:
      storage: 8Gi
  storageClassName: slow
  selector:
    matchLabels:
      release: "stable"
    matchExpressions:
      - {key: environment, operator: In, values: [dev]}
  • resources 不能比需要綁定的 PV 大
  • storageClassName 需要與 PV 相同
  • accessModes 需要與 PV 相同
  • selector 篩選 PV 標籤

POD 使用 PVC

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
    - name: myfrontend
      image: nginx
      volumeMounts:
      - mountPath: "/var/www/html"
        name: mypd
  volumes:
    - name: mypd
      persistentVolumeClaim:
        claimName: myclaim

常見問題

  • 創建 PVC 之後,一直綁定不上 PV(Pending):

    • PVC 的空間申請大小大於 PV 的大小
    • PVC 的 storageClassName 沒有和 PV 的一致
    • PVC 的 accessModes 和 PV 的不一致
  • 創建掛載了 PVC 的 Pod 之後,一直處於 Pending 狀態:

    • PVC 沒有被創建成功,或者被創建
    • PVC 和 Pod 不在同一個 Namespace
  • 刪除 PVC 後 K8S 會創建一個用於回收的 Pod 根據 PV 的回收策略進行PV 的回收。 回收完以後 PV 的狀態就會變成可被綁定的狀態,也就是空閒狀態。 其他的 Pending 狀態的 PVC 如果匹配到了這個 PV,就能和這個 PV 進行綁定。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章