认识
一、认识
在 Kubernetes
中,PersistentVolume (PV)
是一种集群级别的存储资源,它提供了一种持久化存储的机制,独立于 Pod
的生命周期。PV
的主要目的是在集群中管理存储卷,并为用户的应用程序提供持久存储支持。管理员预先创建 PV
,用户通过 PVC
使用。也可以使用 StorageClass
动态创建 PV
,PVC
触发此过程。
1.1 核心概念
1. PersistentVolume (PV)
: PV
是一种存储资源,类似于集群中的节点资源,管理员可以预先配置它,也可以动态创建。它描述存储的具体细节(如 NFS、iSCSI、云存储等)。
2. PersistentVolumeClaim (PVC)
: PVC
是用户的请求,它描述了对存储的需求(如大小、访问模式)。PVC
通过绑定到 PV
来使用存储资源。
3. 存储类 (StorageClass)
: StorageClass
定义了动态创建 PV
的规则,例如使用哪种存储后端、参数设置等。
1.2 存储类型
-
HostPath
: 将节点上的目录挂载为存储卷(仅限单节点开发或测试)。 -
NFS
: 使用网络文件系统。 -
iSCSI
: 基于iSCSI
协议的块存储。 -
Cloud Storage
: 如AWS EBS
、Google Persistent Disk
、Azure Disk
等。
1.3 访问模式
描述 Pod
如何访问存储:
-
ReadWriteOnce (RWO)
: 单个节点可读写。 -
ReadOnlyMany (ROX)
: 多个节点只读。 -
ReadWriteMany (RWX)
: 多个节点可读写。
1.4 回收策略
卷回收策略 (Reclaim Policy
): 定义 PV
在释放后的行为
-
Retain
: PV 保留,需手动清理数据。 -
Recycle
: 重新格式化卷。 -
Delete
: 删除底层存储资源。
1.5 工作流程
-
创建
PV
: 管理员创建一个PV
,或者使用StorageClass
动态创建。 -
请求
PVC
: 用户提交一个PVC
,声明存储需求。 -
绑定:
Kubernetes
自动将PVC
绑定到合适的PV
。 -
使用:
Pod
使用PVC
挂载存储。 -
释放: 当
PVC
被删除时,PV
根据回收策略执行相应操作。
二、语法
2.1 静态 PV 和 PVC
# PersistentVolume
apiVersion: v1
kind: PersistentVolume
metadata:
name: example-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
hostPath:
path: "/mnt/data"
# PersistentVolumeClaim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: example-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 500Mi
2.2 动态 PV 创建(使用 StorageClass)
# StorageClass
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: example-storageclass
provisioner: kubernetes.io/aws-ebs
# PersistentVolumeClaim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: dynamic-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: example-storageclass