Kubernetes基础(十九)-k8s存储对象Persistent Volume Claim

本文主要是介绍Kubernetes基础(十九)-k8s存储对象Persistent Volume Claim,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 什么是Persistent Volume Claim?

在容器编排中,Pod的生命周期是短暂的,当Pod终止时,其中的数据通常也会被销毁。为了解决这个问题,Kubernetes引入了Persistent Volume(PV)和Persistent Volume Claim(PVC)的概念。

PVC是对PV的一种声明,它定义了Pod对存储资源的需求。Pod通过PVC来请求PV,而PV则提供了实际的存储资源。PVC的引入使得开发者无需关心底层存储的细节,能够更灵活地使用和管理存储。

2 Persistent Volume Claim的基本结构

PVC有一些基本的属性和状态,这些属性决定了PVC的行为和与PV的关联。

2.1 Access Modes(访问模式)

PVC支持与PV相同的访问模式,用于定义Pod如何与PV进行交互。主要有以下三种访问模式:

  • ReadWriteOnce(RWO): 读写模式,只能被单个Pod挂载为读写模式。
  • ReadOnlyMany(ROX): 只读模式,可以被多个Pod挂载为只读模式。
  • ReadWriteMany(RWX): 读写模式,可以被多个Pod挂载为读写模式。

2.2 Storage Class(存储类)

PVC可以选择性地指定Storage Class,用于指导Kubernetes动态地创建PV。Storage Class定义了PV的属性,包括存储类型、访问模式等。

2.3 Resources(资源需求)

PVC可以定义对存储资源的需求,包括容量和访问模式。这决定了K8s为Pod提供的PV的选择。

2.4 Status(状态)

PVC的状态包括当前的Phase,表示PVC的生命周期阶段,可能包括Pending、Bound、Lost等

3 Persistent Volume Claim的使用示例

为了更好地理解Persistent Volume Claim的使用,以下是一个详细的示例,涉及PVC的创建、Pod的声明和与PV的关联。

步骤1:创建Persistent Volume

首先,我们创建一个PV,作为实际的存储资源。

apiVersion: v1
kind: PersistentVolume
metadata:name: my-pv
spec:capacity:storage: 1GivolumeMode: FilesystemaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: manualhostPath:path: "/mnt/data"

在这个例子中,我们创建了一个1Gi容量的PV,使用了ReadWriteOnce的访问模式,并指定了Retain的回收策略。PV的存储类为manual,表示这是一个手动创建的PV。PV的存储路径为/mnt/data

步骤2:创建Persistent Volume Claim

接下来,我们创建一个PVC,用于声明对存储资源的需求。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: my-pvc
spec:accessModes:- ReadWriteOncestorageClassName: manualresources:requests:storage: 1Gi

在这个例子中,我们创建了一个PVC,请求1Gi容量,并指定了ReadWriteOnce的访问模式和manual的存储类。

步骤3:创建Pod

最后,我们创建一个Pod,并将PVC挂载到Pod的路径中。

apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:containers:- name: my-containerimage: nginxvolumeMounts:- name: my-storagemountPath: "/usr/share/nginx/html"volumes:- name: my-storagepersistentVolumeClaim:claimName: my-pvc

这个Pod使用了Nginx镜像,并将PVC挂载到了/usr/share/nginx/html路径。这样,Pod就能够访问并写入PV中的持久化数据。

步骤4:验证

通过访问Pod中挂载的路径,我们可以验证数据是否能够持久化。

kubectl exec -it my-pod -- /bin/sh
# 在Pod中执行以下命令
echo "Hello, Persistent Volume Claim!" > /usr/share/nginx/html/index.html
exit

通过访问PV的存储路径,我们也可以验证数据是否持久化。

cat /mnt/data/index.html

4 Persistent Volume Claim的优势

  1. 抽象存储细节: PVC允许Pod声明对存储的需求,而无需关心底层存储的细节。这使得应用程序更加灵活和可移植。
  2. 动态存储: 通过Storage Class,PVC可以实现动态地创建PV,使得存储的管理更加灵活,无需手动创建和管理PV。
  3. 持久化存储: PVC可以确保应用程序的数据在Pod重启或迁移时得以保留,提供了持久化存储的解决方案。

这篇关于Kubernetes基础(十九)-k8s存储对象Persistent Volume Claim的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/724194

相关文章

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Redis存储的列表分页和检索的实现方法

《Redis存储的列表分页和检索的实现方法》在Redis中,列表(List)是一种有序的数据结构,通常用于存储一系列元素,由于列表是有序的,可以通过索引来访问元素,因此可以很方便地实现分页和检索功能,... 目录一、Redis 列表的基本操作二、分页实现三、检索实现3.1 方法 1:客户端过滤3.2 方法

JSON字符串转成java的Map对象详细步骤

《JSON字符串转成java的Map对象详细步骤》:本文主要介绍如何将JSON字符串转换为Java对象的步骤,包括定义Element类、使用Jackson库解析JSON和添加依赖,文中通过代码介绍... 目录步骤 1: 定义 Element 类步骤 2: 使用 Jackson 库解析 jsON步骤 3: 添

C++中使用vector存储并遍历数据的基本步骤

《C++中使用vector存储并遍历数据的基本步骤》C++标准模板库(STL)提供了多种容器类型,包括顺序容器、关联容器、无序关联容器和容器适配器,每种容器都有其特定的用途和特性,:本文主要介绍C... 目录(1)容器及简要描述‌php顺序容器‌‌关联容器‌‌无序关联容器‌(基于哈希表):‌容器适配器‌:(

Kubernetes常用命令大全近期总结

《Kubernetes常用命令大全近期总结》Kubernetes是用于大规模部署和管理这些容器的开源软件-在希腊语中,这个词还有“舵手”或“飞行员”的意思,使用Kubernetes(有时被称为“... 目录前言Kubernetes 的工作原理为什么要使用 Kubernetes?Kubernetes常用命令总

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

Spring常见错误之Web嵌套对象校验失效解决办法

《Spring常见错误之Web嵌套对象校验失效解决办法》:本文主要介绍Spring常见错误之Web嵌套对象校验失效解决的相关资料,通过在Phone对象上添加@Valid注解,问题得以解决,需要的朋... 目录问题复现案例解析问题修正总结  问题复现当开发一个学籍管理系统时,我们会提供了一个 API 接口去

k8s部署MongDB全过程

《k8s部署MongDB全过程》文章介绍了如何在Kubernetes集群中部署MongoDB,包括环境准备、创建Secret、创建服务和Deployment,并通过Robo3T工具测试连接... 目录一、环境准备1.1 环境说明1.2 创建 namespace1.3 创建mongdb账号/密码二、创建Sec

Java如何通过反射机制获取数据类对象的属性及方法

《Java如何通过反射机制获取数据类对象的属性及方法》文章介绍了如何使用Java反射机制获取类对象的所有属性及其对应的get、set方法,以及如何通过反射机制实现类对象的实例化,感兴趣的朋友跟随小编一... 目录一、通过反射机制获取类对象的所有属性以及相应的get、set方法1.遍历类对象的所有属性2.获取

MySQL中my.ini文件的基础配置和优化配置方式

《MySQL中my.ini文件的基础配置和优化配置方式》文章讨论了数据库异步同步的优化思路,包括三个主要方面:幂等性、时序和延迟,作者还分享了MySQL配置文件的优化经验,并鼓励读者提供支持... 目录mysql my.ini文件的配置和优化配置优化思路MySQL配置文件优化总结MySQL my.ini文件