K8S中高级存储之PV和PVC
高级存储
PV和PVC
由于kubernetes支持的存储系统有很多,要求客户全都掌握,显然不现实。为了能够屏蔽底层存储实现的细节,方便用户使用, kubernetes引入PV和PVC两种资源对象。
-
PV(Persistent Volume)
-
PV是Kubernetes中的一个API对象,它代表集群中的一块存储,这块存储已经预先按照某种方式设置好了,并且可以被多个用户使用。PV是集群资源,由Kubernetes管理员预先配置,它们不会因Pod的终止而消失,因此被称为“持久化”。PV可以采用多种形式,例如本地存储、网络附加存储(NAS)、云存储服务等。
-
-
PVC(Persistent Volume Claim)
-
PVC是用户对存储的请求,它允许用户以声明式的方式请求存储资源,而无需关心存储的具体实现细节。用户定义所需的存储容量、访问模式和存储类别(如果需要),然后提交PVC请求。
-

PV(Persistent Volume)
-
PV(Persistent Volume)在Kubernetes中指的是持久化卷,它是一种存储抽象的概念,代表了集群中的一块存储,这可以是本地磁盘、网络附加存储(NAS)、或者云存储等。PV与底层存储的具体实现细节相解耦,使得Kubernetes管理员可以灵活地管理存储资源。
PV的主要特点包括
-
独立性:PV独立于Pod存在,即使使用PV的Pod被删除,PV中的数据也不会丢失。
-
持久性:PV在设计上用于数据的持久化存储,它们在Kubernetes集群中是长寿命的。
-
可配置性:Kubernetes管理员可以配置PV的大小、访问模式(如ReadWriteOnce、ReadOnlyMany、ReadWriteMany)以及存储类别(StorageClass)。
-
可重用性:PV一旦被创建,可以被多个Pod重用,只要它们的访问模式和存储需求相匹配。
-
动态供应:通过StorageClass资源,Kubernetes可以自动创建PV以满足PVC的请求,这个过程称为动态存储供应。
PV的生命周期
-
创建:Kubernetes管理员根据集群的存储需求预先创建PV资源。
-
绑定:当用户提交PVC(Persistent Volume Claim)请求时,Kubernetes会尝试找到一个匹配的PV进行绑定。
-
使用:绑定成功后,PV可以被Pod通过PVC访问和使用。
-
回收:当PVC被删除时,PV可以被释放并根据回收策略进行清理,以便再次使用或保持其数据。
PV关键配置参数
-
存储类型
-
定义:底层实际存储的类型,Kubernetes 支持多种存储类型,如 NFS、iSCSI、glusterFS 等,每种类型的配置都会有所不同。
-
影响因素:不同存储类型可能支持的访问模式和回收策略不同。
-
-
存储能力(capacity)
-
定义:当前主要支持存储空间的设置(如
storage=1Gi),但未来可能会增加 IOPS、吞吐量等其他性能指标的配置。 -
注意事项:存储能力的设置直接影响到 PV 能够提供给 Pod 的存储空间大小。
-
访问模式(accessModes)
-
定义:描述用户应用对存储资源的访问权限,包括:
-
ReadWriteOnce(RWO):读写权限,但只能被单个节点挂载。
-
ReadOnlyMany(ROX):只读权限,可被多个节点挂载。
-
ReadWriteMany(RWX):读写权限,可被多个节点挂载。
-
-
注意事项:底层不同的存储类型可能支持的访问模式不同。
-
-
回收策略(persistentVolumeReclaimPolicy)
-
定义:当 PV 不再被使用时,对其的处理方式,包括:
-
Retain(保留):保留数据,需管理员手动清理。
-
Recycle(回收):清除 PV 中的数据。
-
Delete(删除):与 PV 相关联的后端存储完成 volume 删除操作。
-
-
注意事项:底层不同的存储类型可能支持的回收策略不同。
-
-
存储类别(storageClassName)
-
定义:通过
storageClassName参数指定一个存储类别,有助于管理和组织不同类型的存储资源。 -
绑定规则:具有特定类别的 PV 只能与请求了该类别的 Persistent Volume Claim (PVC) 进行绑定;未设定类别的 PV 则只能与不请求任何类别的 PVC 进行绑定。
-
-
状态(status)
-
定义:PV 在生命周期中的状态,包括:
-
Available(可用):表示可用状态,尚未被任何 PVC 绑定。
-
Bound(已绑定):表示 PV 已经被 PVC 绑定。
-
Released(已释放):表示 PVC 被删除,但资源还未被集群重新声明。
-
Failed(失败):表示该 PV 的自动回收失败。
-
-
示例
-
使用NFS作为存储,来演示PV的使用,创建3个PV,对应NFS中的3个暴露的路径
[root@k8s-master ~]# mkdir /data/pv{1..3} -p
[root@k8s-master ~]# vim /etc/exports、
[root@k8s-master ~]# cat /etc/exports
/nfstest 192.168.58.0/24(rw,no_root_squash)
/data/pv1 192.168.58.0/24(rw,no_root_squash)
/data/pv2 192.168.58.0/24(rw,no_root_squash)
/data/pv3 192.168.58.0/24(rw,no_root_squash)
[root@k8s-master ~]# exportfs -arv
exporting 192.168.58.0/24:/data/pv3
exporting 192.168.58.0/24:/data/pv2
exporting 192.168.58.0/24:/data/pv1
exporting 192.168.58.0/24:/nfstest
-
创建pv配置文件
[root@k8s-master ~]# cat pv.yaml
---
apiVersion: v1
kind: PersistentVolume
metadata:name: pv1
spec:capacity:storage: 1GiaccessModes:- ReadWriteManypersistentVolumeReclaimPolicy: Retainnfs:path: /data/pv1server: k8s-master---
apiVersion: v1
kind: PersistentVolume
metadata:name: pv2
spec:capacity:storage: 2GiaccessModes:- ReadWriteManypersistentVolumeReclaimPolicy: Retainnfs:path: /data/pv2server: k8s-master---
apiVersion: v1
kind: PersistentVolume
metadata:name: pv3
spec:capacity:storage: 3GiaccessModes:- ReadWriteManypersistentVolumeReclaimPolicy: Retainnfs:path: /data/pv3server: k8s-master
[root@k8s-master ~]# kubectl apply -f pv.yaml
persistentvolume/pv1 created
persistentvolume/pv2 created
persistentvolume/pv3 created
[root@k8s-master ~]# kubectl get pv -w
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv1 1Gi RWX Retain Available 14s
pv2 2Gi RWX Retain Available 14s
pv3 3Gi RWX Retain Available 14s
当前PV的状态为available为可用状态;
PVC(Persistent Volume Claim)
PVC 的关键配置参数
-
访问模式(accessModes)
-
定义:描述用户应用对存储资源的访问权限。
-
可选值
-
ReadWriteOnce:表示该卷可以被集群中的一个节点挂载为读写模式。 -
ReadOnlyMany:表示该卷可以被集群中的多个节点挂载为只读模式。 -
ReadWriteMany:表示该卷可以被集群中的多个节点同时挂载为读写模式。
-
-
注意事项:不同的存储类型可能支持的访问模式不同。
-
-
选择条件(selector)
-
定义:通过 Label Selector 的设置,使 PVC 对系统中已存在的 PV 进行筛选。
-
作用:允许 PVC 根据标签选择特定的 PV,从而实现更灵活的存储资源管理。
-
示例:
matchLabels: { app: myapp }表示 PVC 会尝试绑定标签为{ app: myapp }的 PV。
-
-
存储类别(storageClassName)
-
定义:PVC 在定义时可以设定需要的后端存储的类别。
-
作用:只有设置了相同
storageClassName的 PV 才能被系统选出作为 PVC 的目标。 -
示例:
storageClassName: standard表示 PVC 要求使用名为standard的存储类别。
-
-
资源请求(Resources)
-
定义:PVC 中的资源请求字段用于指定 PVC 需要的最小存储空间大小。
-
示例:
resources.requests.storage: 5Gi表示 PVC 请求至少需要 5GB 的存储空间。 -
注意事项:PVC 的资源请求必须小于或等于 PV 提供的最大存储空间,否则 PVC 无法成功绑定到 PV 上。
-
[root@k8s-master ~]# cat pvc.yaml
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: pvc1namespace: test
spec:accessModes:- ReadWriteManyresources:requests:storage: 10Mi---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: pvc2namespace: test
spec:accessModes:- ReadWriteManyresources:requests:storage: 10Mi---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: pvc3namespace: test
spec:accessModes:- ReadWriteManyresources:requests:storage: 10Mi[root@k8s-master ~]# kubectl create ns test
namespace/test created
[root@k8s-master ~]# kubectl apply -f pvc.yaml
persistentvolumeclaim/pvc1 created
persistentvolumeclaim/pvc2 created
persistentvolumeclaim/pvc3 created
[root@k8s-master ~]# kubectl get pvc -w
^C[root@k8s-master ~]# kubectl get pvc -n test
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
pvc1 Bound pv1 1Gi RWX 18s
pvc2 Bound pv2 2Gi RWX 18s
pvc3 Bound pv3 3Gi RWX 18s
[root@k8s-master ~]# kubectl get pv -o wide
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE VOLUMEMODE
pv1 1Gi RWX Retain Bound test/pvc1 2m55s Filesystem
pv2 2Gi RWX Retain Bound test/pvc2 2m55s Filesystem
pv3 3Gi RWX Retain Bound test/pvc3 2m55s Filesystem
创建PVC之后PV的状态变为已绑定;
-
创建pods.yaml, 使用pv
[root@k8s-master ~]# cat pods.yaml
---
apiVersion: v1
kind: Pod
metadata:name: pod1namespace: test
spec:containers:- name: busyboximage: busybox:1.30command: ["/bin/sh", "-c", "while true; do echo pod1 >> /root/out.txt; sleep 10; done;"]volumeMounts:- name: volumemountPath: /root/volumes:- name: volumepersistentVolumeClaim:claimName: pvc1readOnly: false---
apiVersion: v1
kind: Pod
metadata:name: pod2namespace: test
spec:containers:- name: busyboximage: busybox:1.30command: ["/bin/sh", "-c", "while true; do echo pod2 >> /root/out.txt; sleep 10; done;"]volumeMounts:- name: volumemountPath: /root/volumes:- name: volumepersistentVolumeClaim:claimName: pvc2readOnly: false
[root@k8s-master ~]# kubectl apply -f pods.yaml
pod/pod1 created
pod/pod2 created
[root@k8s-master ~]# kubectl get pods -n test
NAME READY STATUS RESTARTS AGE
pod1 0/1 ContainerCreating 0 6s
pod2 0/1 ContainerCreating 0 6s
[root@k8s-master ~]# kubectl get pods -n test -w
NAME READY STATUS RESTARTS AGE
pod1 0/1 ContainerCreating 0 9s
pod2 0/1 ContainerCreating 0 9s
pod1 1/1 Running 0 9s
pod2 1/1 Running 0 10s
^C[root@k8s-master ~]# kubectl get pods -n test -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod1 1/1 Running 0 20s 10.244.169.129 k8s-node2 <none> <none>
pod2 1/1 Running 0 20s 10.244.36.74 k8s-node1 <none> <none>
"while true; do echo pod1 >> /root/out.txt; sleep 10; done;":while循环每十秒输出pod1到/root/out.txt中;
[root@k8s-master ~]# cat /data/pv1/out.txt
pod1
pod1
[root@k8s-master ~]# cat /data/pv2/out.txt
pod2
pod2
pod2
[root@k8s-master ~]# cat /data/pv1/out.txt
pod1
pod1
pod1
pod1
pod1
pod1
pod1
pod1
pod1
pod1
pod1
pod1
pod1
pod1
pod1
pod1
pod1
相关文章:
K8S中高级存储之PV和PVC
高级存储 PV和PVC 由于kubernetes支持的存储系统有很多,要求客户全都掌握,显然不现实。为了能够屏蔽底层存储实现的细节,方便用户使用, kubernetes引入PV和PVC两种资源对象。 PV(Persistent Volume) PV是…...
【C语言进阶】- 动态内存管理
动态内存管理 1.1 为什么存在动态内存分配1.2 动态内存函数介绍2.1 malloc函数的使用2.2 free函数的使用2.3 calloc函数的使用2.4 realloc函数的使用3.1 常见的动态内存错误3.2 常见笔试题 1.1 为什么存在动态内存分配 我们已经掌握的内存开辟方式有: int val 20;…...
Python实现基于TD3(Twin Delayed Deep Deterministic Policy Gradient)算法来实时更新路径规划算法
下面是一个使用Python实现基于TD3(Twin Delayed Deep Deterministic Policy Gradient)算法来实时更新路径规划算法的三个参数(sigma0,rho0 和 theta)的示例代码。该算法将依据障碍物环境进行优化。 实现思路 环境定义…...
pytorch实现半监督学习
半监督学习(Semi-Supervised Learning,SSL)结合了有监督学习和无监督学习的特点,通常用于部分数据有标签、部分数据无标签的场景。其主要步骤如下: 1. 数据准备 有标签数据(Labeled Data)&…...
我的毕设之路:(2)系统类型的论文写法
一般先进行毕设的设计与实现,再在现成毕设基础上进行描述形成文档,那么论文也就成形了。 1 需求分析:毕业设计根据开题报告和要求进行需求分析和功能确定,区分贴合主题的主要功能和拓展功能能,删除偏离无关紧要的功能…...
LosslessScaling-学习版[steam价值30元的游戏无损放大/补帧工具]
LosslessScaling 链接:https://pan.xunlei.com/s/VOHc-yZBgwBOoqtdZAv114ZTA1?pwdxiih# 解压后运行"A-绿化-解压后运行我.cmd"...
concurrent.futures.Future对象详解:利用线程池与进程池实现异步操作
concurrent.futures.Future对象详解:利用线程池与进程池实现异步操作 一、前言二、使用线程池三、使用进程池四、注意事项五、结语 一、前言 在现代编程中,异步操作已成为提升程序性能和响应速度的关键手段。Python的concurrent.futures模块为此提供了强…...
StarRocks 安装部署
StarRocks 安装部署 StarRocks端口: 官方《配置检查》有服务端口详细描述: https://docs.starrocks.io/zh/docs/deployment/environment_configurations/ StarRocks架构:https://docs.starrocks.io/zh/docs/introduction/Architecture/ Sta…...
Python Matplotlib库:从入门到精通
Python Matplotlib库:从入门到精通 在数据分析和科学计算领域,可视化是一项至关重要的技能。Matplotlib作为Python中最流行的绘图库之一,为我们提供了强大的绘图功能。本文将带你从Matplotlib的基础开始,逐步掌握其高级用法&…...
线程概念、操作
一、背景知识 1、地址空间进一步理解 在父子进程对同一变量进行修改时发生写时拷贝,这时候拷贝的基本单位是4KB,会将该变量所在的页框全拷贝一份,这是因为修改该变量很有可能会修改其周围的变量(局部性原理)…...
【PySide6拓展】QSoundEffect
文章目录 【PySide6拓展】QSoundEffect 音效播放类**基本概念****什么是 QSoundEffect?****QSoundEffect 的特点****安装 PySide6** **如何使用 QSoundEffect?****1. 播放音效****示例代码:播放音效** **代码解析****QSoundEffect 的高级用法…...
33【脚本解析语言】
脚本语言也叫解析语言 脚本一词,相信很多人都听过,那么什么是脚本语言,我们在开发时有一个调试功能,但是发布版是需要编译执行的,体积比较大,同时这使得我们每次更新都需要重新编译,客户再…...
【Unity】 HTFramework框架(五十九)快速开发编辑器工具(Assembly Viewer + ILSpy)
更新日期:2025年1月23日。 Github源码:[点我获取源码] Gitee源码:[点我获取源码] 索引 开发编辑器工具MouseRayTarget焦点视角Collider线框Assembly Viewer搜索程序集ILSpy反编译程序集搜索GizmosElement类找到Gizmos菜单找到Gizmos窗口分析A…...
如何解决TikTok网络不稳定的问题
TikTok是目前全球最受欢迎的短视频平台之一,凭借其丰富多彩的内容和社交功能吸引了数以亿计的用户。然而,尽管TikTok在世界范围内的使用情况不断增长,但不少用户在使用过程中仍然会遇到网络不稳定的问题。无论是在观看视频时遇到缓冲…...
告别页面刷新!如何使用AJAX和FormData优化Web表单提交
系列文章目录 01-从零开始学 HTML:构建网页的基本框架与技巧 02-HTML常见文本标签解析:从基础到进阶的全面指南 03-HTML从入门到精通:链接与图像标签全解析 04-HTML 列表标签全解析:无序与有序列表的深度应用 05-HTML表格标签全面…...
WireShark4.4.2浏览器网络调试指南:数据统计(八)
概述 Wireshark 是一款功能强大的开源网络协议分析软件,被广泛应用于网络调试和数据分析。随着互联网的发展,以及网络安全问题日益严峻,了解如何使用 Wireshark进行浏览器网络调试显得尤为重要。最新的 Wireshark4.4.2 提供了更加强大的功能…...
Hypium+python鸿蒙原生自动化安装配置
Hypiumpython自动化搭建 文章目录 Python安装pip源配置HDC安装Hypium安装DevEco Testing Hypium插件安装及使用方法插件安装工程创建区域 Python安装 推荐从官网获取3.10版本,其他版本可能出现兼容性问题 Python下载地址 下载64/32bitwindows安装文件&am…...
2025创业思路和方向有哪些?
创业思路和方向是决定创业成功与否的关键因素。以下是一些基于找到的参考内容的创业思路和方向,旨在激发创业灵感: 一、技术创新与融合: 1、智能手机与云电视结合:开发集成智能手机功能的云电视,提供通讯、娱乐一体化体…...
实验五---控制系统的稳定性分析---自动控制原理实验课
一 实验目的 1、理解控制系统稳定性的概念 2、掌握多种判定系统稳定性的原理及方法 3、掌握使用Matlab软件进行控制系统的稳定性分析 二 实验仪器 计算机,MATLAB仿真软件 三 实验内容及步骤 1.计算系统闭环特征根,判别系统稳定性; 2.绘制系统…...
AttributeError: can‘t set attribute ‘lines‘
报错: ax p3.Axes3D(fig) ax.lines [] AttributeError: cant set attribute lines 总结下来,解决方案应包括: 1. 使用ax.clear()方法清除所有内容。 2. 逐个移除lines中的元素。 3. 检查matplotlib版本,确保没有已知的bug。…...
3步颠覆文献管理:让Zotero格式修复效率提升10倍的实战指南
3步颠覆文献管理:让Zotero格式修复效率提升10倍的实战指南 【免费下载链接】zotero-format-metadata Linter for Zotero. A plugin for Zotero to format item metadata. Shortcut to set title rich text; set journal abbreviations, university places, and item…...
别再买错千元投影! 哈趣Q1Pro藏看越级体验
当下的智能投影市场正经历着深度的“去伪存真”变革,行业洗牌加速的同时,也让消费者的选购变得愈发谨慎。洛图科技数据显示,2025年国内智能投影市场整体销量下滑,其中低端投影成为调整重灾区,0-499元价位段销量同比大跌…...
忍者像素绘卷效果实测:同一Prompt下不同步数对像素锐度影响对比分析
忍者像素绘卷效果实测:同一Prompt下不同步数对像素锐度影响对比分析 1. 测试背景与目的 忍者像素绘卷作为一款基于Z-Image-Turbo深度优化的图像生成工具,其独特的16-Bit复古游戏美学风格吸引了大量创作者。在实际使用中,我们发现"描绘…...
5步精通Trilium中文版:构建高效个人知识管理系统
5步精通Trilium中文版:构建高效个人知识管理系统 【免费下载链接】trilium-translation Translation for Trilium Notes. Trilium Notes 中文适配, 体验优化 项目地址: https://gitcode.com/gh_mirrors/tr/trilium-translation 认识Trilium:重新定…...
手把手教你编译运行openHiTLS社区的FrodoKEM源码(附完整环境配置)
从零构建FrodoKEM开发环境:openHiTLS社区源码实战指南 当量子计算机从理论走向现实,传统加密算法正面临前所未有的挑战。FrodoKEM作为后量子密码学领域的明星算法,以其坚实的数学基础和简洁的实现逻辑,成为开发者探索抗量子加密技…...
Lingyuxiu MXJ LoRA开源镜像指南:从下载到生成的完整开箱即用流程
Lingyuxiu MXJ LoRA开源镜像指南:从下载到生成的完整开箱即用流程 1. 项目简介 Lingyuxiu MXJ LoRA 是一款专门为生成唯美真人风格人像而设计的轻量级AI图像生成系统。这个项目最大的特点就是针对人像摄影进行了深度优化,能够生成五官精致、光影柔和、…...
消息防撤回方案:RevokeMsgPatcher的通讯内容保护实践
消息防撤回方案:RevokeMsgPatcher的通讯内容保护实践 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了) 项目地址: https://gitcode.com…...
数据库优化:高效查询GUID的技巧
在日常的数据库操作中,如何高效地查询数据是一个永恒的话题。特别是当我们处理大型数据集和需要在文本字段中查找特定模式(如GUID)时,查询效率显得尤为关键。今天,我将分享一种优化查询GUID的方法,帮助你从长达数小时的查询时间中解脱出来。 背景 假设我们有一个数据库…...
蓝桥杯备赛:Floyd、Bellman-Ford、Dijkstra,三大最短路算法到底怎么选?(附场景对比与代码模板)
蓝桥杯竞赛:Floyd、Bellman-Ford、Dijkstra三大最短路算法实战指南 在算法竞赛的战场上,最短路问题就像是一道必考题,而Floyd、Bellman-Ford和Dijkstra这三大算法则是解题的利器。但很多选手在面对具体问题时常常陷入选择困难:该用…...
单片机:从核心原理到智能应用实战
1. 单片机:智能时代的微型大脑 想象一下清晨醒来,窗帘自动拉开,咖啡机开始工作,室内温度始终保持在最舒适的状态——这些看似简单的智能场景背后,都藏着一个不起眼却至关重要的核心部件:单片机。这块比硬币…...
