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 分钟前
k8s ssl 漏洞修复
容器·kubernetes·ssl
ITPUB-微风35 分钟前
云原生监控体系建设:Kubernetes架构下的全面监控策略
云原生·架构·kubernetes
hjnjmjkj40 分钟前
基于windows的docker-desktop安装kubenetes以及dashboard
docker·容器·kubernetes
Libby博仙1 小时前
docker 改了镜像源为阿里云,还是下载失败
阿里云·docker·容器
钗头风2 小时前
3.Docker常用命令
运维·docker·容器
ITPUB-微风3 小时前
网易严选DevOps实践:从传统到云原生的演进
运维·云原生·devops
桂月二二3 小时前
基于eBPF的全栈可观测性系统:重新定义云原生环境诊断范式
云原生
ITPUB-微风5 小时前
云原生数据抽象与弹性加速:Fluid开源系统的技术解析
云原生·开源
爬山算法5 小时前
Zookeeper(58)如何在Zookeeper中实现分布式锁?
分布式·zookeeper·云原生
圣心5 小时前
Ollama Docker 镜像部署
运维·docker·容器