K8S 持久化之静态PV (nfs)

K8S 持久化之 静态PV (NFS)
K8S部署见上篇:
https://blog.csdn.net/oToyix/article/details/117963839

一、概念

Persistent volume

Persistent Volume (持久存储卷)简称PV,是一个K8S资源对象,所以我们可以单独创建一个PV。它不和Pod直接发生关系,而是通过Persistent Volume Claim(PV索取),简称PVC来实现动态绑定。Pod定义里指定的是PVC,然后PVC会根据Pod的要求去自动绑定合适的PV给Pod使用。

PV的访问模式有三种:

1、ReadWriteOnce:

是最基本的方式,可读可写,但只支持被单个Pod挂载。简称:RWO – ReadWriteOnce

2、ReadOnlyMany:

可以以只读的方式被多个Pod挂载。 简称:ROX – ReadOnlyMany

3、ReadWriteMany:

简称:RWX – ReadWriteMany。这种存储可以以读写的方式被多个Pod共享。不是每一种存储都支持

这三种方式,像共享方式,目前支持的还比较少,比较常用的是NFS。

PVC绑定PV时通常根据两个条件来绑定,“存储的大小” 及 “访问模式”。

创建PV有两种方式:

静态PV

管理员手动创建一堆PV,组成一个PV池,供PVC来绑定。

动态PV

在现有PV不满足PVC的请求时,可以使用存储分类(StorageClass),描述具体过程为:PV先创建分类,PVC请求已创建的某个类(StorageClass)的资源,这样就达到动态配置的效果。即通过一个叫 Storage Class的对象由存储系统根据PVC的要求自动创建。

PV创建完后状态会变成Available,等待被PVC绑定。一旦被PVC邦定,PV的状态会变成Bound,就可以被定义了相应PVC的Pod使用。Pod使用完后会释放PV,PV的状态变成Released。变成Released的PV会根据定义的回收策略做相应的回收工作。

PV有三种回收策略:

1、Retain

Retain就是保留现场,K8S什么也不做,等待用户手动去处理PV里的数据,处理完后,再手动删除PV。

2、Delete

Delete 策略,K8S会自动删除该PV及里面的数据。

3、Recycle。

Recycle方式,K8S会将PV里的数据删除,然后把PV的状态变成Available,又可以被新的PVC绑定使用。

在实际使用场景里,PV的创建和使用通常不是同一个人。一般为:管理员创建一个PV池,开发人员创建Pod和PVC,PVC里定义了Pod所需存储的大小和访问模式,然后PVC会到PV池里自动匹配最合适的PV给Pod使用。

二、K8S+NFS静态存储模式案例:

1、基于Linux平台构建NFS网络文件系统,配置指令如下:

#安装NFS文件服务;	
yum install nfs-utils -y
#配置共享目录&权限;
mkdir -p /data/nginx/conf
mkdir -p /data/nginx/html
vim /etc/exports
/data/ *(rw,sync,no_root_squash
### Kubernetes 数据持久化的实现方式 在 Kubernetes 中,数据持久化主要依赖于 **PersistentVolume (PV)** 和 **PersistentVolumeClaim (PVC)** 这两个核心概念来完成。以下是关于它们的工作原理以及如何配合实现数据持久化的详细介绍。 #### 1. Persistent Volume (PV) PV 是集群中的存储资源,它代表了一种可供使用的存储介质,比如 NFS、iSCSI 或云提供商的存储服务(如 AWS EBS)。这些存储资源通常由集群管理员预先创建并配置好。PV 定义了存储的具体特性,例如容量大小和其他可能的参数(当前主要是存储大小,未来可能会扩展支持其他属性,如 IOPS 或吞吐量等[^4])。 #### 2. Persistent Volume Claim (PVC) PVC 表示一种对存储资源的需求声明。它是用户提交给系统的请求,指定了所需的存储空间大小以及其他约束条件(例如特定的 `StorageClass`)。当一个 PVC 被创建后,Kubernetes 将尝试找到一个满足其需求的 PV 并绑定到这个 PVC 上。一旦成功绑定,Pod 可以通过挂载此 PVC 来访问底层的实际存储资源[^3]。 #### 3. StorageClass 动态供给机制 为了简化管理和提高灵活性,自 Kubernetes v1.4 开始引入了名为 `StorageClass` 的新功能[^5]。这种类型的对象允许定义不同种类的存储类别及其行为模式。借助于此工具,不仅可以静态分配预设好的 PV 给相应的 PVC 请求者使用,还能够在必要情况下自动触发新的 PV 创建流程——即所谓的“动态供应”。这意味着即使没有提前准备好足够的固定数量的 PV 实例,在适当条件下仍然可以根据实际需要即时生成额外可用实例供后续利用。 #### 示例代码展示如何设置简单的NFS基础架构下的PV/PVC关联关系: ```yaml apiVersion: v1 kind: PersistentVolume metadata: name: nfs-pv spec: capacity: storage: 10Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain nfs: path: /exports/data server: 192.168.1.100 --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: app-data-claim spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi ``` 上述 YAML 文件片段展示了如何定义一个基于 NFS 协议的 PV,并且同时设置了相匹配的一个较小尺寸的 PVC 。注意这里的 reclaim policy 设置成了 retain ,意味着即便将来删除掉与之相连联结起来的应用程序组件之后也不会销毁原始的数据集内容本身。 --- ### 总结 综上所述,通过合理运用 PVPVC 结合 StorageClass 所带来的强大功能组合形式下,我们可以轻松达成针对各种场景应用环境之下高效可靠的数据保存解决方案目标!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值