文章目錄
- 一、概念
- `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)
1.1.PersistentVolume(PV)
是叢集中由管理者配置的一段網絡存儲。 它是叢集中的資源,就像節點是叢集資源一樣。 生命周期獨立于使用PV的任何單個pod。
1.2.PersistentVolumeClaim(PVC)
1.2.PersistentVolumeClaim(PVC)
是由使用者進行存儲的請求,類似pod。 Pod消耗節點資源,PVC消耗PV資源。可以請求特定的大小和通路模式(例如,可以一次讀/寫或多次隻讀)。
1.3.PV通路模式AccessModes
1.3.PV通路模式AccessModes
RWO - ReadWriteOnce #單個Pod挂載并且可讀寫
ROX - ReadOnlyMany #可以有多個Pod以隻讀方式挂載
RWX - ReadWriteMany #可以有多個Pod以讀寫方式挂載
1.4.PV回收政策RECLAIM POLICY
1.4.PV回收政策RECLAIM POLICY
Retain #人工回收,保留,預設選項
Recycle #清除PV中的資料,相當于執行rm -rf /data/nfs/pv0001/*
Delete #PV和與 PV 相連的後端存儲同時删除,相當于執行rm -rf /data/nfs/pv0001
PV狀态STATUS
PV狀态STATUS
• Available(可用):表示可用狀态,還未被任何 PVC 綁定
• Bound(已綁定):表示 PV 已經被 PVC 綁定
• Released(已釋放):PVC 被删除,但是資源還未被叢集重新聲明
• Failed(失敗): 表示該 PV 的自動回收失敗
二、PV靜态供給
2.1.建立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

2.2.建立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
2.3.Pod使用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.申請的存儲空間是否為實際可用的存儲空間?
2.4.申請的存儲空間是否為實際可用的存儲空間?
不是。存儲空間字段storage不能限制實際存儲容量,隻作為一種比對标記,具體可用容量取決于後端網絡存儲(NFS、Ceph)。
就好比PV申請的存儲空間為5G,而後端存儲可用空間為100G,那麼對應的Pod實際可使用100G的空間
現在K8s已逐漸對部分存儲提供自動限制的支援
三、PV動态供給
3.1.概念
3.1.概念
Dynamic Provisioning機制工作的核心在于StorageClass的API對象
StorageClass聲明存儲插件,用于自動建立PV
3.2.流程圖
3.2.流程圖
3.3.部署外部插件(支援nfs)
3.3.部署外部插件(支援nfs)
下載下傳位址:https://github.com/kubernetes-retired/external-storage/tree/master/nfs-client/deploy
kubectl apply -f rbac.yaml #授權通路apiserver
vi deployment.yaml
修改鏡像為gmoney23/nfs-client-provisioner
填寫正确的NFS伺服器的位址和目錄
kubectl apply -f deployment.yaml
kubectl apply -f class.yaml #建立存儲類
3.4.建立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