K8s持久化存储:pig平台PVC与NFS存储配置全解析
【免费下载链接】pig 项目地址: https://gitcode.com/gh_mirrors/pig/pig
一、K8s存储痛点与解决方案
1.1 容器存储的三大核心挑战
在Kubernetes(K8s)环境中部署微服务时,持久化存储始终是架构设计的关键环节。以pig微服务平台为例,用户常面临以下痛点:
- 数据持久性缺失:容器重启导致配置文件与业务数据丢失
- 存储资源管理混乱:多服务存储需求差异化难以统一调度
- 跨节点数据共享困难:分布式部署场景下的数据一致性问题
1.2 解决方案架构
本文将通过"理论+实战"方式,系统讲解如何基于NFS(Network File System,网络文件系统)实现pig平台的持久化存储,方案架构如下:
二、NFS存储基础与环境准备
2.1 NFS工作原理
NFS允许网络中的计算机之间通过TCP/IP网络共享资源,其工作流程包括:
- 客户端发起挂载请求
- NFS服务器验证权限
- 建立数据传输通道
- 实现文件系统远程挂载
2.2 环境部署清单
| 组件 | 版本要求 | 作用 |
|---|---|---|
| Kubernetes | 1.20+ | 容器编排平台 |
| NFS服务器 | 4.2+ | 提供网络存储服务 |
| pig平台 | 最新版 | 微服务应用 |
| helm | 3.0+ | K8s包管理工具 |
2.3 NFS服务器部署(CentOS 7)
# 安装NFS服务
yum install -y nfs-utils rpcbind
# 创建共享目录
mkdir -p /data/nfs/pig/{auth,upms,visual}
chmod -R 777 /data/nfs/pig
# 配置共享策略
cat > /etc/exports << EOF
/data/nfs/pig/auth *(rw,no_root_squash,sync)
/data/nfs/pig/upms *(rw,no_root_squash,sync)
/data/nfs/pig/visual *(rw,no_root_squash,sync)
EOF
# 启动服务
systemctl start rpcbind nfs-server
systemctl enable rpcbind nfs-server
# 验证服务状态
showmount -e localhost
三、K8s存储核心概念
3.1 PV与PVC的设计哲学
K8s引入PV(Persistent Volume,持久卷)和PVC(Persistent Volume Claim,持久卷声明)实现存储资源的"生产者-消费者"模型:
- PV:集群级别的存储资源,由管理员配置,包含存储类型、大小、访问模式等属性
- PVC:用户对存储资源的请求,类似Pod对CPU/内存的资源申请
3.2 关键访问模式(Access Modes)
| 模式 | 说明 | 适用场景 |
|---|---|---|
| ReadWriteOnce(RWO) | 单节点读写 | 数据库文件 |
| ReadOnlyMany(ROX) | 多节点只读 | 配置文件共享 |
| ReadWriteMany(RWX) | 多节点读写 | 共享日志存储 |
pig平台不同服务推荐访问模式:
- pig-auth:RWO(密钥文件需节点独占)
- pig-upms:RWX(用户数据需多副本共享)
- pig-visual:ROX(报表模板只读共享)
四、PV与PVC配置实战
4.1 NFS存储类定义
首先创建StorageClass资源,实现PVC的动态供应:
# storageclass-nfs.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nfs-storage
provisioner: k8s-sigs.io/nfs-subdir-external-provisioner
parameters:
archiveOnDelete: "false" # 删除PVC时不归档数据
reclaimPolicy: Delete # 回收策略:删除
allowVolumeExpansion: true # 允许卷扩容
4.2 持久卷(PV)配置
# pv-nfs.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pig-nfs-pv
spec:
capacity:
storage: 50Gi # 总存储容量
accessModes:
- ReadWriteMany # 支持多节点读写
persistentVolumeReclaimPolicy: Retain # 保留策略:删除PVC后PV保留
storageClassName: nfs-storage
nfs:
path: /data/nfs/pig # NFS服务器共享路径
server: 192.168.1.100 # NFS服务器IP地址
readOnly: false # 读写模式
4.3 持久卷声明(PVC)配置
为pig平台各核心服务创建PVC:
# pvc-pig.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pig-auth-pvc
namespace: pig
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: nfs-storage
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pig-upms-pvc
namespace: pig
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 20Gi
storageClassName: nfs-storage
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pig-visual-pvc
namespace: pig
spec:
accessModes:
- ReadOnlyMany
resources:
requests:
storage: 5Gi
storageClassName: nfs-storage
五、pig服务存储挂载配置
5.1 部署清单修改
以pig-auth服务为例,修改其Deployment配置:
# deployment-pig-auth.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: pig-auth
namespace: pig
spec:
replicas: 1
template:
spec:
containers:
- name: pig-auth
image: pig4cloud/pig-auth:latest
volumeMounts:
- name: auth-data
mountPath: /app/config # 配置文件挂载点
subPath: config
- name: auth-data
mountPath: /app/logs # 日志文件挂载点
subPath: logs
volumes:
- name: auth-data
persistentVolumeClaim:
claimName: pig-auth-pvc # 绑定PVC
5.2 多服务存储规划
| 服务名称 | 挂载路径 | 存储需求 | 访问模式 |
|---|---|---|---|
| pig-auth | /app/config, /app/logs | 10Gi | RWO |
| pig-upms | /app/data, /app/upload | 20Gi | RWX |
| pig-visual | /app/templates | 5Gi | ROX |
| pig-gateway | /app/ssl | 2Gi | RWO |
六、部署验证与问题排查
6.1 存储状态验证
# 查看PV状态
kubectl get pv -n pig
# 查看PVC状态
kubectl get pvc -n pig
# 验证挂载情况
kubectl exec -it pig-auth-xxx -n pig -- df -h
正常输出示例:
Filesystem Size Used Available Use% Mounted on
/dev/sda1 40.0G 15.2G 24.8G 38% /
192.168.1.100:/data/nfs/pig/auth 10.0G 1.2G 8.8G 12% /app/config
192.168.1.100:/data/nfs/pig/auth 10.0G 1.2G 8.8G 12% /app/logs
6.2 常见问题排查
问题1:PVC一直处于Pending状态
排查步骤:
# 查看PVC事件
kubectl describe pvc pig-auth-pvc -n pig
# 检查NFS服务器连接
telnet 192.168.1.100 2049
解决方案:确保NFS服务正常运行,防火墙开放2049端口,共享目录权限设置正确。
问题2:服务启动后无法写入数据
排查步骤:
# 查看NFS服务器日志
tail -f /var/log/messages | grep nfs
# 检查挂载目录权限
kubectl exec -it pig-auth-xxx -n pig -- ls -ld /app/config
解决方案:在NFS服务器设置共享目录权限为777,或配置正确的安全上下文:
securityContext:
runAsUser: 0
fsGroup: 0
七、高级配置与性能优化
7.1 存储资源监控
集成Prometheus与Grafana监控存储使用情况:
# prometheus-serviceMonitor.yaml
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: pig-storage-monitor
namespace: monitoring
spec:
selector:
matchLabels:
app: pig-storage
endpoints:
- port: metrics
interval: 30s
7.2 存储扩容实践
# 1. 修改PVC容量
kubectl edit pvc pig-upms-pvc -n pig
# 2. 验证扩容结果
kubectl get pvc pig-upms-pvc -n pig
注意:需确保StorageClass的allowVolumeExpansion属性已设置为true
八、总结与最佳实践
8.1 配置清单
为方便读者快速部署,整理核心配置文件清单:
8.2 企业级最佳实践
- 存储隔离:不同环境(开发/测试/生产)使用独立NFS服务器
- 数据备份:配置NFS服务器定时快照,建议每日凌晨执行
- 性能调优:根据业务特点调整NFS缓存策略与块大小
- 安全加固:通过K8s NetworkPolicy限制存储访问来源
通过本文介绍的NFS+PV/PVC方案,可有效解决pig平台在K8s环境中的持久化存储问题。建议结合实际业务需求,进一步优化存储架构设计,实现更高可用性与性能。
收藏本文,获取后续K8s存储高级特性解析(包括动态供应与存储加密)。如有疑问,欢迎在评论区留言讨论!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



