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。…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...

搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

wpf在image控件上快速显示内存图像
wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像(比如分辨率3000*3000的图像)的办法,尤其是想把内存中的裸数据(只有图像的数据,不包…...

【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...