【云原生】Kubernetes 中的 PV 和 PVC 介绍、原理、用法及实战案例分析

在这里插入图片描述

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,云原生k8s,linux,shell脚本等实操经验,网站搭建,数据库等分享。

所属的专栏:云原生K8S,零基础到进阶实战
景天的主页:景天科技苑

在这里插入图片描述

文章目录

  • Kubernetes 中的 PV 和 PVC 介绍、原理、用法及实战案例分析
    • 介绍
      • PV(Persistent Volume)
      • PVC(Persistent Volume Claim)
    • 原理
    • 用法
      • 创建 PV
      • 创建 PVC
      • 将 PVC 与 Pod 关联
    • 实战案例分析
      • 案例:部署 WordPress 应用程序
        • 步骤 1:创建 PV
        • 步骤 2:创建 PVC
        • 步骤 3:部署 WordPress 应用
        • 步骤 4:验证部署
        • 步骤 5:扩展和维护
          • 扩展存储
          • 备份和恢复
          • 监控和日志
        • 步骤 6:更新和升级
      • 总结

Kubernetes 中的 PV 和 PVC 介绍、原理、用法及实战案例分析

介绍

在 Kubernetes(k8s)中,管理存储资源是确保应用持久性和可靠性的关键部分。PersistentVolume(PV)和PersistentVolumeClaim(PVC)是 Kubernetes 中用于存储资源管理的两个核心概念。它们提供了一种机制,允许 Pod 访问独立于其生命周期的存储资源,从而实现了数据的持久化。

PV(Persistent Volume)

PV 是 Kubernetes 集群中的一块网络存储,它独立于 Pod 存在,可以作为各种存储系统的抽象,如 NFS、iSCSI、云提供商的存储(如 AWS EBS、GCP Persistent Disks、Azure Disk Storage)等。PV 由管理员预先创建并配置,包括容量、访问模式(ReadWriteOnce、ReadOnlyMany、ReadWriteMany)和回收策略等。PV 的生命周期包括可用(Available)、绑定(Bound)、释放(Released)和回收(Retained)等状态。

PVC(Persistent Volume Claim)

PVC 是用户对 PV 的存储请求,它定义了 Pod 对存储资源的需求。用户通过 PVC 声明所需的存储容量和访问模式,而不需要关心具体的 PV 细节。当 PVC 被创建时,Kubernetes 会尝试将其与满足其要求的 PV 进行绑定。如果集群中没有可用的 PV,且 PVC 定义了 StorageClass,则 Kubernetes 可以动态地创建一个新的 PV 来满足 PVC 的需求。

原理

PV 和 PVC 的工作原理主要基于动态匹配和绑定机制。这种机制使得 Pod 与存储资源的具体实现解耦,提高了灵活性和可移植性。

  1. 静态供应:管理员手动创建 PV,用户通过 PVC 声明对存储资源的需求。Kubernetes 会根据 PVC 的标签选择器和 PV 的标签进行匹配,将满足条件的 PV 绑定到 PVC。

  2. 动态供应:当用户通过 PVC 请求存储资源时,如果集群中没有现成的 PV 可用,且 PVC 定义了 StorageClass,Kubernetes 会根据 StorageClass 的配置动态创建一个新的 PV,并将其绑定到 PVC。

这种机制使得存储资源的管理更加灵活和高效,减少了手动干预的需要。

用法

创建 PV

管理员可以通过 YAML 文件创建 PV。以下是一个简单的 PV 创建示例,它定义了一个 1GB 大小的 NFS 存储卷:

apiVersion: v1
kind: PersistentVolume
metadata:name: example-pv
spec:capacity:storage: 1GivolumeMode: FilesystemaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: Retainnfs:path: /path/to/nfs/volumeserver: nfs-server-ip

创建 PVC

用户通过 PVC 声明对存储资源的需求。以下是一个 PVC 创建示例,它请求 1GB 大小的存储资源,并指定了 ReadWriteOnce 访问模式:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: example-pvc
spec:accessModes:- ReadWriteOnceresources:requests:storage: 1Gi

将 PVC 与 Pod 关联

在 Pod 的定义中,可以将 PVC 与 Pod 关联起来,以便 Pod 可以访问 PVC 绑定的 PV 提供的存储资源。以下是一个 Pod 定义的示例,它将 PVC 挂载到 Pod 的 /data 目录:

apiVersion: v1
kind: Pod
metadata:name: example-pod
spec:containers:- name: example-containerimage: nginxvolumeMounts:- name: datamountPath: /datavolumes:- name: datapersistentVolumeClaim:claimName: example-pvc

实战案例分析

案例:部署 WordPress 应用程序

假设我们想要在 Kubernetes 集群中部署一个 WordPress 应用程序,并希望 WordPress 的数据持久化存储在一个持久卷中。

步骤 1:创建 PV

首先,我们创建一个 PV,用于存储 WordPress 的数据。这里我们使用 hostPath 来定义一个本地存储的 PV:

apiVersion: v1
kind: PersistentVolume
metadata:name: wordpress-pv
spec:capacity:storage: 5GivolumeMode: FilesystemaccessModes:- ReadWriteOncehostPath:path: /mnt/data
步骤 2:创建 PVC

然后,我们创建一个 PVC,声明对 PV 的需求:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: wordpress-pvc
spec:accessModes:- ReadWriteOnceresources:requests:storage: 5Gi
步骤 3:部署 WordPress 应用

接下来,我们部署 WordPress 应用,并将其 PVC 挂载到 Pod 的适当位置,以便存储数据库和媒体文件。这里我们使用 Helm 或者直接编写 Deployment 和 Service 的 YAML 文件来部署 WordPress 和 MySQL。

假设我们使用 Helm,则首先需要添加一个 WordPress 的 Helm 仓库(如果尚未添加),然后安装 WordPress 图表,并指定 PVC 作为存储选项。

helm repo add bitnami https://charts.bitnami.com/bitnami
helm install my-wordpress bitnami/wordpress \--set persistence.enabled=true \--set persistence.existingClaim=wordpress-pvc

在这个 Helm 命令中,--set persistence.enabled=true 启用了持久化存储,--set persistence.existingClaim=wordpress-pvc 指定了现有的 PVC(即 wordpress-pvc)用于存储 WordPress 的数据。

步骤 4:验证部署

部署完成后,你可以通过 Kubernetes Dashboard 或者使用 kubectl 命令来检查 Pod、Service 和 PVC 的状态,确保一切正常运行。

kubectl get pods
kubectl get pvc
kubectl get svc

通过访问 WordPress 服务的外部 IP 地址或域名(如果你配置了 Ingress 或 LoadBalancer),你应该能够访问到你的 WordPress 网站,并看到它正常运行,同时数据存储在指定的 PV 中。

步骤 5:扩展和维护
扩展存储

随着 WordPress 应用程序的使用和数据量的增长,你可能需要扩展存储容量。对于静态供应的 PV,这通常意味着你需要手动创建一个新的、更大容量的 PV,并将应用程序迁移到新的 PV 上。然而,这通常是一个复杂且易出错的过程。

对于动态供应的 PV,情况要好得多。你可以通过修改 PVC 的请求大小来触发存储的动态扩展(如果底层存储系统支持在线扩展)。不过,需要注意的是,并非所有存储系统都支持在线扩展,而且即使支持,也需要确保 Kubernetes 集群和存储系统都正确配置以支持这一功能。

备份和恢复

为了保障数据的安全性,定期备份 WordPress 的数据是非常重要的。你可以使用 Kubernetes 的备份工具(如 Velero)来定期备份 PVC 关联的数据卷。Velero 可以与各种存储系统一起工作,提供灵活的数据备份和恢复选项。

在需要恢复数据时,你可以使用 Velero 或其他备份工具将备份的数据恢复到指定的 PVC 中。这通常涉及到创建一个新的 PVC(如果原始 PVC 已删除或损坏),然后将备份数据恢复到该 PVC 关联的数据卷中。

监控和日志

为了保持 WordPress 应用程序的稳定性和性能,监控和日志记录也是必不可少的。你可以使用 Kubernetes 的监控工具(如 Prometheus 和 Grafana)来监控 Pod、Service 和 PVC 的状态,以及资源使用情况(如 CPU、内存和存储)。

同时,确保 WordPress 应用程序和 MySQL 数据库都配置了适当的日志记录级别,以便在出现问题时能够快速定位和解决问题。

步骤 6:更新和升级

随着 WordPress 和其依赖项(如 MySQL)的更新和升级,你可能需要定期更新你的应用程序以利用新功能和安全修复。

如果你使用 Helm 部署了 WordPress,那么更新和升级通常会比较简单。你可以使用 Helm 的 upgrade 命令来更新到新的 Helm 图表版本,或者修改现有的 Helm 图表配置以应用更改。

然而,在更新和升级之前,请务必备份你的数据和配置,以便在出现问题时能够恢复到更新之前的状态。

总结

通过本实战案例分析,我们不仅展示了如何在 Kubernetes 中使用 PV 和 PVC 来部署一个持久化存储的 WordPress 应用程序,还讨论了扩展存储、备份和恢复、监控和日志记录以及更新和升级等关键方面。这些步骤和最佳实践将帮助你更好地管理 Kubernetes 中的存储资源,并确保你的应用程序能够稳定运行并满足业务需求。

记住,Kubernetes 的强大之处在于其灵活性和可扩展性。通过充分利用 PV 和 PVC 以及其他 Kubernetes 功能,你可以构建出高度可靠、可扩展和可维护的应用程序架构。

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

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

相关文章

C语言实现数据结构线性表之顺序栈

来一个C语言版本链表完整操作 #include<stdio.h>#define MAXLEN 100 /*顺序栈存储空间的总分配量*/ typedef int DataType; /*定义DataType为int类型*/ typedef struct /*顺序栈存储类型*/ { DataType data[MAXLEN]; /…

FPGA与ASIC:深入解析芯片设计的双子星

前言 在半导体世界里&#xff0c;FPGA&#xff08;Field-Programmable Gate Array&#xff0c;现场可编程门阵列&#xff09;与ASIC&#xff08;Application-Specific Integrated Circuit&#xff0c;专用集成电路&#xff09;是两种截然不同的芯片设计策略&#xff0c;各自在…

【ubuntu】目录下文件太多导致rm指令无法执行问题解决方法

目录下文件太多导致rm指令无法执行问题解决方法 背景 设备在实际运行中生成大量小文件&#xff0c;在一定条件下需要删除全部文件&#xff0c;由于文件过多无法运行rm指令&#xff0c;如何来删除文件那&#xff1f; 使用rsync删除文件 在Ubuntu系统上&#xff0c;rsync 是一…

【JavaScript】点击穿透

点击穿透是指在某些场景下&#xff0c;⽤户在快速点击⻚⾯元素时&#xff0c;由于某些原因&#xff08;例如⽹络延迟&#xff09;&#xff0c; 在前⼀个元素上的点击事件还没有完成时&#xff0c;下⼀个元素的点击事件就已经触发了&#xff0c;导致⽤户感 觉到⻚⾯点击⽆效或者…

Facebook的创新之路:科技驱动的社交革命

Facebook自2004年创立以来&#xff0c;已经从一个大学校园内的社交网站发展成为全球最大的社交媒体平台。其成功的背后&#xff0c;不仅仅是广泛的用户基础和高效的运营模式&#xff0c;更在于其不断推进的技术创新。本文将探讨Facebook在技术创新方面的诸多努力&#xff0c;如…

数据结构:基本概念

基本概念 1. 数据&#xff08;Data&#xff09;2. 数据元素&#xff08;Data Element&#xff09;3. 数据项&#xff08;Data Item&#xff09;4. 数据对象&#xff08;Data Object&#xff09;5. 数据结构&#xff08;Data Structure&#xff09;具体示例总结 在数据结构中&am…

C#入门与精通

C#精通 本文章主要是对于学习C#基础难点进行学习以及与java语言的不同点&#xff0c;详细学习可见官网&#xff1a;https://dotnet.microsoft.com/en-us/learn 文章目录 C#精通VSVS基本设置 C#是什么C#程序控制台输出变量内插占位符C#foreach循环类型转换操作数组内置方法格式设…

Python爬虫(5) --爬取网页视频

文章目录 爬虫爬取视频指定url发送请求UA伪装请求页面 获取想要的数据解析定位定位音视频位置 存放视频完整代码实现总结 爬虫 Python 爬虫是一种自动化工具&#xff0c;用于从互联网上抓取网页数据并提取有用的信息。Python 因其简洁的语法和丰富的库支持&#xff08;如 requ…

数据结构--二叉树详解

一&#xff0c;概念 1&#xff0c;结点的度&#xff1a;一个结点含有子树的个数称为该结点的度 2&#xff0c; 树的度&#xff1a;一棵树中&#xff0c;所有结点度的最大值称为树的度&#xff1b; 3&#xff0c;叶子结点或终端结点&#xff1a;度为0的结点称为叶结点&#x…

go语言Gin框架的学习路线(十一)

目录 GORM的CRUD教程 更新操作 更新所有字段 更新指定字段 使用 Select 和 Omit 更新 无 Hooks 更新 批量更新 删除操作 删除记录 批量删除 软删除 物理删除 示例代码 GORM的CRUD教程 CRUD 是 "Create, Read, Update, Delete"&#xff08;创建、查询、…

VBA OneDrive下的ThisWorkbook.Path

OneDrive下的ThisWorkbook.Path Dim strPath As StringIf InStr(ThisWorkbook.Path, "https://myoffice") > 0 ThenstrPath Environ("OneDrive") & Mid(ActiveWorkbook.Path, Application.Find("", Application.Substitute(ActiveWorkbo…

Hyperledger顶级项目特点和介绍

Hyperledger的顶级项目 Hyperledger是Linux基金会主持的开源区块链项目&#xff0c;其目的是推动跨行业的区块链技术的开发和应用。以下是Hyperledger的顶级项目&#xff1a; 1. Hyperledger Fabric 描述&#xff1a;Hyperledger Fabric是一个可扩展的企业级区块链平台&…

新手小白的pytorch学习第八弹------分类问题模型和简单预测

目录 1 启动损失函数和优化器2 训练模型创建训练和测试循环 3 预测和评估模型 这篇是接着新手小白的pytorch学习第七弹------分类问题模型这一篇的&#xff0c;代码也是哟~ 1 启动损失函数和优化器 对于我们的二分类问题&#xff0c;我们经常使用 binary cross entropy 作为损…

一文讲透useMemo和useCallback

在React项目中是经常会使用到useMemo&#xff0c;useCallBack的&#xff0c;这是两个优化性能的方法&#xff0c;那么useMemo&#xff0c;useCallBack到底是什么呢&#xff1f;什么时候用呢&#xff1f; 下面将给打击分享相关知识&#xff0c;希望对大家有所帮助同时欢迎讨论指…

【java基础】spring中使用到的设计模式

Spring框架在其设计和实现中使用了多种设计模式&#xff0c;这些模式帮助Spring框架保持灵活性、可扩展性和易于集成的特点。以下是一些在Spring框架中常见和重要的设计模式&#xff1a; 工厂模式&#xff08;Factory Pattern&#xff09; Spring的核心容器使用了工厂模式&…

Redis在SpringBoot中配置

lettuce redis的使用方法有两种&#xff0c;jedis和lecttuce&#xff0c;jedis用的不是很多&#xff0c;下面讲解用lettuce的使用方法。 首先导包&#xff1a; <!--redis依赖--> <dependency><groupId>org.springframework.boot</groupId><artif…

机器视觉系列之【硬件知识】-工业相机(四)

目录 几个高频面试题目 工业彩色相机如何调节白平衡解决偏色问题 算法原理 多光谱成像技术和相机选型 多光谱相机技术 选择多光谱成像相机技术时的主要考虑因素 智慧工厂机器视觉感知与控制 1 智慧工厂与机器视觉检测控制技术 2 智慧工厂机器视觉感知与控制 基于机器视…

conda常用命令整理

Anaconda是一个流行的Python和R编程语言的开源发行版&#xff0c;用于科学计算和数据分析。它包含了许多常用的开源软件包和工具&#xff0c;适用于数据科学、机器学习、大数据处理和科学计算等领域。Anaconda的核心是conda。conda是一个包管理器和环境管理器&#xff0c;可以轻…

详解yolov5和yolov8以及目标检测相关面试

一、与yoloV4相比&#xff0c;yoloV5的改进 输入端&#xff1a;在模型训练阶段&#xff0c;使用了Mosaic数据增强、自适应锚框计算、自适应图片缩放基准网络&#xff1a;使用了FOCUS结构和CSP结构Neck网络&#xff1a;在Backbone和最后的Head输出层之间插入FPN_PAN结构Head输出…

[NOIP2009 提高组] 最优贸易(含代码题解)

[NOIP2009 提高组] 最优贸易 题目描述 C C C 国有 n n n 个大城市和 m m m 条道路&#xff0c;每条道路连接这 n n n 个城市中的某两个城市。任意两个城市之间最多只有一条道路直接相连。这 m m m 条道路中有一部分为单向通行的道路&#xff0c;一部分为双向通行的道路&am…