以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!
如果对您有帮助,烦请点赞、关注、转发!如果您有其他想要了解的,欢迎私信联系我~
基本介绍
在 Kubernetes 中,PersistentVolume(持久化卷,PV)是一种与存储相关的资源对象,可以定义存储容量、访问模式、回收策略、存储插件等信息。PV 具有独立的生命周期,不会随着 Pod 的销毁被删除。PV 的生命周期包括配置、绑定、使用、保护、回收几个阶段。
🔔 PV 对象不属于任何命名空间!
工作原理
资源清单(示例)
1、使用本地存储
apiVersion: v1
kind: PersistentVolume
metadata:
name: demo-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Recycle / Retain / Delete # PV 回收策略
hostPath:
path: /data/nfs
apiVersion: v1
kind: PersistentVolume
metadata:
name: demo-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Recycle / Retain / Delete # PV 回收策略
local:
path: /data/nfs
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: xxxx
operator: In
values:
- xxxx
🔔 Local 方式必须要添加 nodeAffinity,否则创建时会报错:
spec.nodeAffinity: Required value: Local volume requires node affinity
2、使用 NFS 存储
apiVersion: v1
kind: PersistentVolume
metadata:
name: demo-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Recycle / Retain / Delete # PV 回收策略
nfs:
server: xx.xx.xx.xx # 指定 NFS 服务器地址
path: /data/nfs # 指定 NFS 服务器目录
3、使用 CSI 存储(如阿里云 NAS)
apiVersion: v1
kind: PersistentVolume
metadata:
name: demo-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Recycle / Retain / Delete # PV 回收策略
csi:
driver: com.example.team/csi-driver
volumeHandle: existingVolumeName # 与PV 名称保持一致
readOnly: false
volumeAttributes:
server: "xxxx"
path: "/xxxx"
mountOptions:
- nolock,tcp,noresvport
- vers=3
1、状态类型
PV 对象创建后,通常会存在以下几种状态:
2、访问模式(AccessModes)
在 PV 对象的资源清单中,可以定义以下几种访问模式:
3、回收策略(persistentVolumeReclaimPolicy)
在 PV 对象的资源清单中,可以定义以下几种回收策略: