【K8S】Kubernetes 中存储资源相关的API资源对象——PV与PVC

k8s之PV、PVC 关于k8s的存储卷(emptyDir、hostPath、NFS存储卷),pv/pvc 阅读详情

一、PV、PVC API 资源对象需求背景

  • 我们之前提到过在Pod中定义数据卷Volume的时候,使用的是 ConfigMap 或者 Secret 资源对象在相应的目录下进行挂载。这2种资源对象在相应的位置上以文件的形式存在,而且能够容纳的数据量有限。本地磁盘、NFS之类的持久化存储资源在集群中也需要有对应的 API 资源对象,因此在Kubernetes中就有了PersistentVolume的概念(简称PV)。
  • 我们当前可以使用的持久化存储设备是五花八门的,如本地磁盘、NFS、Ceph等,它们的容量、读写速率等也差别很大。假设我们在Pod 中去直接定义使用这些持久化设备,一方面会造成较大的资源浪费,另一方面也会显得相当麻烦。因为我们在使用某一类持久化设备时,我们只关心这些存储设备的类型、我们需要的容量大小。于是Kubernetes新增了 PersistentVolumeClaim 资源对象(简称PVC),用于明确我们在使用存储设备时的清单明细。
  • 因为PV 和 PVC 之间又不是一一对应的关系,Kubernetes 中又提出了使用 StorageClass 资源对象,用于 PV 与 PVC 资源对象之间的解耦;

二、使用 Yaml 定义 PV、PVC API 资源对象

2.1 在 Yaml 中定义 PV

我们在yaml 中定义 PV,可以简单的理解为是在编写这个PV 的规格说明书。其实定义一个好一个存储卷很简单,明确这个存储卷的容量、挂载路径、访问权限即可,我们在定义PV时也是这样。一个 PV 资源对象在Yaml 中定义的示例如下:

apiVersion: v1		#  资源对象的版本
kind: PersistentVolume		#  资源对象的版本
metadata:
  name: test-pv		#  该资源对象的名称

spec:
  storageClassName: test-storageClass
  accessModes:
  - ReadOnlyMany
  capacity:
    storage: 200Mi
  hostPath:
    path: /tmp/test-pv/

关键字段含义:

storageClassName: 与该PV进行对接的StorageClass 的名称;
accessModes: 定义对该存储设备的访问权限。有3个取值:

  • ReadWriteOnce: 该存储资源可读可写,但是只能被Pod挂载一次,被挂载过之后将不再会参与分配;
  • ReadOnlyMany: 该存储资源只读不可写,可以被任意节点上的Pod挂载多次;
  • ReadWriteMany: 该存储资源可读可写,可以被任意节点上的Pod挂载多次;

capacity.storage: 所代表的存储设备的容量
hostPath.path: 该存储卷的挂载路径

2.2 在 Yaml 中定义 PVC

PVC 资源对象的Yaml内容其实就是我们在使用存储卷的时候的需求清单,示例如下:

apiVersion: v1		# 资源对象版本
kind: PersistentVolumeClaim		# 资源对象类型
metadata:
  name: test-pvc	# 资源对象名称

spec:
  storageClassName: test-storageClass
  accessModes:
    - ReadOnlyMany
  resources:
    requests:
      storage: 100Mi

storageClassName: 跟PV对接时使用的StorageClass的名称;
accessModes:规定对该存储卷的访问权限;
resources.requests: 服务需要的存储卷的大小;

三、PV、PVC API 资源对象的使用

Kubernetes内置算法模块,会根据 PVC 需求和匹配的 storageClass,来分配最为合适的PV,从而最大限度的利用好利群内的存储资源。

3.1 创建PV、PVC 资源对象

使用以下命令创建PV、PVC 资源对象,并查看创建效果:

kubectl apply -f pv.yaml
# 查看创建 PV 资源对象的状态
kubectl get pv
kubectl apply -f pvc.yaml
# 查看创建 PVC 资源对象的状态
kubectl get pvc

3.2 PVC 资源对象的使用

下面使用 Yaml 文件定义了一个Pod,演示了如何在定义Pod 的时候使用我们之前已经定义好的PVC:

apiVersion: v1
kind: Pod
metadata:
  name: testPvc-pod

spec:
  volumes:
  - name: test-vol
    persistentVolumeClaim:
      claimName: test-pvc

  containers:
    - name: test-program
      image: nginx:alpine
      ports:
      - containerPort: 80
      volumeMounts:
      - name: test-vol
        mountPath: /data/test

上面的情况是在Pod 的本地磁盘上创建PV,但是在 Deployment 等资源对象创建的 Pod 会在集群的各个节点上漂移,导致Pod 上对应的服务的数据丢失。所以,我们在使用存储服务的时候一般是例如 NFS 之类的来使用磁盘存储服务,无论Pod 漂移到集群上的哪个节点,都能访问到相应的磁盘服务。

3.3 使用 PV 解决Pod在集群上的漂移

3.3.1 使用 NFS 定义 PV

因为Pod在集群上的漂移问题,首先得解决方案就是通过 NFS 服务来解决。我们定义一个NFS类型的PV,其Yaml 文件内容如下:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: test-nfs-pv

spec:
  storageClassName: nfs
  accessModes:		## 设置该 PV 的权限
    - ReadWriteMany
  capacity:		## 设置该 PV 容量大小
    storage: 2Gi

  nfs:
    path: /tmp/nfs/1g-pv		#设置在NFS 服务器上存储分配地址
    server: 192.168.10.208		# NFS 服务器地址

要保证集群中有NFS 服务,且NFS 服务的server地址、path设置正确,集群中的每个节点都安装了 NFS 服务的客户端。
但是对于一个大型的系统来说,手动的分配设置存储、编写PV,效率还是过于低下。Kubernetes 提供了使用 provisioner.

3.3.2 使用 Provisioner 管理存储

使用 Provisioner 的方式管理存储、创建PV 的方式实现了自动化,告别了手动管理。我们只需要通过 storageClass 关联要使用的 provisioner,再在我们的 PVC 内关联上相应的 storageClass,通过 kubectl apply 命令创建对应的资源对象。然后我们在创建 PVC 时,provisioner 就会根据我们的 PVC 创建相应的 PV。
示例 storageClass 如下:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: test-nfs-client

# 指定要使用的 provisioner
provisioner: k8s-sigs.io/nfs-subdir-external-provisioner 
parameters: # 提供 provisioner 在运行期间需要的参数
  archiveOnDelete: "false"

示例的 PVC 如下:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: test-nfs2-pvc

spec:
  storageClassName: test-nfs-client
  accessModes:
    - ReadWriteMany

  resources:
    requests:
      storage: 500Mi

然后,我们就不必再手动创建PV,只需要根据我们的资源需求写出 PVC ,在StorageClass 中指定 provisioner,provisioner 就会帮助我们创建对应的 PV。

二十二、PV和PVC PersistentVolume(PV)和Persistent Volume Claim(PVC)PV(持久卷)是对存储资源的抽象,将存储定义为一种容器应用可以使用的资源。PV由管理员创建和配置,它与存储提供商的具体实现直接相关,例如GlusterFS、iSCSI、RBD或GCE或AWS公有云提供的共享存储,通过插件式的机制进行管理,供应用访问和使用。除了EmptyDir类型的存储卷,PV的生命周期独立于使用它的Pod。PVC则是用户对存储资源的一个申请。 阅读详情

相关推荐

Android图形系统(三)系统篇:渲染/合成的底层原理浅析

众所周知,渲染工作是由GPU负责,那么在聊GPU之前首先得知道什么是“渲染”?我们来举个例子感受一下在系统中申请一块10*101、把图层背景这玩意染成绿的2、从左上(0,0)到右下(10,10)画一条宽度为1颜色为红色的直线3、以坐标点(5,5)为中心,画一个半径为3的实心圆,颜色要蓝色好了,接下来操作系统会把这些“绘图指令”同步给GPU去执行渲染任务图片来源:自己画的GPU完成渲染工作后,我们将会得到一个大小为10*10二维数组,数组中的每个元素都保存着坐标点的颜色信息、深度信息。

1358

Kubernetes 笔记(03)— API 对象定义、使用 yaml 声明 API 对象、pod 诞生原因及简介、使用 yaml 声明 pod、使用 kubctl 声明 pod、编写 yaml 技巧

因为Pod是对容器的“打包”,里面的容器是一个整体,总是能够一起调度、一起运行,绝不会出现分离的情况,而且Pod属于Kubernetes,可以在不触碰下层容器的情况下任意定制修改。Kubernetes让Pod去编排处理容器,然后把Pod作为应用调度部署的最小单位,Pod也因此成为了Kubernetes世界里的“原子”,基于Pod就可以构建出更多更复杂的业务形态了。

wohu1104的专栏 1243

【gridsample】地平线征程6芯片中gridsample算子的优化与部署实践

本文详细介绍了地平线征程6芯片中gridsample算子的优化与部署实践,重点探讨了PTQ和QAT量化方案在BEV感知任务中的应用。通过双线性插值优化、内存布局调整和混合精度配置等关键技术,显著提升了算子在自动驾驶场景下的性能和精度,为开发者提供了实用的部署指南和调优建议。

zero1的博客 1019

kubernetes资源对象存储类

kubernetes资源对象存储类、安全类

xujingcheng123的博客 751

auboi5 + d435i 使用easy handeye进行标定时,遇到相关问题记录。

解决办法:在easy_handeye默认的 calibrate.launch 文件中move group 的默认值为 "manipulator",但针对每个人的机械臂,这个值需要更改。以aubo_i5为例,需要将其改为"manipulator_i5",或者自己编写launch文件时,传入参数move group的值,便能顺利解决问题!easy_handeye_calibration_server 进程出现崩溃。

weixin_61025092的博客 958

大模型LoRA微调调参的实战技巧(持续更新)

本文主要介绍了大模型LoRA微调调参的实战技巧,希望对学习大语言模型的同学们有所帮助。 文章目录 1. 前言 2. 实战技巧

herosunly的博客 20万+

k8s常用命令和yaml

(1)、kubectl exec进入容器获取pod name: (1)、获取pod详细信息 (2)、获取Endpoint信息 (3)、查看pv信息 (4)、查看pvc信息 (1)、查看service详细信息 (1)、查看ipvs映射规则 2、同时创建pod和service 3、基本存储共享EmptyDir 4、基本存储共享HostPath 5、基本存储之NFS...

桂安俊@KylinOS 4602

152:vue+leaflet 判断一个点是否在一个电子围栏内

本文介绍了一个基于Vue+Leaflet的示例,演示如何判断点是否在电子围栏内。作者大剑师兰特(优快云知名博主)展示了使用polygon.getBounds().contains(latlng)方法检测点与多边形边界的关系。代码仅需80行,通过点击地图触发判断逻辑,结果显示提示信息。该技术可广泛应用于地理围栏、位置服务等场景,需要安装turf依赖。文章提供了完整源码和配置说明,适合GIS开发者学习参考。

大剑师兰特的GIS世界 756

k8s入门到实战(七)—— 回顾:使用yaml文件配置pv、pvc、configmap部署mysql服务

k8s从入门到实战篇章(第七篇)—— 实战回顾:使用yaml文件配置pv、pvc、configmap,创建mysql服务

一弓虽的博客 1213

Python爬虫实战:基于Playwright与异步技术的专利数据抓取系统

专利数据是企业技术创新、市场竞争分析和行业趋势预测的关键情报来源。然而,专利数据通常分散在各个国家的专利局网站,数据结构复杂,反爬机制严格,使得高效抓取成为技术挑战。本文将详细介绍如何构建一个基于最新Python技术的专利数据抓取系统,涵盖Selenium的现代化替代方案Playwright、异步编程、智能代理轮换等高级技术。

2201_76125261的博客 1562

LLC谐振变换器软启动,不只是“慢启动”,还是“智能启动”

LLC谐振变换器的软启动,不只是“慢慢来”,而是要在控制时序、限流、响应速度之间精妙权衡。而数字控制,特别是用查表法或混合信号法,为实现真正的“最佳轨迹”提供了可能。✨小Tips:如果你的系统成本敏感,选择查表法准没错;如果你的设计目标是超高速响应,那就上混合信号的高配方案!

weixin_43199439的博客 691

K8S中的API对象

Master Node中的组件。Worker Node中的组件。

woshihlf的博客 1216

仅使用 Python 创建的 Web 应用程序(前端版本)第03章Streamlit-多页面

接下来,我们将解释多页面切换。Streamlit 没有“多页面”或“页面路由”等功能。另一方面,通过根据用户动作切换要执行的功能,可以使其看起来好像存在“多个页面”。注意:我认为它类似于 SinglePageApplication (SPA)。然而,根据 React、Vue 等中使用的 URL 路径来更改页面的路由很困难。还有一个用于获取查询参数的实验性 API,但如果您确实需要这种功能,我认为认真尝试编写 React 或 Vue 是个好主意。我们来看一个通过按下按钮来切换页面的示例,如下所示。

xianyinsuifeng的博客 1329

【K8S】何为PV与PVC,如何创建,PVC如何绑定到特定的PV上?

PV与PVC的简介 k8s提供了emptyDir,hostPath,rbd,cephfs等存储方式供容器使用,(关于常用的emptyDir与hostPath的简介与区别,可以参考这篇文章【K8S】Volume类型-EmptyDir与HostPath的区别)。 不过这些存储方式都有一个缺点:开发人员必须得知指定存储的相关配置信息,才能使用存储。例如要使用cephfs,Pod的配置信息就必须指明c...

阳阳的博客 1万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

k8s中pv和pvc如何理解

k8s中pv和pvc如何理解欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎...

xiongmaojames的博客 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

K8S PV 与 PVC 快速开始、入门实战

PV 是集群中由管理员配置的一段网络存储,它是一个集群级别的资源,就像集群中的一块可用磁盘空间,与具体的 Pod 无关。可以将 PV 看作是物理存储在 K8S 中的抽象表示。PVC 是用户对存储资源的请求,它消耗 PV 提供的资源。可以理解为 Pod 需要使用存储时,向集群提出的一个 “申请”,描述了应用程序对存储的需求,如存储容量、访问模式等。PVC 是namespace级别的资源,即它只能在特定的命名空间内使用。

matrixlzp的博客 2780

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

k8s的PV/PVC详解以及使用范例

pv/pvc是什么,和csi是什么关系, 介绍hostpath.csi.k8s.io插件,还有pv/pvc的完整使用范例

2814

持久化存储PV与PVC

持久化存储PV与PVCPV资源回收访问模式 PV与PVC PV: 持久卷(PersistentVolume)简称PV,是集群中的一块存储,可以由管理员事先供应。 可以配置NFS、Ceph等常用存储配置,相对于volumes,提供了更多的功能,如生命周期管理、大小的限制。 PV 卷的供应有两种方式:静态供应或动态供应。 静态: 集群管理员预先创建许多PV,在PV的定义中能够体现存储资源的特性。 动态: 集群管理员无须预先创建PV,而是通过StorageClass的设置对后端存储资源进行描述,标记存储的类型和特

皮皮的博客 4827

Kubernetes(K8s)详解

Kubernetes(K8S)是一个开源的容器编排引擎,用于自动化部署、扩缩和管理容器化应用。其核心架构包括Master Node(含API Server、Scheduler、Controller Manager等组件)和Worker Node(含Kubelet、Kube-Proxy等)。K8S提供核心特性如服务发现、存储编排、自我修复等,支持通过kubectl命令行工具进行资源管理。Namespace用于隔离资源,Pod是最小部署单元,而Deployment则管理Pod的多副本和自愈能力。通过YAML文件

Java资料站 2011

K8S中高级存储之PV和PVC

底层实际存储的类型,Kubernetes 支持多种存储类型,如 NFS、iSCSI、glusterFS 等,每种类型的配置都会有所不同。

杜小帅的博客 1915

k8s 存储(PV、PVC、SC、本地存储、NFS)

本地存储类型的PV是Kubernetes中一种比较特殊的持久化存储,它允许将节点上的本地磁盘或目录用作PV。与其他PV类型(例如NFS、Ceph或云存储)不同,本地存储类型的PV直接使用节点上的存储资源,因此具有更低的延迟和更高的性能。要想使用NFS的SC,还需要安装一个NFS provisioner,provisioner里会定义NFS相关的信息(服务器IP、共享目录等)NFS作为常用的网络文件系统,在多机之间共享文件的场景下用途广泛,毕竟NFS配置方便,而且稳定可靠。下面创建一个Pod,来使用PVC。

巧克力人生的博客 2034

九、k8s pv与pvc持久化存储(静态与动态)

PersistenVolume(PV):对存储资源创建和使用的抽象,使得存储作为集群中的资源管理 PV分为静态和动态,动态能够自动创建PV • PersistentVolumeClaim(PVC):让用户不需要关心具体的Volume实现细节 容器与PV、PVC之间的关系,可以如下图所示: 总的来说,PV是提供者,PVC是消费者,消费的过程就是绑定 PersistentVolume 静态绑定 根据...

机器重启员的博客 1万+

【Kubernetes】k8s基础八股总结

k8s是google开源的,用于管理大型集群容器的系统。

m0_74282926的博客 1761

《Kubernetes存储篇:PV、PVC、StorageClass详解》

《Kubernetes存储篇:PV、PVC、StorageClass详解》

东城绝神 1176

Kubernetes之PV与PVC

Kubernetes之PV与PVC

Harry的博客 1386

Kubernetes PV、PVC、StorageClass 这些到底在说啥?

所以,大多数情况下,持久化 Volume 的实现,往往依赖于一个远程存储服务,比如:远程文件存储(比如,NFS、GlusterFS)、远程块存储(比如,公有云提供的远程磁盘)等等。 而 Kubernetes 需要做的工作,就是使用这些存储服务,来为容器准备一个持久化的宿主机目录,以供将来进行绑定挂载时使用。而所谓“持久化”,指的是容器在这个目录里写入的文件,都会保存在远程存储中,从而使得这个目录具备了“持久性”。 这个准备“持久化”宿主机目录的过程,我们可以形象地称为“两阶段处理”。 接下来,我通过一

小楼一夜听春雨,深巷明朝卖杏花 2251
上一篇: 【Maven】推荐几个靠谱的Maven镜像源
下一篇: 【K8S】Kubernetes 中有状态的资源对象——StatefulSet
伏游
博客等级 码龄9年 369粉丝 37原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值