天天看點

K8S之持久卷(PV和PVC)

文章目錄

  • ​​一、概念​​
  • ​​`1.1.PersistentVolume(PV)`​​
  • ​​`1.2.PersistentVolumeClaim(PVC)`​​
  • ​​`1.3.PV通路模式AccessModes`​​
  • ​​`1.4.PV回收政策RECLAIM POLICY`​​
  • ​​`PV狀态STATUS`​​
  • ​​二、PV靜态供給​​
  • ​​`2.1.建立PV`​​
  • ​​`2.2.建立PVC`​​
  • ​​`2.3.Pod使用PVC`​​
  • ​​`2.4.申請的存儲空間是否為實際可用的存儲空間?`​​
  • ​​三、PV動态供給​​
  • ​​`3.1.概念`​​
  • ​​`3.2.流程圖`​​
  • ​​`3.3.部署外部插件(支援nfs)`​​
  • ​​`3.4.建立PVC`​​

一、概念

​1.1.PersistentVolume(PV)​

是叢集中由管理者配置的一段網絡存儲。 它是叢集中的資源,就像節點是叢集資源一樣。 生命周期獨立于使用PV的任何單個pod。

​1.2.PersistentVolumeClaim(PVC)​

是由使用者進行存儲的請求,類似pod。 Pod消耗節點資源,PVC消耗PV資源。可以請求特定的大小和通路模式(例如,可以一次讀/寫或多次隻讀)。

​1.3.PV通路模式AccessModes​

RWO - ReadWriteOnce     #單個Pod挂載并且可讀寫
ROX - ReadOnlyMany      #可以有多個Pod以隻讀方式挂載
RWX - ReadWriteMany     #可以有多個Pod以讀寫方式挂載      

​1.4.PV回收政策RECLAIM POLICY​

Retain      #人工回收,保留,預設選項
Recycle     #清除PV中的資料,相當于執行rm -rf /data/nfs/pv0001/*
Delete      #PV和與 PV 相連的後端存儲同時删除,相當于執行rm -rf /data/nfs/pv0001      

​PV狀态STATUS​

• Available(可用):表示可用狀态,還未被任何 PVC 綁定
• Bound(已綁定):表示 PV 已經被 PVC 綁定
• Released(已釋放):PVC 被删除,但是資源還未被叢集重新聲明
• Failed(失敗): 表示該 PV 的自動回收失敗      

二、PV靜态供給

​2.1.建立PV​

建立兩個PV,一個5G,一個10G

注意:/data/nfs/pv0001和/data/nfs/pv0002需提前建立

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv0001
spec:
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Recycle
  nfs:
    path: /data/nfs/pv0001
    server: 192.168.1.10

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv0002
spec:
  capacity:
    storage: 10Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Recycle
  nfs:
    path: /data/nfs/pv0002
    server: 192.168.1.10      

kubectl get pv

K8S之持久卷(PV和PVC)

​2.2.建立PVC​

根據​

​通路模式​

​​和​

​存儲空間​

​​去綁定對應的PV,始終確定綁定的PV大小大于等于PVC的大小

PVC與PV是一一對應的

先删除Pod再删除PVC

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi      

kubectl get pvc

K8S之持久卷(PV和PVC)

​2.3.Pod使用PVC​

實際是把NFS共享的/data/nfs/pv0001目錄綁定到容器的/usr/share/nginx/html目錄

spec:
  containers:
  - name: empty
    image: nginx
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 80
    volumeMounts:
      - name: data
        mountPath: /usr/share/nginx/html
  volumes:
  - name: data
    persistentVolumeClaim:
      claimName: my-pvc      

​2.4.申請的存儲空間是否為實際可用的存儲空間?​

不是。存儲空間字段storage不能限制實際存儲容量,隻作為一種比對标記,具體可用容量取決于後端網絡存儲(NFS、Ceph)。

就好比PV申請的存儲空間為5G,而後端存儲可用空間為100G,那麼對應的Pod實際可使用100G的空間

現在K8s已逐漸對部分存儲提供自動限制的支援

三、PV動态供給

​3.1.概念​

Dynamic Provisioning機制工作的核心在于StorageClass的API對象

StorageClass聲明存儲插件,用于自動建立PV

​3.2.流程圖​

K8S之持久卷(PV和PVC)

​3.3.部署外部插件(支援nfs)​

下載下傳位址:https://github.com/kubernetes-retired/external-storage/tree/master/nfs-client/deploy

K8S之持久卷(PV和PVC)
kubectl apply -f rbac.yaml      #授權通路apiserver      

vi deployment.yaml

修改鏡像為gmoney23/nfs-client-provisioner
填寫正确的NFS伺服器的位址和目錄      
K8S之持久卷(PV和PVC)
kubectl apply -f deployment.yaml      
K8S之持久卷(PV和PVC)
kubectl apply -f class.yaml     #建立存儲類      
K8S之持久卷(PV和PVC)

​3.4.建立PVC​

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  storageClassName: managed-nfs-storage
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 25Gi      

kubectl apply -f pvc.yaml

繼續閱讀