k8s按需创建 PV和创建与使用 PVC

在 Kubernetes 中,PersistentVolume(PV)和 PersistentVolumeClaim(PVC)用于管理存储资源。PV 是集群中的存储资源,而 PVC 是 Pod 请求 PV 的方式。按需创建 PV 通常使用 StorageClass 实现动态存储分配,PVC 通过声明请求所需的存储量与访问模式来绑定相应的 PV。以下是按需创建 PV 和使用 PVC 的具体步骤。

1. 按需创建 PV(使用 StorageClass)

StorageClass 用于定义动态存储分配的策略,允许 Kubernetes 自动创建 PV,而无需手动预先配置。

创建 StorageClass

首先定义一个 StorageClass 资源,指定存储类型和配置参数。

yaml 复制代码
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: standard
provisioner: kubernetes.io/aws-ebs  # 选择适合您的云提供商或存储类型
parameters:
  type: gp2
reclaimPolicy: Delete  # PV 被释放后会删除存储(也可设置为 Retain,保留数据)
volumeBindingMode: WaitForFirstConsumer

2. 创建 PVC 以请求 PV

PersistentVolumeClaim 是 Pod 请求存储资源的声明。配置 PVC 时指定需要的存储大小和访问模式,Kubernetes 会使用指定的 StorageClass 动态创建匹配的 PV 并绑定到该 PVC。

PVC 配置示例

以下示例中,PVC 请求 5Gi 的存储,并使用之前创建的 StorageClassstandard)。

yaml 复制代码
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce  # 设置访问模式,可选 ReadOnlyMany、ReadWriteMany 等
  storageClassName: standard  # 指定使用的 StorageClass
  resources:
    requests:
      storage: 5Gi

当这个 PVC 申请存储时,Kubernetes 会根据 StorageClass 配置动态创建一个 PV 并绑定到 PVC。

3. 在 Pod 中使用 PVC

在 Pod 配置中引用 PVC 以挂载存储卷,从而使应用可以使用持久存储。

yaml 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: nginx
    volumeMounts:
    - mountPath: "/usr/share/nginx/html"
      name: my-storage
  volumes:
  - name: my-storage
    persistentVolumeClaim:
      claimName: my-pvc

各字段解析

  • volumeMounts:指定容器内部的挂载路径,此路径对应于卷绑定的位置。
  • volumes:引用 PVC 以将持久卷挂载到容器中。

验证

  1. 创建 StorageClass、PVC 和 Pod :使用 kubectl apply -f 命令应用所有配置文件。
  2. 检查 PVC 状态 :运行 kubectl get pvc my-pvc,查看 PVC 是否已绑定(Bound 状态)。
  3. 检查 Pod 挂载 :运行 kubectl describe pod my-pod,确认卷已挂载到指定路径。

注意事项

  • reclaimPolicy :定义 PV 释放后的处理方式,Delete 表示删除存储资源,而 Retain 表示保留。
  • volumeBindingModeWaitForFirstConsumer 表示 PV 会在 Pod 请求时创建,适合多节点调度环境。
相关推荐
高旭博16 分钟前
7. kubernetes资源——service服务
云原生·容器·kubernetes
斯普信专业组1 小时前
Docker 常用命令与时区配置指南
docker·容器·eureka
熊文豪12 小时前
openEuler 云原生实战:部署高性能 Redis 集群与压测分析
数据库·redis·云原生·openeuler
阿里云云原生13 小时前
阿里云微服务引擎 MSE 及 API 网关 2025 年 10 月产品动态
阿里云·微服务·云原生·云计算
Tadas-Gao14 小时前
MySQL存储架构解析:从数据无序到索引艺术的演进
数据库·分布式·mysql·微服务·云原生·架构
CV_J14 小时前
编写微服务api
微服务·云原生·架构
Qayrup15 小时前
docker 搭建私有仓库,推送并拉取
运维·docker·容器
黑黍17 小时前
如何在k8s中配置并使用nvidia显卡
云原生·容器·kubernetes
冷血~多好18 小时前
使用docker部署elk,实现日志追踪
elk·docker·容器
会飞的小蛮猪18 小时前
SkyWalking运维之路(Java探针接入)
java·运维·经验分享·容器·skywalking