一文读懂K8S的PV和PVC以及实践攻略
一文读懂K8S的PV和PVC以及实践攻略
Kubernetes(K8S)作为当前云原生和微服务架构的首选平台,凭借其强大的容器编排和管理能力,迅速成为一线大厂分布式平台的标配技术。在Kubernetes中,持久化存储是一个核心问题,特别是对于需要持久化数据的应用来说。为了实现数据的持久化存储,Kubernetes引入了持久卷(PersistentVolume, PV)和持久卷声明(PersistentVolumeClaim, PVC)这两个重要概念。本文将从概念、原理到实践攻略,详细解析K8S中的PV和PVC。
一、概念解析
1. 持久卷(PersistentVolume, PV)
PV是Kubernetes集群中的一块网络存储,它独立于Pod存在,可以被多个Pod共享或独占。PV可以被视为集群级别的资源,用于存储Pod产生的数据。PV可以是各种存储系统,如云提供商的存储、NFS、iSCSI、本地存储等。PV由管理员创建,并配置其细节,如容量、访问模式(ReadWriteOnce、ReadOnlyMany、ReadWriteMany)、存储类别等。
- 容量:指定PV的存储容量。
- 访问模式:指定PV的访问模式,ReadWriteOnce表示一次只能一个Pod写入,ReadOnlyMany表示多个Pod可以同时读取但不能写入,ReadWriteMany表示多个Pod可以同时读写。
- 存储类别:指定PV的存储类别,用于动态创建PV时选择存储后端。
PV有自己的生命周期,包括可用(Available)、绑定(Bound)、释放(Released)、回收(Retained)等状态。当PV被PVC绑定后,其状态变为Bound,直到PVC被删除或释放后,PV的状态才会变为Available或Retained(根据回收策略)。
2. 持久卷声明(PersistentVolumeClaim, PVC)
PVC是用户对持久存储的请求声明,它定义了Pod对存储的需求。PVC可以指定所需的存储容量、访问模式等参数,但通常不需要指定具体的PV,而是通过标签选择器来动态匹配PV。PVC的存在使得Pod与具体的存储实现解耦,提高了可移植性。
- 存储容量:指定PVC所需的存储容量。
- 访问模式:指定PVC的访问模式,与PV的访问模式相匹配。
- 存储类别:指定PVC所需的存储类别,用于动态创建PV时选择存储后端。
- 标签选择器:用于动态匹配PV的标签。
PVC与PV之间是一种声明与提供的关系。PVC声明了对存储资源的需求,而PV则是提供这些资源的实际载体。当PVC被创建时,Kubernetes会尝试将其与满足其要求的PV进行绑定。匹配的过程是根据PVC的标签选择器和PV的标签进行匹配,只有匹配成功的PV才能被绑定到PVC。一旦绑定成功,Pod可以通过PVC访问PV提供的存储资源。如果没有合适的PV可以绑定,PVC将处于Pending状态,直到有合适的PV可用为止。
二、原理解析
PV和PVC的设计实现了Pod与存储资源的解耦,使得Pod可以独立于存储资源的变化而运行。这种设计提高了系统的灵活性和可移植性。
- 动态匹配与绑定:PVC声明了对持久卷的需求,而PV则提供了实际的存储资源。Kubernetes会自动将PVC与合适的PV进行匹配和绑定。这种动态匹配机制使得用户无需关心具体的PV细节,只需声明对存储资源的需求即可。
- 按需分配:通过PVC,可以实现存储资源的按需分配。用户可以根据应用的需求动态申请存储资源,而无需提前准备或分配存储资源。这种按需分配机制提高了资源利用率和系统的可扩展性。
- 生命周期管理:PV和PVC的生命周期管理由Kubernetes负责,包括资源的创建、绑定、使用和回收等阶段。这种生命周期管理机制确保了存储资源的有效使用和回收。
三、实践攻略
1. 实验准备
在进行PV和PVC的实践之前,需要做好以下准备工作:
- 搭建Kubernetes集群。
- 安装NFS Server作为后端存储。
- 配置NFS Server的共享目录和权限。
2. 部署NFS Server
以Ubuntu 22.04为例,安装和配置NFS Server的步骤如下:
sudo apt install -y nfs-kernel-server nfs-common
sudo mkdir -p /ssd/data
sudo chown nobody:nogroup /ssd/data
sudo chmod 777 /ssd/data
sudo nano /etc/exports
在/etc/exports文件中添加以下内容:
/ssd/data *(rw,sync)
然后重启NFS服务:
sudo systemctl enable nfs-server
sudo systemctl restart nfs-server
检查NFS配置:
sudo exportfs -rv
3. 创建PV
使用YAML文件创建PV的示例如下:
apiVersion: v1
kind: PersistentVolume
metadata:name: example-pv
spec:capacity:storage: 1GivolumeMode: FilesystemaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: Retainnfs:path: /ssd/dataserver: nfs-server-ip
将上述YAML文件保存为example-pv.yaml,并使用以下命令创建PV:
kubectl apply -f example-pv.yaml
4. 创建PVC
使用YAML文件创建PVC的示例如下:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: example-pvc
spec:accessModes:- ReadWriteOnceresources:requests:storage: 1Gi
将上述YAML文件保存为example-pvc.yaml,并使用以下命令创建PVC:
kubectl apply -f example-pvc.yaml
创建PVC后,Kubernetes会自动将其与满足要求的PV进行绑定。可以使用以下命令查看PV和PVC的状态:
kubectl get pv
kubectl get pvc
5. 创建Pod并挂载PVC
使用YAML文件创建Pod并挂载PVC的示例如下:
apiVersion: v1
kind: Pod
metadata:name: example-pod
spec:containers:- name: example-containerimage: nginxvolumeMounts:- name: datamountPath: /datavolumes:- name: datapersistentVolumeClaim:claimName: example-pvc
将上述YAML文件保存为example-pod.yaml,并使用以下命令创建Pod:
kubectl apply -f example-pod.yaml
创建Pod后,可以使用以下命令查看Pod的状态和日志:
kubectl get pods
kubectl logs example-pod
此时,Pod已经成功挂载了PVC,并可以通过PVC访问PV提供的存储资源。可以在/data目录下读写数据,这些数据将持久化存储在NFS Server的/ssd/data目录中。
四、总结与展望
PV和PVC是Kubernetes中实现数据持久化存储的核心组件。它们通过动态匹配和绑定的方式,实现了Pod与存储资源的解耦和按需分配,从而提高了资源利用率和系统的稳定性、可靠性。未来,随着Kubernetes生态的不断发展和完善,PV和PVC的功能和性能将会得到进一步的提升和优化。例如,可能会引入更多的存储后端和访问模式;可能会优化动态匹配和绑定的算法;可能会提供更多的监控和管理工具等。总之,PV和PVC作为Kubernetes中的重要特性,将为云原生和微服务架构下的数据存储提供更加强大和灵活的支持。
相关文章:
一文读懂K8S的PV和PVC以及实践攻略
一文读懂K8S的PV和PVC以及实践攻略 Kubernetes(K8S)作为当前云原生和微服务架构的首选平台,凭借其强大的容器编排和管理能力,迅速成为一线大厂分布式平台的标配技术。在Kubernetes中,持久化存储是一个核心问题&#x…...
在react-native中如何获取View的漏出比例和漏出时间
写在前面 最近在项目中遇到了一个这样的需求:给一个模块做埋点,要求埋点的触发时机是当模块露出50%且停留300毫秒才进行上报 开搞 首先要有一个View <View></View>然后在View里定义一个ref <View ref { viewRef }></View>然…...
谷歌新安装包文件形式 .aab 在UE4中的打包原理
摘要 本文学习了aab的基本概念以及UE4中产生aab的构建原理。 从官网了解基本概念 官网:Android Developers 1、什么是aab? .aab包形如: 2021年7月,在Google Play应用程序中,已经有数千个应用程序率先跟进了AAB格式。…...
昂首平台:多货币专家顾问助力投资者优化外汇投资
昂首平台推出的多货币专家顾问(EA)为投资者提供了多样化的货币对交易选择。考虑到外汇市场的复杂性,大多数EA系统专注于价差较低的主要货币对,如EUR/USD或GBP/USD。交易那些价差较大的非主流货币对,如EUR/JPY和AUD/CAD,可能会增加…...
Go标准库runtime.MemStats
在 Go 语言中,runtime.MemStats 是一个结构体,它提供了关于 Go 程序内存使用情况的统计信息。这个结构体是 runtime 包中的 MemStats 类型,它包含了多个字段,用于报告内存分配器的统计数据,如内存分配、释放、垃圾回收…...
MAC 电脑Office power point编辑的时候,显示“某些字体无法随演示文稿一起保存,仍然要保存演示文稿吗?”
目录 问题描述: 问题解决: 问题描述: 在使用mac电脑的power point打开别人的.ppt文件之后,在保存的时候,弹出““某些字体无法随演示文稿一起保存,仍然要保存演示文稿吗?”,每次只…...
R语言机器学习算法实战系列(四)随机森林算法+SHAP值 (Random Forest)
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍教程下载数据加载R包导入数据数据预处理数据描述特征选择数据切割调节参数构建模型预测测试数据评估模型模型准确性混淆矩阵模型评估指标ROC CurvePRC Curve特征的重要性模型解释保…...
用柔性神经k-Opt学习搜索路径问题的可行和不可行区域(未完,先看前驱文章L2S)
文章目录 Abstract1 IntroductionAbstract 介绍了一种名为 Neural k-Opt(NeuOpt)的新型学习搜索(L2S)求解器,用于解决路径问题。它学习执行基于定制的动作分解方法和定制的循环双流(Recurrent Dual-Stream)解码器的灵活 k-opt 交换。 作为一项开创性的工作,我们绕过了…...
【升华】人工智能python重要库scikit-learn学习
一、人工智能python重要库scikit-learn 在人工智能10大算法中,有8个算法都导入了 sklearn库 from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn import metrics # 导入所需的库 from sklea…...
Stable Diffusion Web UI 大白话术语解释 (二)
归纳整理,Stable Diffusion Web UI 使用过程中,相关术语 ControlNet ControlNet 说简单点,就是你可以给 AI 一些“规则”,比如让它根据某些线条、结构或者骨架去画图。 这样能让 AI 画出更符合你要求的图片,特别适合画…...
vue-vben-admin 首页加载慢优化 升级vite2到vite3
我的vben-admin是2.8版本的,首次首页加载太慢了,升级下vite,原来1分钟,现在20s左右 1.修改package.json 添加 "terser": "^5.14.2",修改 "vitejs/plugin-legacy": "^2.0.0","vitejs/plugin-vue": "^3.0.1",&qu…...
集合框架07:LinkedList使用
1.视频链接:13.14 LinkedList使用_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1zD4y1Q7Fw?spm_id_from333.788.videopod.episodes&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5&p142.LinkedList集合的增删改查操作 package com.yundait.Demo01;im…...
一区鱼鹰优化算法+深度学习+注意力机制!OOA-TCN-LSTM-Attention多变量时间序列预测
一区鱼鹰优化算法深度学习注意力机制!OOA-TCN-LSTM-Attention多变量时间序列预测 目录 一区鱼鹰优化算法深度学习注意力机制!OOA-TCN-LSTM-Attention多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.基于OOA-TCN-LSTM-Attenti…...
Cesium 黑夜效果
Cesium 黑夜效果 原理: 根据相机到片元的距离雾化场景的后处理效果 效果:...
leetcode动态规划(二)-斐波那契数列
题目 509.斐波那契数列 斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) 0,F(1) 1 F(n) F(n - 1) F(n - 2)࿰…...
【MySQL】增删改查-进阶(一)
目录 🌴数据库约束 🚩约束类型 🚩NOT NULL 🚩UNIQUE 🚩DEFAULT 🚩PRIMARY KEY 🚩FOREIGN KEY 🚩CHECK 🎄表的设计 🚩一对一 🚩一对多 …...
MacOS RocketMQ安装
MacOS RocketMQ安装 文章目录 MacOS RocketMQ安装一、下载二、安装修改JVM参数启动关闭测试关闭测试测试收发消息运行自带的生产者测试类运行自带的消费者测试类参考博客:https://blog.csdn.net/zhiyikeji/article/details/140911649 一、下载 打开官网,…...
OpenCV高级图形用户界面(6)获取指定窗口中图像的矩形区域函数getWindowImageRect()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 提供窗口中图像的矩形区域。 该函数 getWindowImageRect 返回图像渲染区域的客户端屏幕坐标、宽度和高度。 函数原型 Rect cv::getWindowImage…...
SpringColoud GateWay 核心组件
优质博文:IT-BLOG-CN 【1】Route路由: Gateway的基本构建模块,它由ID、目标URL、断言集合和过滤器集合组成。如果聚合断言结果为真,则匹配到该路由。 Route路由-动态路由实现原理: 配置变化Apollo 服务地址实例变化…...
5.计算机网络_抓包工具wireshark
安装 Linux中安装wireshark: sudo apt-get install wireshark Linux中执行wireshark: sudo wireshark 使用 注意:只有与外网交互的数据才可以被wireshark抓到,本机回环的数据不会被抓到 实验内容: 使用nc命令…...
Arduino PWM转4-20mA工业电流信号:二阶滤波与V/I转换电路设计
1. 项目概述:从PWM到工业标准电流信号在工业自动化、过程控制和传感器领域,4-20 mA电流环是一个几乎无处不在的标准。它用4 mA代表测量值的下限(如0C),20 mA代表上限(如100C),这种设…...
适合地产人用的中介房源管理系统
在房产经纪行业,房源管理与客源管理是经纪人日常工作的核心,直接影响业务效率与成交转化。选择一套适配行业需求的中介房源管理系统,能帮助中介团队规范流程、降低运营成本、大幅提升业绩。今天我们以客观视角,详细解析全房源系统…...
Transient、QuickEye、VerifyEye傻傻分不清?一文讲透Ansys里三种眼图仿真方法的适用场景与避坑指南
Transient、QuickEye、VerifyEye深度解析:Ansys眼图仿真技术选型实战指南 在高速数字系统设计中,眼图分析是评估信号完整性的黄金标准。面对Ansys工具链中三种截然不同的眼图生成方法,工程师常常陷入选择困境——是追求精确度的传统瞬态分析&…...
搞定这 5 个全栈电商项目,面试别再用 Todo-List 凑数了
找独立开发练手项目或者写简历项目时,最忌讳两件事:一是太简单(纯前端 Mock 数据,点两下就没了),二是太假(一上来就硬套微服务、消息队列、高并发,结果自己根本Hold不住)…...
1901-2022年中国气温变化分析实战:用这份1km栅格数据我们能发现什么?
1901-2022年中国气温变化分析实战:如何从1km栅格数据中挖掘气候演变规律当一份覆盖122年、分辨率精确到1公里的气温栅格数据摆在面前时,我们看到的不仅是数字矩阵,更是一部写在经纬度坐标里的气候变迁史诗。这份由逐月数据聚合生成的逐年气温…...
AI圈神秘领袖Ilya一幅画引爆全网,OpenAI三件大事暗示AGI时代将至?
AI圈神秘精神领袖Ilya在Instagram上传一幅画引发疯狂解读,与此同时,OpenAI连续公布数学成果、升级Codex、筹备IPO,释放AGI到来的强烈信号。Ilya画作引猜测Ilya上传的画中,罗丹的「思考者」踩在芯片Die Shot上,右下角签…...
从零到上机:我的第一个Quest 3空间锚点应用是如何跑起来的(附完整Unity工程)
从零到上机:我的第一个Quest 3空间锚点应用是如何跑起来的(附完整Unity工程)第一次戴上Meta Quest 3时,那种虚拟与现实交织的震撼感至今难忘。但作为开发者,更让我着迷的是如何让虚拟物体在真实空间中"记住"…...
基于USB ACA模式实现安卓手机边玩边充的游戏手柄设计
1. 项目缘起:当手机性能过剩,却败给了触摸屏几年前,我清理手机游戏时,发现一个挺无奈的现象:性能足以媲美掌机的智能手机里,只剩下一些慢节奏的平台解谜或者数独。那些曾经让我在掌机上废寝忘食的赛车、动作…...
Raspberry Pi Debug Probe:RP2040嵌入式开发的调试利器与实战指南
1. 项目概述:为什么你需要一个Raspberry Pi Debug Probe?如果你玩过树莓派Pico或者任何基于RP2040芯片的开发板,肯定遇到过这样的场景:写好的代码,点一下“上传”,然后……就没有然后了。板子上的LED没按你…...
为你的Hermes Agent自定义Provider,接入Taotoken多模型池
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为你的Hermes Agent自定义Provider,接入Taotoken多模型池 在构建复杂的AI应用时,开发者常常面临一个核心挑…...
