本文内容均来自个人笔记并重新梳理,如有错误欢迎指正!
如果对您有帮助,烦请点赞、关注、转发、订阅专栏!
专栏订阅入口
Linux 专栏 | Docker 专栏 | Kubernetes 专栏
往期精彩文章
【Docker】(全网首发)Kylin V10 下 MySQL 容器内存占用异常的解决方法
【Docker】(全网首发)Kylin V10 下 MySQL 容器内存占用异常的解决方法(续)
【Docker】MySQL 源码构建 Docker 镜像(基于 ARM 64 架构)
目录
一、基本介绍
二、资源清单(示例)
1、使用本地存储
2、使用 NFS 存储
3、使用 CSI 存储(如阿里云 NAS)
三、相关说明
1、状态类型(Status)
2、访问模式(AccessModes)
3、回收策略(persistentVolumeReclaimPolicy)
一、基本介绍
在 Kubernetes 中,PersistentVolume(持久化卷,PV)是一种与存储相关的资源对象,可以定义存储容量、访问模式、回收策略、存储插件等信息。PV 具有独立的生命周期,不会随着 Pod 的销毁被删除。PV 的生命周期包括配置、绑定、使用、保护、回收几个阶段。
???? PV 对象不属于任何命名空间!
二、工作原理
- 定义对象:静态模式下,管理员预先在集群中定义 PV 对象,指定其存储容量、访问模式、回收策略、存储插件等配置信息
- 创建对象:静态模式下,按照管理员预先定义好的资源清单创建 PV 对象;动态模式下,StorageClass 根据 PVC 的申请动态创建 PV 对象
- 绑定:当一个 PVC 对象创建后,Kubernetes 会寻找一个匹配的 PV 进行绑定,这个过程可以是立即的,也可以是延迟的
- 使用:PVC 对象与 PV 对象完成绑定后,Pod 就可以通过挂载 PVC 来访问持久化存储。Pod 的资源清单中会包含对 PVC 对象的引用,Kubernetes 负责将与 PVC 对象绑定的 PV 对象挂载到 Pod 的容器中
- 回收策略:PV 支持三种回收策略:Retain、Recycle、Delete。当 PVC 对象被销毁时,Kubernetes 会根据 PV 的回收策略来处理 PV 对象
三、资源清单(示例)
1、使用本地存储
- HostPath 方式
apiVersion: v1
kind: PersistentVolume
metadata:
name: demo-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Recycle / Retain / Delete # PV 回收策略
hostPath:
path: /data/nfs
- Local 方式
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,否则创建时会报错:
: 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: # 指定 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: /csi-driver
volumeHandle: existingVolumeName # 与PV 名称保持一致
readOnly: false
volumeAttributes:
server: "xxxx"
path: "/xxxx"
mountOptions:
- nolock,tcp,noresvport
- vers=3
四、相关说明
1、状态类型(Status)
PV 对象创建后,通常会存在以下几种状态:
- Available:可用,还未被 PVC 对象绑定
- Bound:已绑定,已经被 PVC 对象绑定
- Released:已释放,即 PVC 对象已被删除,但 PV 资源未被集群重新声明(与 Retain 回收方式相关)
- Failed:已失败,即 PV 对象回收失败
2、访问模式(AccessModes)
在 PV 对象的资源清单中,可以定义以下几种访问模式:
-
ReadWriteOnce:该模式为读写权限,只能被单个 Node 节点挂载
-
ReadOnlyMany:该模式为只读权限,可以被多个 Node 节点挂载
-
ReadWriteMany:该模式为读写权限,可以被多个 Node 节点挂载
3、回收策略(persistentVolumeReclaimPolicy)
在 PV 对象的资源清单中,可以定义以下几种回收策略:
- Recycle:循环策略,该策略允许保留 PV 对象,并可以再次被新创建的 PVC 对象绑定
- Retain:保留策略,该策略允许保留 PV 对象,但不可以再次被新创建的 PVC 对象绑定
- Delete:删除策略(默认),该策略不保留 PV 对象