K8s持久化存储:pig平台PVC与NFS存储配置全解析

K8s持久化存储:pig平台PVC与NFS存储配置全解析

【免费下载链接】pig 【免费下载链接】pig 项目地址: https://gitcode.com/gh_mirrors/pig/pig

一、K8s存储痛点与解决方案

1.1 容器存储的三大核心挑战

在Kubernetes(K8s)环境中部署微服务时,持久化存储始终是架构设计的关键环节。以pig微服务平台为例,用户常面临以下痛点:

  • 数据持久性缺失:容器重启导致配置文件与业务数据丢失
  • 存储资源管理混乱:多服务存储需求差异化难以统一调度
  • 跨节点数据共享困难:分布式部署场景下的数据一致性问题

1.2 解决方案架构

本文将通过"理论+实战"方式,系统讲解如何基于NFS(Network File System,网络文件系统)实现pig平台的持久化存储,方案架构如下:

mermaid

二、NFS存储基础与环境准备

2.1 NFS工作原理

NFS允许网络中的计算机之间通过TCP/IP网络共享资源,其工作流程包括:

  1. 客户端发起挂载请求
  2. NFS服务器验证权限
  3. 建立数据传输通道
  4. 实现文件系统远程挂载

2.2 环境部署清单

组件版本要求作用
Kubernetes1.20+容器编排平台
NFS服务器4.2+提供网络存储服务
pig平台最新版微服务应用
helm3.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/logs10GiRWO
pig-upms/app/data, /app/upload20GiRWX
pig-visual/app/templates5GiROX
pig-gateway/app/ssl2GiRWO

六、部署验证与问题排查

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 配置清单

为方便读者快速部署,整理核心配置文件清单:

  1. storageclass-nfs.yaml
  2. pv-nfs.yaml
  3. pvc-pig.yaml

8.2 企业级最佳实践

  • 存储隔离:不同环境(开发/测试/生产)使用独立NFS服务器
  • 数据备份:配置NFS服务器定时快照,建议每日凌晨执行
  • 性能调优:根据业务特点调整NFS缓存策略与块大小
  • 安全加固:通过K8s NetworkPolicy限制存储访问来源

通过本文介绍的NFS+PV/PVC方案,可有效解决pig平台在K8s环境中的持久化存储问题。建议结合实际业务需求,进一步优化存储架构设计,实现更高可用性与性能。

收藏本文,获取后续K8s存储高级特性解析(包括动态供应与存储加密)。如有疑问,欢迎在评论区留言讨论!

【免费下载链接】pig 【免费下载链接】pig 项目地址: https://gitcode.com/gh_mirrors/pig/pig

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值