【云原生】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.rhkb.cn/news/382452.html

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

相关文章

nginx漏洞修复 ngx_http_mp4_module漏洞(CVE-2022-41742)【低可信】 nginx版本升级

风险描述: Nginx 是一款轻量级的Web服务器、反向代理服务器。 Nginx 的受影响版本中的ngx _http_mp4_module模块存在内存越界写入漏洞,当在配置中使用 mp4 directive时,攻击者可利用此漏洞使用使用ngx_http_mp4_module模块处理特制的音频或视…

Hive分布式SQL计算平台

Hive分布式SQL计算平台 一、Hive 概述二、Hive架构三、Hive客户端 1、Hive有哪些客户端可以使用2、Hive第三方客户端 四、Hive使用语法 1、数据库操作2、内部表,外部表3、数据的导入与导出4、分区表5、分桶表6、复杂类型操作7、数据抽样8、Virtual Columns 虚拟列9…

springboot 项目整合 AI (文心一言)

百度智能云网址:https://cloud.baidu.com/?fromconsole 注册——个人认证——登录成功 第一步:点击千帆大模型平台 ​ 第二步:点击应用接入——创建应用 ​ 第三步:点击接口文档——API列表——可以点击指定模型进行查看调…

Spring Boot集成Activity7实现简单的审批流

由于客户对于系统里的一些新增数据,例如照片墙、照片等,想实现上级逐级审批通过才可见的效果,于是引入了Acitivity7工作流技术来实现,本文是对实现过程的介绍讲解,由于我是中途交接前同事的这块需求,所以具…

DolphinDB Web 端权限管理:可视化操作指南

在现代数据库管理中,高效和直观的权限管理对于用户的数据安全是至关重要的。过去 DolphinDB 用户需要依赖系统脚本来管理用户和权限,这对于缺乏技术背景的管理员来说既复杂又容易出错。 为了提升用户体验和操作效率,DolphinDB 目前在 Web 上…

【ACM出版】2024集成电路设计与集成系统国际研讨会(ICDIS2024)

会议日期:2024年11月22-24日 会议地点:中国-厦门 会议官网:https://www.iaast.cn/meet/home/Bx122dOo 【大会主席】 Sri Niwas Singh,印度信息技术与管理研究所 【主讲嘉宾】 【论文出版与检索】 大会即日起围绕主题征集会…

Beyond Compare 5 for Mac/Win:高效文件同步与对比的专业工具

Beyond Compare 5是一款专为Mac和Windows用户设计的强大文件同步与对比软件,由Scooter Software精心打造。它凭借卓越的功能和易用性,在软件开发、系统管理和数据同步领域广受好评。 这款软件支持多种文件类型的对比,包括文件夹、文本文件、…

(7) cmake 编译C++程序(二)

文章目录 概要整体代码结构整体代码小结 概要 在ubuntu下,通过cmake编译一个稍微复杂的管理程序 整体代码结构 整体代码 boss.cpp #include "boss.h"Boss::Boss(int id, string name, int dId) {this->Id id;this->Name name;this->DeptId …

开发环境搭建

1、Ubuntu 系统设置 root 用户密码 新安装的ubuntu没有设置 root 用户密码,打开终端,输入 sudo passwd root 执行命令后依次输入密码 2、虚拟机设置网络适配器 3、Ubuntu 系统下搭建 FTP 服务器 sudo apt-get update sudo apt-get install vsftpd sudo apt-get install vim…

如何切换网络IP地址?IP切换的应用与方法

随着互联网的发展和普及,我们日常生活中的各种操作和通讯越来越依赖互联网。互联网上存在的一些问题和限制使得更换IP地址成为必要的步骤。下面我们将探讨在互联网业务中,需要更换IP地址的原因与方法。 一、IP轮换的应用 解决访问限制:解决访…

HTTPServer改进思路1

Nginx源码思考项目改进 架构模式 事件驱动架构(EDA)用于处理大量并发连接和IO操作 优点:高效处理大量并发请求,减少线程切换和阻塞调用技术实现:直接使用EPOLL,参考Node.js的http服务器 网络通信 协议:HTT…

Spark_Oracle_II_Spark高效处理Oracle时间数据:通过JDBC桥接大数据与数据库的分析之旅

接前文背景, 当需要从关系型数据库(如Oracle)中读取数据时,Spark提供了JDBC连接功能,允许我们轻松地将数据从Oracle等数据库导入到Spark DataFrame中。然而,在处理时间字段时,可能会遇到一些挑战…

上手实测!绿联新系统虚拟机真的卡到爆?!

上手初体验 入手绿联DXP2800也有一段时间了,先说一下这段时间的使用体验吧。刚收到设备的时候确实遇到了不少的问题,如网友普遍反映的UGREENlink服务无法连接、AI占用CPU资源、设备高温等问题我都遇到了 目前更新固件的频率已提升至约一两天一次。尽管仍存在一些小BUG,但不影响…

银行业务知识全篇(财务知识、金融业务知识)

第一部分 零售业务 1.1 储蓄业务 4 1.1.1 普通活期储蓄(本外币) 4 1.1.2 定期储蓄(本外币) 5 1.1.3 活期一本通 9 1.1.4 定期一本通 10 1.1.5 电话银行 11 1.1.6 个人支票 11 1.1.7 通信存款 13 1.1.8 其他业务规…

学习大数据DAY22 Linux 基 本 指 令 3与 在 Linux 系 统 中 配 置MySQL 和 Oracle

目录 网络配置类 ps 显示系统执行的进程 kill systemctl 服务管理 配置静态 ip 常见错误---虚拟机重启网卡失败或者网卡丢失 mysql 操作 上机练习 6---安装 mysql---参考《mysql 安装》文档 解锁 scott 重启后的步骤 上机练习 7---安装 oracle---参考《oracle 安装》…

三星Unpacked发布会即将举行:有新款折叠屏手机,还有智能戒指

随着7月的脚步渐近,科技界的目光再次聚焦于三星,它即将在法国巴黎举办今年的第二场Unpacked发布会。这不仅是一场新品的展示,更是三星对创新科技的一次深刻诠释。 从Galaxy Z Fold 6的全新设计,到Galaxy Z Flip 6的显著升级&…

Transformer自然语言处理实战pdf阅读

一.第一章 欢迎来到transformer的世界 1.解码器-编码器框架 在Transformer出现之前,NLP的最新技术是LSTM等循环架构。这些架 构通过在神经网络连接使用反馈循环,允许信息从一步传播到另一 步,使其成为对文本等序列数据进行建模的理想选择。如…

QtCreator和QtDesignStudio最佳实践

一、QTC和QDS工作流概述 很多初学者对 QDS(Qt Design Studio) 和 QTC(Qt Creator)如何配合经常存有疑问,本文介绍具体的工作流程。 工作流程 1.产品设计:通过PS、Figma、XD等专业工具设计页面视觉和原型。 2.QDS 原型制作:导入设计源文件、…

【数据结构】二叉树——顺序结构——堆及其实现

一、树 1.1、树的概念和结构 树是一种非线性的数据结构,它是由n(n>0)个有限节点组成的一个具有层次关系的集合。 树有一个特殊的节点,称为根节点,根节点没有前驱结点。 除根节点外,其余部分被分为M&…

企业级 线上故障排查思路

线上故障排查思路 WARNING 简介:有哪些常见的线上故障?如何快速定位问题?本文详细总结工作中的经验,从服务器、Java应用、数据库、Redis、网络和业务六个层面分享线上故障排查的思路和技巧。较长,同学们可收藏后再看。…