pv/pvc概念
pv:存儲卷、pv是集群中已由管理員配置的一段網絡存儲。集群中的資源就像一個節點是一個集群的資源,pv是諸如卷之類的卷插件,但是具有獨立於使用pv的熱河單個pod生命周期。該api對象不會存儲的細節,
大白話:他是集群里面的一個磁盤,pod可以掛載使用
pvc:存儲卷請求:是用戶存儲的請求,pvc使用邏輯,在pod中定義一個存儲卷(類型為pvc),定義的時候直接指定大小,pvc必須與對應的pv建立關系,pvc會根據定義的pv去申請。二pv是由存儲空間創建出來的,pv和pvc是kubernetes抽象出來的一種存儲資源
pv沒有命名空間隔離概念,而pvc有命名空間隔離概念
| 模式 | 解釋 |
|---|---|
| ReadWriteOnce(RWO) | 可讀可寫,但只支持被單個節點掛載 |
| ReadOnlyMany(ROX) | 只讀,可被多個節點掛載 |
| ReadWriteMany(RWX) |
注:只是起到標識作用,並不會控制他的讀寫
| 策略 | 解釋 |
|---|---|
| Retain | 不清除、保留volume(需要手動清除) |
| Recycle | 刪除數據,即rm -rf /thevolume/* (只有nfs和hostPath支持) |
| Delete |
kind: persistentVolume apiVersion: v1 metadata: name: nfsva spec: nfs: path: /data/nfs/v1 server: 192.168.159.14 accessModes: - "ReadWriteMany" #訪問模式,起到標記作用並不控制讀寫權限 persistentVolumeReclaimPolicy: Retain #回收策略 capacity: storage: 2Gi #這個存儲卷的大小 --- kind: persistentVolume apiVersion: v1 metadata: name: nfsvb spec: nfs: path: /data/nfs/v2 server: 192.168.159.14 accessModes: - "ReadWriteOnce" persistentVolumeReclaimPolicy: Retain capacity: storage: 2Gi #這個存儲卷的大小
#創建pvc kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nfsva spec: accessModes: - "ReadWriteMany" #只是一個標識,並不會控制讀寫權限,底層存儲該怎么做他就會怎么做 resources: requests: storage: 2Gi --- #測試的deployment kind: Deployment apiVersion: apps/v1 metadata: name: nfsvc-test spec: selector: matchLabels: app: nfsva template: metadata: labels: app: nfsva spec: containers: - name: nginx image: nginx volumeMounts: - mountPath: /usr/share/nginx name: nfsva volumes: - name: nfsva persistentVolumeClaim: claimName: nfsva #使用的pvc名字
pvc的空間申請大小大於pv的大小
pvc的storageclassName沒有和pv的一致
pvc的accessModes和pv的不一致
1.pvc沒有創建成功或者被創建 2.pvc和pod不在同一個anmespace
刪除pvc的時候需要先把正在使用pvc的deploy或者pod刪掉或吧使用的pvc刪掉,要不然會一直顯示delete不動
刪除pvc之后k8s會創建一個回收的pod----根據pv的回收策略回收,回收完了之后,pv的狀態就會變成可被綁定的狀態,也就是空閑狀態,其他的pvc匹配到這個pv就會和這個pv綁定
