当前位置: 首页 > news >正文

动态生成 PV 的机制:使用 NFS-Client Provisione

文章目录

        • 什么是 NFS-Client Provisioner?
        • 工作原理
        • 示例:部署 NFS-Client Provisioner 并动态创建 PV
          • 步骤 1: 部署 NFS-Client Provisioner
          • 步骤 2: 使用 PVC 请求存储
          • 步骤 3: 使用动态创建的 PV

在 Kubernetes 中,持久卷用于存储数据。然而,手动管理 PV 可能会变得繁琐,尤其是在需要频繁创建和销毁应用的场景下。为了解决这个问题,Kubernetes 提供了动态卷供应的功能,通过 StorageClass 和相应的 provisioner 来实现自动化PV的创建。本文将介绍如何使用 NFS-Client Provisioner 实现这一功能,并给出一个完整的配置示例。

什么是 NFS-Client Provisioner?

NFS-Client Provisioner 是一个 Kubernetes 动态卷供应器,它允许 Kubernetes 集群根据 PersistentVolumeClaim (PVC) 自动创建 PersistentVolume (PV),并将其绑定到请求的 PVC 上。这个过程无需管理员手动干预,大大简化了存储管理的复杂性。

工作原理

当用户在一个 PersistentVolumeClaim 中请求存储时,如果这个 PVC 指定了定义的 StorageClass,Kubernetes 就会触发 NFS-Client Provisioner 根据请求动态创建一个 PV。具体步骤如下:

  • 接收请求:Kubernetes API Server 接收到新的 PVC 请求。
  • 检查 StorageClass:系统识别出 PVC 所属的 StorageClass 并确定对应的 provisioner。
  • 调用 Provisioner:Kubernetes 调用指定的 provisioner(这里是 NFS-Client Provisioner)来处理请求。
  • 创建目录:NFS-Client Provisioner 在 NFS 服务器上的预设目录下为新的 PV 创建一个子目录。
  • 生成 PV:Provisioner 基于请求的大小和其他参数生成一个新的 PV 对象,并将其绑定到原始的 PVC 请求上。
  • 完成绑定:一旦 PV 被创建并成功绑定到 PVC,Pod 可以开始使用这个新创建的持久卷了。
示例:部署 NFS-Client Provisioner 并动态创建 PV

下面我们将演示如何在一个 Kubernetes 集群中部署 NFS-Client Provisioner,并使用它来动态创建 PV。假设我们有一个运行中的 NFS 服务器,其地址为 192.168.1.100,共享目录为 /exported/path

步骤 1: 部署 NFS-Client Provisioner

首先,我们需要部署 NFS-Client Provisioner 到 Kubernetes 集群中。这里我们直接使用 YAML 文件来安装,并将 StorageClass 的定义合并到 Deployment 配置文件中:

apiVersion: apps/v1
kind: Deployment
metadata:name: nfs-client-provisioner
spec:replicas: 1selector:matchLabels:app: nfs-client-provisionertemplate:metadata:labels:app: nfs-client-provisionerspec:containers:- name: nfs-client-provisionerimage: quay.io/external_storage/nfs-client-provisioner:latestvolumeMounts:- name: nfs-client-rootmountPath: /persistentvolumesenv:- name: PROVISIONER_NAMEvalue: "example.com/nfs"- name: NFS_SERVERvalue: "192.168.1.100"- name: NFS_PATHvalue: "/exported/path"volumes:- name: nfs-client-rootnfs:server: 192.168.1.100path: /exported/path
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: managed-nfs-storage
provisioner: example.com/nfs # 必须与Provisioner容器环境变量PROVISIONER_NAME的值匹配
parameters:archiveOnDelete: "false" # 删除PVC时是否归档数据
步骤 2: 使用 PVC 请求存储

接下来,我们可以创建一个 PersistentVolumeClaim (PVC) 来请求存储。以下是一个请求 1Gi 存储的例子:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: test-claim
spec:accessModes:- ReadWriteManyresources:requests:storage: 1GistorageClassName: managed-nfs-storage # 指定使用上面定义的StorageClass

一旦这个 PVC 被提交到 Kubernetes 集群,NFS-Client Provisioner 就会自动在 NFS 服务器上的 /exported/path 目录下创建一个新的子目录,并生成相应的 PersistentVolume 对象与之关联。

步骤 3: 使用动态创建的 PV

最后,我们可以创建一个简单的 Pod 来使用这个动态创建的 PV:

apiVersion: v1
kind: Pod
metadata:name: test-pod
spec:containers:- name: test-containerimage: nginxvolumeMounts:- name: nfs-persistent-storagemountPath: "/var/www/html"volumes:- name: nfs-persistent-storagepersistentVolumeClaim:claimName: test-claim

这样,Pod 就能够利用由 NFS-Client Provisioner 动态提供的持久卷了。

http://www.xdnf.cn/news/937585.html

相关文章:

  • 深入解析Golang反射机制与高效文件操作实践
  • TCP相关问题 第一篇
  • Windows权限提升篇数据库篇MYSQLMSSQLORACLE自动化项目
  • 管理数据洪流:自动化处理与归档每日数据文件的策略与实践
  • BOM(Browser Object Model)核心对象手册
  • CNN核心机制深度解析:卷积池化原理 PyTorch实现经典网络
  • MSYS2 环境配置与 Python 项目依赖管理笔记
  • Z-FOLD: A Frustratingly Easy Post-Training Quantization Scheme for LLMs
  • MS39531N 是一款正弦驱动的三相无感直流电机驱动器,具有最小振动和高效率的特点
  • 深入理解 Java 的反射、注解与动态代理
  • 基于Python学习《Head First设计模式》第十章 状态模式
  • JavaScript数组扁平化(Array Flattening)全解析:从基础到进阶的9种实现方式及深度对比
  • C++.OpenGL (17/64)深度测试(Depth Testing)
  • Python Wheel 打包基本原理详解
  • LangChain工具集成实战:构建智能问答系统完整指南
  • RoboDK 自定义机器人
  • 当前市场环境下,软件行业的突围之道:技术演进与商业模式重构
  • 工厂方法模式和抽象工厂方法模式的battle
  • 135. 分发糖果
  • 【P2P】直播网络拓扑及编码模式
  • 【2025年6月8日】Claude 4 国内使用全攻略
  • 【优选算法】模拟 问题算法
  • CompletableFuture+线程池使用案列
  • 直观地理解程序的堆和栈
  • Go 语言中的内置运算符
  • LLMs之Structured Output:vLLM 结构化输出指南—从约束生成到自动解析与高效实现
  • 算法工程师认知水平要求总结
  • (javaEE)网络原理-初识 局域网和广域网 ip地址和端口号 协议 五元组 协议分层 OSI七层模型 网络数据通信的基本流程
  • (二)原型模式
  • AI短视频创富营