PV与PVC

PV 与 PVC 核心概念与使用逻辑

在 Kubernetes 中,PV(Persistent Volume,持久化卷)和 PVC(Persistent Volume Claim,持久化卷声明)是实现 “存储资源与应用解耦” 的核心组件:PV 是集群管理员提前创建的 “存储资源实体”,PVC 是用户对存储资源的 “申请请求”,二者通过匹配机制绑定,让应用无需关注底层存储细节。

一、核心概念与关系

维度PV(Persistent Volume)PVC(Persistent Volume Claim)
角色定位集群级别的 “存储资源池”,由管理员创建,独立于 Pod 生命周期。命名空间级别的 “存储申请单”,由用户(或运维)在部署应用时创建,与 Pod 关联。
核心属性包含存储类型(如 NFS、Ceph、AWS EBS)、容量(capacity)、访问模式(accessModes)、存储类(storageClassName)等,定义 “有什么存储”。包含申请容量、访问模式、存储类等,定义 “需要什么存储”,需与 PV 属性匹配才能绑定。
生命周期由管理员手动创建 / 删除,或通过 StorageClass 动态创建,生命周期不依赖 Pod。与 Pod 关联:Pod 删除后 PVC 可保留(数据不丢),PVC 删除后绑定的 PV 会按策略回收(如保留、删除、重新初始化)。
绑定逻辑被动等待 PVC 申请,同一时间只能绑定一个 PVC。主动申请 PV,绑定后独占 PV 资源,Pod 通过volumeMounts挂载 PVC 即可使用存储。

二、关键属性:访问模式(accessModes)

访问模式定义了 PV 的读写权限,是 PVC 与 PV 匹配的核心条件之一,支持三种类型(需底层存储支持):

  • ReadWriteOnce(RWO):仅允许单个节点以读写方式挂载,适用于 “单 Pod 独占存储” 场景(如数据库 Pod)。
  • ReadOnlyMany(ROX):允许多个节点以只读方式挂载,适用于 “多 Pod 共享只读数据” 场景(如静态资源服务)。
  • ReadWriteMany(RWX):允许多个节点以读写方式挂载,适用于 “多 Pod 共享读写数据” 场景(如分布式文件系统 NFS、CephFS)。

三、使用流程(以手动创建 PV+PVC 为例)

1. 步骤 1:管理员创建 PV(定义存储资源)

以 NFS 类型 PV 为例,创建pv-nfs.yaml配置文件:

yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-nfs-10g  # PV名称
spec:
  capacity:
    storage: 10Gi  # PV容量
  accessModes:
    - ReadWriteOnce  # 访问模式:单节点读写
  storageClassName: "nfs-storage"  # 存储类名称(需提前创建)
  nfs:  # 底层存储类型为NFS
    server: 192.168.1.100  # NFS服务器IP
    path: "/data/k8s/nfs/pv1"  # NFS共享目录
  persistentVolumeReclaimPolicy: Retain  # 回收策略:PVC删除后PV保留数据,需手动清理

执行命令创建 PV:kubectl apply -f pv-nfs.yaml

2. 步骤 2:用户创建 PVC(申请存储资源)

创建pvc-nfs.yaml,申请与上述 PV 匹配的存储:

yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-nfs-5g  # PVC名称
  namespace: default  # 所属命名空间
spec:
  accessModes:
    - ReadWriteOnce  # 与PV访问模式一致
  storageClassName: "nfs-storage"  # 与PV存储类一致
  resources:
    requests:
      storage: 5Gi  # 申请容量≤PV容量(10Gi)

执行命令创建 PVC:kubectl apply -f pvc-nfs.yaml

3. 步骤 3:Pod 挂载 PVC 使用存储

在 Pod 配置中通过volumes关联 PVC,再通过volumeMounts挂载到容器目录:

yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod-with-pvc
spec:
  containers:
  - name: nginx
    image: nginx:alpine
    volumeMounts:
    - name: data-volume  # 与下方volumes.name一致
      mountPath: /usr/share/nginx/html  # 容器内挂载路径
  volumes:
  - name: data-volume
    persistentVolumeClaim:
      claimName: pvc-nfs-5g  # 关联的PVC名称

四、常见问题与解决方案

问题现象核心原因解决措施
PVC 一直处于 Pending 状态无匹配的 PV(如容量不足、访问模式不匹配、存储类不一致)1. 执行kubectl describe pvc <pvc-name>查看具体原因;2. 调整 PVC 申请参数,或创建符合条件的 PV
Pod 挂载 PVC 失败(Error 状态)PV 底层存储不可用(如 NFS 服务器宕机、Ceph 集群故障)1. 检查底层存储服务状态;2. 执行kubectl describe pod <pod-name>查看挂载错误日志
PVC 删除后数据丢失PV 的回收策略为 Delete(删除 PVC 时自动删除 PV 及底层存储)1. 创建 PV 时将persistentVolumeReclaimPolicy设为 Retain(保留数据);2. 生产环境优先使用 Retain 策略
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值