Kubernetes-PersistentVolumeClaim(PVC)介紹


1 PVC介紹

  PVC是用戶層面,作為對存儲資源的需求申請,主要包括了存儲空間大小、訪問模式、PV的選擇條件、存儲類別等信息的設置。

2 PVC的參數詳解

2.1 PVC的yaml模板

apiVersion: v1
kind: PersistentVolumeClaim
metadata: 
  name: test-pvc1
spec: 
  accessModes: 
  - ReadWriteMany
  resources:
    requests:
      storage: 1Gi
  storageClassName: nfs-stoarge
  selector:
  	matchLabels:
  	  pv: test-pv1

2.2 PVC參數說明

  1. spec.accessModes:訪問模式;描述用戶應用對存儲資源的訪問權限。
  • RWO:ReadWriteOnce,僅允許單個節點掛載進行讀寫;
  • ROX:ReadOnlyMany,允許多個節點掛載且只讀;
  • RWX:ReadWriteMany,允許多個節點掛載進行讀寫;
  1. spec.resources.requests.storage:資源請求的存儲大小;
  2. spec.storageClassName:存儲卷模式,指定一個StorageClass資源對象的名稱,具有特定類別的PV只能與請求了該類別的PVC進行綁定;(動態存儲);當然,也可以設置為spec.storageClassName=“”,未設置特定類型的PV只能與不請求任何類型的PVC進行綁定(靜態存儲)。
  3. spec.selector.matchLabels: PV的選擇條件,可以通過標簽匹配進行PV綁定;也可以通過spec.selector.matchExpressions進行條件標簽描述;

3 PVC的生命周期

$ kubectl get pvc
PVC生命周期
PVC一共也有4個生命周期階段:Available/Bound/Released/Failed

  • Available: 可用狀態,無PV綁定;
  • Bound:綁定狀態,已經和某個PV綁定;
  • Released:釋放狀態,被綁定的PV已刪除,資源釋放,但沒有被集群回收;
  • Failed:失敗狀態,自動資源回收失敗;

4 PVC的常用命令

  1. 創建(yaml的方式)
    $ kubectl create -f pvc.yaml
  2. 刪除
    $ kubectl delete pvc pvc_name
  3. 查看所有PVC
    $ kubectl get pvc
  4. 查看某個PVC
    $ kubectl get pvc pvc_name
  5. 查看詳情
    $ kubectl describe pvc pvc_name
    注意: 若在某個命名空間下,以上命令可以加上-n ns_name

5 PVC和PV的綁定

5.1 PV和PVC的生命周期

生命周期

by 《k8s 權威指南》

其實,使用共享存儲就幾步:
Pod(Deployment等配置好PVC)—>PVC—>PV—>存儲資源。

  1. 資源供應
    PVC使用存儲資源可以通過靜態綁定或者動態綁定,靜態模式就是集權管理員預先創建對應的PV對存儲特性進行設置;動態模式就是集權管理員預先創建好StorageClass資源對后端存儲進行描述,PVC創建時對存儲類型進行聲明,PVC創建后,k8s會自動創建合適的PV與PVC進行綁定。

  2. 資源綁定
    創建好PVC后,PVC會在已存在的PV中選擇合適的PV進行綁定(可以通過標簽進行特定綁定,也可以不通過標簽,系統會自動選擇合適(容量大小等參數)的PV進行綁定。),綁定成功,狀態變成Bound,且該PV被對應的PVC獨占綁定,不可以再被其他PVC綁定,除非該PVC釋放。若在k8s系統中沒有找到合適的PV,則PVC一直處於Pending狀態。

  3. 資源使用
    在Deployment等資源中,通過spec.template.spec.volumes:進行PVC掛載路徑設置。

spec:
  tempeate:
    spec:
      containers:
        - name: container1
          image: image1
          volumeMounts:
            - name: volume1
              mountPath: /data/dir1
      volumes:
      - name: volume1
        persistentVolumeClaim:
          claimName: pvc1
  1. 資源釋放
    刪除PVC,與該PVC綁定的PV狀態就會變成“Released”,該PVC在存儲設備上的數據刪除后,對應的PV才能與其他的PVC進行綁定。

  2. 資源回收
    PV中可以通過spec.persistentVolumeReclaimPolicy設置回收策略,這個主要用於綁定的PVC刪除后,資源釋放后如何處理該PVC在存儲設備上寫入的數據。

  • Retain:保留,刪除PVC后,PV保留數據;
  • Recycle:回收空間,刪除PVC后,簡單的清除文件;(NFS和HostPath存儲支持)
  • Delete:刪除,刪除PVC后,與PV相連接的后端存儲會刪除數據;(AWS EBS、Azure Disk、Cinder volumes、GCE PD支持)

5.2 手動創建pv進行綁定

  我們可以通過標簽的方式,將pvc綁定到特定的pv上。需要做兩步,一個是pv的yaml標簽,另一步是pvc的標簽匹配。

靜態模式

by 《k8s權威指南》

舉例

  1. pv的yaml需要有metadata.labels進行標簽標記;
    如:
[root@k8s /pv_test]#  vim test_pv1.yaml 
apiVersion: v1
kind: PersistentVolume
metadata:
  name: test-pv1
  labels:
    pv: test-pv1
spec:
  capacity:
    storage: 2Mi
  accessModes:
  - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  nfs:
    path: /date-nfs/k8s
    server: 10.139.12.14
  1. pvc的yaml里需要有spec.selector.matchLabels進行標簽匹配。
[root@k8s /pvc_test]#  vim test_pvc1.yaml 
#persistent Volume Claim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: test-pvc1
  namespace: t1
spec:
  #storageClassName: managed-nfs-storage
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Mi
  selector:
    matchLabels:
      pv: test-pv1
  • 創建pv和pvc
    $ kubectl create -f test_pv.yaml
    $ kubectl create -f test_pvc.yaml

  • 查看pv
    $ kubectl get pv test-pv1
    在這里插入圖片描述

  • 查看pvc
    $ kubectl get pvc test-pvc1
    在這里插入圖片描述
    我們可以看出test-pvc1持久卷聲明綁定到了test-pv1這個持久卷上了。

5.3 動態卷配置StorageClass

除了pvc綁定手動創建pv的方式,我們還可以通過動態卷配置StorageClass跳過手動pv的方式。

動態模式

by 《k8s權威指南》

  1. 我們先要創建一個StorageClass資源。
[root@k8s /sc_test]#  vim test_storageclass1.yaml 
apiVersion: storage.k8s.io/v1beta1
kind: StorageClass
metadata:
  name: course-nfs-storage
provisioner: fuseim.pri/ifs

  1. 然后在pvc的yaml中增加spec.storageClassName進行配置。
[root@k8s /pvc_test]#  vim test_pvc_sc.yaml 
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: test-pvc
spec:
  accessModes:
  - ReadWriteMany
  storageClassName: course-nfs-storage
  resources:
    requests:
      storage: 1Mi
  • 創建StorageClass和PVC資源
    $ kubectl create -f test_storageclass1.yaml
    $ kubectl create -f test_pv_sc.yaml

  • 查看SC
    $ kubectl get sc course-nfs-storage
    在這里插入圖片描述

  • 查看SC詳情
    $ kubectl describe sc course-nfs-storage
    在這里插入圖片描述

  • 查看PVC
    $ kubectl get pvc test-pvc
    在這里插入圖片描述

  • 查看PV
    $ kubectl get pv
    在這里插入圖片描述
    可以看到一個自動創建的pv,它的策略是Delete,即pvc刪除后會自動刪除。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM