Administrator
发布于 2026-08-16 / 6 阅读
0
0

第七章.k8s存储-pv/pvc-3

来源链接:https://www.bilibili.com/video/BV1PbeueyE8V?spm_id_from=333.788.videopod.episodes&vd_source=d8c71ff24a3359a807967fc4b5daa0e4&p=53

一、NFS共享存储预测试

为验证后续PV与PVC的绑定关系,讲师首先在NFS服务器上完成共享目录预测试:

  • 在NFS服务器的/data/nfs_data目录下创建1-10共10个测试目录,每个目录下均创建index文件,内容为对应目录序号(1~10),可通过for循环批量创建,该步骤仅用于实验验证,生产环境无需执行。
  • 修改NFS的/etc/exports配置文件,为10个目录配置共享规则:允许所有客户端挂载(*)、读写模式(rw)、禁止root用户挂载(no_root_squash、no_all_squash)、同步写入硬盘(sync)。
  • 重启NFS服务:注意RHEL 8及以下版本服务名为nfs,RHEL 9系列服务名为nfs-server,重启后需同步重启rpcbind服务。
  • 执行showmount -e 192.168.66.11可查看当前NFS共享结果,验证配置生效。
  • 客户端挂载测试:在客户端创建挂载点/nfs_test,执行mount -t nfs 192.168.66.11:/data/nfs_data/1 /nfs_test,挂载成功后可在挂载点看到index文件,向文件追加内容后,在NFS服务器端对应目录可查看到新增内容,验证NFS共享正常,测试完成后卸载挂载。

二、PV(持久化卷)创建与绑定规则

2.1 PV资源清单基础配置

PV属于Kubernetes核心API组(v1),资源清单核心字段包括:

  • 元数据:PV名称、容量、访问模式(演示使用单节点读写RWO)
  • 存储配置:持久化卷回收策略(Recycle/Retain)、存储类(StorageClass)名称、后端NFS服务器地址、共享路径

2.2 PV与PVC绑定规则

PVC(持久化卷申请)与PV绑定需满足以下强制要求:

  • PVC请求的容量必须小于等于PV的总容量
  • 访问模式必须完全一致
  • 存储类(StorageClass)名称必须相同
  • 回收策略无强制兼容要求

2.3 批量PV创建与1.29版本新特性

为演示绑定逻辑,讲师在单个PV资源清单文件中批量配置了10个PV,每个PV配置略有差异(如PV2容量0.9G、PV5为多节点读写RWX、PV6存储类为NFS-1、PV7回收策略为Retain保留模式),路径对应之前创建的1~10号NFS共享目录。
执行kubectl create -f pv.yaml创建PV后,执行kubectl get pv可查看所有PV状态为Available,同时可看到Kubernetes 1.29版本新增alpha特性:支持修改PV的运行信息(容量除外),该特性尚处于测试阶段,建议等待beta版本再使用。

三、StatefulSet(有状态副本集)核心特性演示

3.1 前置配置:无头服务(Headless Service)

无头服务是专门供给StatefulSet使用的特殊Service,核心配置为spec.clusterIP: None,不会创建负载均衡集群,仅生成DNS解析记录。
无头服务的DNS解析会返回所有匹配标签选择器的Pod的IP地址,而非负载均衡VIP,可实现Pod级别的精准服务发现。

3.2 StatefulSet资源清单配置

StatefulSet属于apps API组v1版本,核心配置包括:

  • 关联无头服务名称为nginx,副本数为3
  • 标签选择器匹配app=nginx,Pod模板标签同样为app=nginx,使用1.0版源码包镜像,端口80别名为web
  • 配置volumeClaimTemplates(PVC模板),名称为www,请求单节点读写权限、存储类NFS、容量1G,StatefulSet会基于该模板为每个Pod自动创建对应PVC,PVC再自动绑定符合条件的PV,PVC命名格式为<模板名>-<StatefulSet名>-<序号>,如www-web-0。
  • StatefulSet的Pod名称格式为<StatefulSet名>-<序号>,如web-0、web-1、web-2。

3.3 核心特性1:有序创建与有序回收

StatefulSet的Pod创建和回收均遵循序号顺序:

  • 有序创建:从序号0开始依次创建Pod,必须等待上一个Pod运行就绪后才会创建下一个Pod,和Deployment一次性创建所有Pod的特性有明显区别。
  • 有序回收:缩容时从最后一个Pod(序号最大)开始销毁,先向Pod发送终止信号,再执行删除操作,而非等待最后一个Pod完全销毁后再处理上一个。

3.4 核心特性2:Pod级别数据持久化

StatefulSet的Pod绑定PVC后,数据存储在NFS后端,不会随Pod的销毁而丢失:
演示操作:进入Pod web-0的/usr/lshare/nginx/html目录,向index.html追加内容后删除Pod,StatefulSet会自动重建Pod,新Pod的IP会发生变化,但再次访问时index.html的内容依然存在,验证数据持久化生效,且该持久化是Pod级别的,即使Pod被完全重建,数据依然保持一致。

3.5 核心特性3:稳定的网络访问方式

虽然Pod的IP会随重建发生变化,但StatefulSet提供固定的域名访问方式,域名格式为:
<pod名称>.<无头服务名称>.<命名空间>.svc.cluster.local
如访问web-0的域名为web-0.nginx.default.svc.cluster.local,即使Pod被销毁重建,只要名称不变,DNS会自动更新解析记录,访问方式保持稳定。演示中删除Pod后等待DNS更新,再次通过域名访问依然能获取正确内容,验证该特性生效。

四、PV与PVC绑定逻辑详解

PV与PVC的绑定过程分为预选和优选两个阶段:

  1. 预选阶段:筛选出满足PVC最低要求的PV,必须同时满足容量≥PVC请求容量、访问模式一致、存储类名称一致,不满足条件的PV直接排除。如演示中PV2容量0.9G不满足1G请求、PV5为RWX模式不满足RWO要求、PV6存储类为NFS-1不匹配NFS,均未通过预选。
  2. 优选阶段:对通过预选的多个PV进行打分排序,优先选择优先级更高的PV:
    • 回收策略为Retain(保留模式)的PV优先级高于Recycle(回收模式)
    • 若多个PV配置完全相同,则随机选择
    • 若PV容量远大于PVC请求容量,会判定为资源浪费,优先级降低。

AI 总结

本视频为Kubernetes v1.29版本存储章节的实操教程,通过NFS共享存储的实验演示,完整讲解了PV的资源配置、PV与PVC的绑定规则(预选+优选算法),同时结合StatefulSet的实操演示,明确了其三大核心特性:有序创建/回收、Pod级别数据持久化、稳定的域名访问方式,帮助学习者掌握Kubernetes有状态应用的存储配置与调度逻辑,适合作为k8s存储模块的入门实践内容。


评论