【Kubernetes】持久卷 PV

持久化存储》系列,共包含以下文章:

  • K8s 持久化存储方式
  • 持久卷 PV
  • 持久卷声明 PVC
  • 持久卷的动态供给 Dynamic Provisioning

😊 如果您觉得这篇文章有用 ✔️ 的话,请给博主一个一键三连 🚀🚀🚀 吧 (点赞 🧡、关注 💛、收藏 💚)!!!您的支持 💖💖💖 将激励 🔥 博主输出更多优质内容!!!

持久卷 PV

  • 1.什么是持久卷
  • 2.创建一个持久卷
  • 3.持久卷的访问模式
  • 4.持久卷的回收策略

数据卷是在创建 Pod 时通过 挂载目录 来实现数据的共享和持久化的。但是在一个大型系统中,这种方式是非常不利于管理的,因为数据卷把数据的 持久存储供应使用 封装在一起了那么,能否将数据的 持久存储供应使用 分别进行管理和使用呢?为了解决这个问题,Kubernetes 提供了 持久卷Persistent VolumePV)和 持久化声明Persistent Volume ClaimPVC)。

1.什么是持久卷

持久卷Persistent VolumePV)是 Kubernetes 集群的一种存储方式。持久卷也是集群的一种资源,可以事先创建或者通过存储类(Storage Class)来动态提供。

持久卷通过 卷插件 的形式对外部的存储资源进行操作,并可以通过指定 存储回收策略 来控制持久卷回收对外部存储中的数据的影响。

持久卷对象一般由 Kubernetes 集群的 管理员 创建。它只代表集群为用户提供的一种存储资源。至于这种存储资源如何被使用,它不需要关心。

持久卷和数据卷一样也是使用卷插件来实现的,但二者的最大区别在于:

  • 持久卷与 Pod 的生命周期相互独立,它不会因为 Pod 生命周期的结束而被销毁。
  • 数据卷一般与 Pod 绑定,它的生命周期与 Pod 相同。

在这里插入图片描述

2.创建一个持久卷

下面演示如何创建一个持久卷。

在这里插入图片描述

创建持久卷的描述文件 pv-demo-1.yaml,并在其中输入以下内容。

apiVersion: v1
kind: PersistentVolume
metadata:name: pv-demo-1
spec:capacity:storage: 5GivolumeMode: FilesystemaccessModes:- ReadWriteManypersistentVolumeReclaimPolicy: RecyclestorageClassName: slownfs:server: 172.30.1.2path: /nfs
  • spec.capacity:用于指定持久卷的 容量。上面代码中设置持久卷的容量是 5GB。
  • spec.volumeMode:指定持久卷的 模式。Kubernetes 支持两种类型的持久卷模式:文件系统File System)和 块存储设备Raw Block Devices)。
    • 如果该参数没有被指定,则默认采用文件系统。
    • 如果将该字段设置为块存储设备,且该存储设备为空,则 Kubernetes 会在第 1 次使用持久卷时在该设备上创建文件系统。这也是在 Pod 中以最快的速度来访问存储的方式。
  • spec.accessModes:指定持久卷的 访问模式。通过设置持久卷的访问模式,可以让持久卷以不同的读写方式挂载到宿主系统上,从而让每个持久卷能够拥有对存储资源的读写能力。
  • spec.persistentVolumeReclaimPolicy:在定义持久卷时可以通过该字段指定 存储资源的回收策略。该回收策略用来指定在删除持久卷或者持久卷声明时,Kubernetes 如何处理存储资源上的数据文件。
  • spec.storageClassName:用来设置 存储类。设置了存储类的持久卷只能提供给请求该存储类的 持久化声明 使用。如果持久卷没有设置该字段,则该持久卷只能提供给没有存储类的 持久化声明
  • spec.nfs:指定持久卷的 挂载选项。当 Pod 要使用持久卷时,能够指定附加的挂载选项。Kubernetes 的持久卷支持具有多种挂载选项的卷插件,如 AWSElasticBlockStore、CephFS、Cinder、NFS、RBD 等。在 pv-demo-1.yaml 文件中就是用 NFS(网络文件系统)作为挂载选项。

使用 kubectl apply -f 命令创建持久卷。

kubectl apply -f pv-demo-1.yaml

在这里插入图片描述

查看创建的持久卷信息。

kubectl get pv

输出的信息如下:

在这里插入图片描述

🚀 这里的 STATUS 是 Available,表示该持久卷还没有被挂载使用。

获取持久卷的详细信息。

kubectl describe pv pv-demo-1

输出的信息如下:

在这里插入图片描述

3.持久卷的访问模式

持久卷可以使用不同的存储资源,以所支持的任何方式挂载到宿主系统上。每个持久卷都会有自身的访问模式以描述持久卷的读写能力。spec.accessModes 字段用于指定持久卷的访问式。

下表列出了 Kubernetes 所支持的持久卷访问模式。

访问模式命令行的缩写形式
描述
ReadWriteOnceRWO持久卷可以被一个 node 节点以 读写 方式挂载,同时也允许运行在同一个 node 节点上的不同 Pod 访问该持久卷
ReadOnlyManyROX持久卷可以同时被多个 node 节点以 只读 方式挂载
ReadWriteManyRWX持久卷可以同时被多个 node 节点以 读写 方式挂载
ReadWriteOncePodRWOP持久卷只能被单个 Pod 以 读写 方式挂载。通过这种方式,可以保证在整个集群中只有一个 Pod 可以读写该持久卷

🚀 持久卷支持多种访问模式,但在同一个时刻只能使用一种访问模式挂载。例如,一个 NFS 的持久卷对象在某一个时刻可以被 node 节点以 ReadWriteOnce 访问模式挂载,或者被多个 node 节点以 ReadOnlyMany 访问模式挂载,但不允许同时使用两种及以上的访问模式挂载。

下表是 Kubernetes 官方提供的持久卷的不同卷插件所支持的访问模式。

卷插件ReadWriteOnceReadOnlyManyReadWriteManyReadWriteOncePod
AWSElasticBlockStore
AzureFile
AzureDisk
CephFS
Cinder
CSI取决于驱动程序取决于驱动程序取决于驱动程序取决于驱动程序
FC
FlexVolume
Flocker
GCEPersistentDisk
Glusterfs
HostPath
iSCSI
Quobyte
NFS
RBD
VsphereVolumePod 运行于同一节点上时可行
PortworxVolume
SorageOS

4.持久卷的回收策略

在定义持久卷时,可以通过 persistentVolumeReclaimPolicy 字段来指定 存储资源的回收策略

目前 Kubernetes 的持久卷回收策略有以下 3 种。

  • Retain:该回收策略允许用户手动执行回收资源的操作。在删除 PVC 对象时,PV 对象不会被真的删除,只是 PV 对象的状态会变成 Released。因为用户数据仍然存在于 PV 对象的存储资源中,所以,该 PV 对象暂时还不能够提供给其他 PVC 对象使用。管理员必须在删除旧的 PV 对象并清理对应的存储资源后,才可以创建新的 PV 对象继续使用。如果存储资源中有非常重要的数据,推荐使用这种回收策略。
  • Delete:该回收策略在删除 PersistentVolumeClaim 时,会自动从 Kubernetes 中删除对应的 PV 对象,以及外部存储的资源。该回收策略也是 持久卷动态供给 时 PV 对象的默认回收策略。
  • Recycle:该回收策略在删除 PV 对象时,会对持久卷执行清除操作(即执行 rm -rf /thevolume/* 命令)。通过这样方式回收的 PV 对象,可以再次用来处理新的 PVC 对象的申请。

下面来演示不同回收策略的行为特征。

由于持久卷 pv-demo-1 对象使用的是 NFS 存储方式,因此首先到 master 节点的 NFS Server 上创建一些测试文件。

cd /nfs/
echo hello world > data.txt

在这里插入图片描述

创建 pv-demo-1 对象。

apiVersion: v1
kind: PersistentVolume
metadata:name: pv-demo-1
spec:capacity:storage: 5GivolumeMode: FilesystemaccessModes:- ReadWriteManypersistentVolumeReclaimPolicy: RecyclestorageClassName: slownfs:server: 172.30.1.2path: /nfs

创建 pvc-demo-1 对象。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: pvc-demo-1
spec:accessModes:- ReadWriteManyresources:requests:storage: 1GistorageClassName: slow
kubectl apply -f pv-demo-1.yaml
kubectl apply -f pvc-demo-1.yaml

查看 PV 和 PVC 的信息。

kubectl get pv,pvc

在这里插入图片描述

🚀 可以看出,pv-demo-1 对象的回收策略是 Recycle。这意味着:在删除 pvc-demo-1 对象时,会对 pv-demo-1 对象执行清空操作,把持久卷存储的数据彻底删除,即执行 rm -rf /nfs 命令。这时并不会删除 pv-demo-1 对象,只是其状态将由 Bound 变成 Available

修改 pv-demo-1 对象的回收策略为 Retain

kubectl patch pv pv-demo-1 -p '{"spec": {"persistentVolumeReclaimPolicy": "Retain"}}'

在这里插入图片描述

删除 pvc-demo-1 对象。

kubectl delete persistentvolumeclaim/pvc-demo-1

查看 PV 和 PVC 对象的信息,这时 pv-demo-1 对象的状态将由 Bound 变成 Available

kubectl get pv,pvc

输出的信息如下:

在这里插入图片描述

🚀 Retain 回收策略不会对外部的存储资源执行清空操作,因此这时 master 节点的 NFS Server 上的数据依然存在。检查 master 节点的 /nfs 目录:

ls /nfs/
more /nfs/data.txt

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/414316.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端进阶| 深入学习面向对象设计原则

引言 面向对象编程(Object-Oriented Programming,OOP)是一种常用的编程范式,它通过将数据和与之相关的操作封装在一起,提供了一种更有组织和易于理解的方式来构建应用程序。在JavaScript中,我们可以使用面…

【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(二)

看到这句话的时候证明:此刻你我都在努力 加油陌生人 个人主页:Gu Gu Study 专栏:用Java学习数据结构系列 喜欢的一句话: 常常会回顾努力的自己,所以要为自己的努力留下足迹 喜欢的话可以点个赞谢谢了。 作者&#xff…

Sql查询优化--索引设计与sql优化(包含慢查询定位+explain解释计划+左匹配原则+索引失效)

本文介绍了数据库查询的索引优化方法,依次介绍了慢查询语句定位方法、索引设计与sql语句优化方法,并介绍了左匹配原则和索引失效的场景,最后介绍了explain执行计划要怎么看以调整检验索引设计是否生效和效率情况,创新介绍了如何以…

Visual Studio Code 自定义字体大小

常用编程软件自定义字体大全首页 文章目录 前言具体操作1. 打开首选项设置对话框2. 在Font Family里面输入字体 前言 Visual Studio Code 自定义字体大小,统一设置为 Cascadia Code SemiBold ,大小为 14 具体操作 【文件】>【首选项】>【设置】&…

18037 20秒后的时间

### 思路 1. 读取输入的时间,格式为小时:分钟:秒。 2. 将时间转换为秒数。 3. 增加20秒。 4. 将增加后的秒数转换回小时:分钟:秒格式。 5. 输出结果,确保小时、分钟和秒均占两个数字位,不足位用0补足。 ### 伪代码 1. 读取输入的时间字符串。…

day35-测试之性能测试JMeter的测试报告、并发数计算和性能监控

目录 一、JMeter的测试报告 1.1.聚合报告 1.2.html报告 二、JMeter的并发数计算 2.1.性能测试时的TPS,大都是根据用户真实的业务数据(运营数据)来计算的 2.2.运营数据 2.3.普通计算方法 2.4.二八原则计算方法 2.5.计算稳定性测试并发量 2.6…

vscode中如何设置不显示隐藏文件

在vscode中,有时候,会显示一些隐藏文件,如何设置让其不显示呢? 解决办法 例如:我这里有一个.vscode隐藏文件夹,是vscode默认生成的一个配置目录,我想要它不在资源管理器中进行显示。 操作步骤&a…

Java 入门指南:Java 并发编程 —— Condition 灵活管理线程间的同步

Condition Condition 是 Java 并发编程中的一种高级同步工具,它可以协助线程之间进行等待和通信。提供了一种比传统的 wait() 和 notify() 更加灵活的方式来管理线程间的同步。Condition 接口通常与 Lock 接口一起使用,允许更细粒度的控制线程的等待和唤…

Python 从入门到实战4(序列的操作)

我们的目标是:通过这一套资料学习下来,通过熟练掌握python基础,然后结合经典实例、实践相结合,使我们完全掌握python,并做到独立完成项目开发的能力。 上篇文章我们通过举例学习了python 中列表的简单操作,…

Android CCodec Codec2 (六)C2InterfaceHelper

通过前面几篇文章的学习,我们知道了Codec2参数结构,以及如何定义一个Codec2参数。接下来的几篇文章我们将简单了解上层是如何请求组件支持的参数、如何配置参数,以及参数是如何反射给上层的。本篇文章我们将了解接口参数实例化。 1、C2Interf…

SprinBoot+Vue社团管理系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质…

【最全深度学习介绍】基本概念、类型、应用、优缺点、与机器学习区别是什么?

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 👍感谢小伙伴们点赞、关注! 《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发…

excel规划求解结合vba宏笔记

目录 概念与配置 规划求解定义 excel设置规划求解 宏的基本操作 excel批量进行规划求解案例 加载规划求解模块 宏的设置 宏录制vba 其他案例 概念与配置 规划求解定义 运用“规划求解”定义并求解问题 - Microsoft 支持 excel设置规划求解 EXCEL规划求解的简明教程…

HarmonyOS鸿蒙开发:在线短视频流畅切换最佳实践

简介 为了帮助开发者解决在应用中在线短视频快速切换时容易出现快速切换播放时延过长的问题,将提供对应场景的解决方案。 该解决方案使用: 视频播放框架AVPlayer和滑块视图容器Swiper进行短视频滑动轮播切换。绘制组件XComponent的Surface类型动态渲染…

midwayjs 框架使用 rabbitmq 消息延迟

插件rabbitmq_delayed_message_exchange是RabbitMQ官方提供的一种用于实现延迟消息的解决方案。该插件将交换机类型扩展至x-delayed-message,这种类型的交换机能够将消息暂时挂起,直到设定的延迟时间到达,才将消息投递到绑定的队列中。这一特…

js做一个带模糊搜索、自动补全的select组件auto-input-select

效果图: 思路 原本是想弄一个输入框input,挡在原生select的前面,结果发现,原生select无论怎么弄,都无法js手动控制展开下拉选,必须点击select,这就很尴尬 然后就只能弄一个输入框input&#x…

python-变量声明、数据类型、标识符

一.变量 1.什么是变量 为什么需要变量呢? 一个程序就是一个世界,不论使用哪种高级程序语言编写代码,变量都是其程序的基本组成单位。如下图所示的sum和sub都是变量。 变量的定义: 变量相当于内存中一个数据存储空间的表示&#…

【Unity小工具】Image组件宽度、高度自适应

Unity开发中,用同一个Image进行动态加载不同尺寸的图片,在显示上会有形变此工具可以进行Image的宽度、高度自适应 实现原理 获取Image原始尺寸(sizeDelta)获取图片原始尺寸(spriteSizeDelta)公式&#xff…

Git 忽略已经提交的文件

对于未提交过的文件直接用ignore文件即可,不再赘述 对于已经提交过的文件,但是实际上不需要的,可以用git rm --cached命令 比如下图这个 .vsconfig被我误提交了或者忘了在ignore里添加了 但是我实际上不想要这个文件,那么在项目根目录打开git bash ,输入 git rm --cached .vsc…

【Hot100】LeetCode—34. 在排序数组中查找元素的第一个和最后一个位置

目录 1- 思路二分 - 左侧二分 右侧二分 2- 实现⭐34. 在排序数组中查找元素的第一个和最后一个位置——题解思路 3- ACM 实现 原题链接:34. 在排序数组中查找元素的第一个和最后一个位置 1- 思路 二分 - 左侧二分 右侧二分 右区间二分 ——> 找首次出现的位置…