跳到主要内容

认识

2024年08月30日
柏拉文
越努力,越幸运

一、认识


Kubernetes 中,PersistentVolume (PV) 是一种集群级别的存储资源,它提供了一种持久化存储的机制,独立于 Pod 的生命周期。PV 的主要目的是在集群中管理存储卷,并为用户的应用程序提供持久存储支持。管理员预先创建 PV,用户通过 PVC 使用。也可以使用 StorageClass 动态创建 PVPVC 触发此过程。

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 EBSGoogle Persistent DiskAzure Disk 等。

1.3 访问模式

描述 Pod 如何访问存储:

  • ReadWriteOnce (RWO): 单个节点可读写。

  • ReadOnlyMany (ROX): 多个节点只读。

  • ReadWriteMany (RWX): 多个节点可读写。

1.4 回收策略

卷回收策略 (Reclaim Policy): 定义 PV 在释放后的行为

  • Retain: PV 保留,需手动清理数据。

  • Recycle: 重新格式化卷。

  • Delete: 删除底层存储资源。

1.5 工作流程

  1. 创建 PV: 管理员创建一个 PV,或者使用 StorageClass 动态创建。

  2. 请求 PVC: 用户提交一个 PVC,声明存储需求。

  3. 绑定: Kubernetes 自动将 PVC 绑定到合适的 PV

  4. 使用: Pod 使用 PVC 挂载存储。

  5. 释放: 当 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