1. 程式人生 > 其它 >k8s基礎概念之六 pv/pvc

k8s基礎概念之六 pv/pvc

pv/pvc概念

pv:儲存卷、pv是叢集中已由管理員配置的一段網路儲存。叢集中的資源就像一個節點是一個叢集的資源,pv是諸如卷之類的卷外掛,但是具有獨立於使用pv的熱河單個pod生命週期。該api物件不會儲存的細節,
大白話:他是叢集裡面的一個磁碟,pod可以掛載使用


pvc:儲存卷請求:是使用者儲存的請求,pvc使用邏輯,在pod中定義一個儲存卷(型別為pvc),定義的時候直接指定大小,pvc必須與對應的pv建立關係,pvc會根據定義的pv去申請。二pv是由儲存空間創建出來的,pv和pvc是kubernetes抽象出來的一種儲存資源

pv沒有名稱空間隔離概念,而pvc有名稱空間隔離概念

pv的訪問模式

模式解釋
ReadWriteOnce(RWO) 可讀可寫,但只支援被單個節點掛載
ReadOnlyMany(ROX) 只讀,可被多個節點掛載
ReadWriteMany(RWX) 多路可讀可寫,這種儲存可以以讀寫的方式被多個節點共享、不是每一種儲存都支持者三種方式,像共享方式,目前支援的還比較少,比較常用的是NFS,在pvc繫結pv時通常根據兩個條件來判定,是儲存的大小,另一個就是模式

注:只是起到標識作用,並不會控制他的讀寫

pv的回收策略

策略解釋
Retain 不清除、保留volume(需要手動清除)
Recycle 刪除資料,即rm -rf /thevolume/* (只有nfs和hostPath支援)
Delete 刪除儲存資源,比如刪除aws ebs卷(只有aws EBS,GCE PD,Azure Disk和cinder支援)

建立一個簡單的pv

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 #這個儲存卷的大小

寫一個deployment測試

#建立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的空間申請大小大於pv的大小
pvc的storageclassName沒有和pv的一致
pvc的accessModes和pv的不一致

建立掛載pvc之後一直處於pending狀態

1.pvc沒有建立成功或者被建立
2.pvc和pod不在同一個anmespace

刪除pvc的時候需要先把正在使用pvc的deploy或者pod刪掉或吧使用的pvc刪掉,要不然會一直顯示delete不動

刪除pvc之後k8s會建立一個回收的pod----根據pv的回收策略回收,回收完了之後,pv的狀態就會變成可被繫結的狀態,也就是空閒狀態,其他的pvc匹配到這個pv就會和這個pv繫結