Kubernetes(k8s) po 配置持久化挂载(nfs)

文章目录

  • 前言
    • [k8s po 配置持久化挂载(nfs)](#k8s po 配置持久化挂载(nfs))
      • [1. 相关概念](#1. 相关概念)
        • [1.1. 用处](#1.1. 用处)
        • [1.2. 为什么需要持久化挂载?](#1.2. 为什么需要持久化挂载?)
        • [1.3. NFS 在 K8s 里的作用](#1.3. NFS 在 K8s 里的作用)
        • [1.4. 架构图](#1.4. 架构图)
      • [2. 配置思路](#2. 配置思路)
        • [2.1. 目录权限处理的几种方式](#2.1. 目录权限处理的几种方式)
          • [2.1.1. 直接赋予 777](#2.1.1. 直接赋予 777)
          • [2.1.2. 基于用户组 ID 配置](#2.1.2. 基于用户组 ID 配置)
          • [2.1.3. 直接指定容器用户 ID](#2.1.3. 直接指定容器用户 ID)
        • [2.2. 总结](#2.2. 总结)
      • [3. k8s 设置挂载](#3. k8s 设置挂载)
        • [3.1. 建立pv](#3.1. 建立pv)
        • [3.1. 建立pvc](#3.1. 建立pvc)
        • [3.3. 快速验证](#3.3. 快速验证)
        • [3.4. po 配置加NFS挂载](#3.4. po 配置加NFS挂载)

前言

如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。

而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!


k8s po 配置持久化挂载(nfs)

1. 相关概念

1.1. 用处

在 Kubernetes 中使用 NFS 网络文件系统 来做 持久化存储卷 (PersistentVolume, PV) 和 持久化存储声明 (PersistentVolumeClaim, PVC),从而让 Pod 的数据在重启或调度到其他节点时依然能保留。

1.2. 为什么需要持久化挂载?
  • Pod 本地存储是临时的:Pod 删除/重建时,容器里的数据会丢失。
  • 需要共享数据:多个 Pod 要访问同一份文件(日志、配置、上传文件等)。
  • 解耦计算和存储:应用无状态化,存储独立出来。
1.3. NFS 在 K8s 里的作用

NFS(Network File System)是一种 跨节点共享目录 的协议。

在 K8s 中,使用 NFS 相当于为集群里的所有节点提供了一个统一的共享目录:

  • 多个 Pod 可以同时挂载该目录,做到 数据共享;
  • Pod 重启或迁移后,数据依然 持久保存。
1.4. 架构图
bash 复制代码
 (K8s Pod ↔ PVC ↔ PV ↔ NFS 服务器)

2. 配置思路

部署细节此处略,可以参考官方文档或安装教程)

关键在于 NFS 共享目录权限 的处理。因为容器里的应用用户 ID 和宿主机用户 ID 可能不一致,容易导致没有写权限。

2.1. 目录权限处理的几种方式
2.1.1. 直接赋予 777

对要共享的目录(例如 /data/nfs/app)设置:

bash 复制代码
chmod -R 777 /data/nfs/app

优点:简单粗暴,保证任何容器都能读写。

缺点:权限过大,存在安全风险。

2.1.2. 基于用户组 ID 配置

查询需要挂载的 Pod 内部运行用户的 UID/GID,例如:

  • 用户 ID:10001
  • 用户组 ID:10000

那么可以在 NFS 服务器上配置目录权限:

bash 复制代码
chown -R root:10000 /data/nfs/app
chmod -R 775 /data/nfs/app

这样,同组用户就能创建和写入文件。

2.1.3. 直接指定容器用户 ID

如果明确知道 Pod 内部使用的用户 ID,可以直接把目录属主改成该用户:

bash 复制代码
chown -R 10001:10000 /data/nfs/app 
chmod -R 755 /data/nfs/app

这样,容器内用户就完全拥有该目录的权限,同时保证其他人只读。

2.2. 总结
  • NFS 是 K8s 常见的持久化存储方案,简单、通用。
  • 核心问题在于目录权限,需要根据实际容器用户来调整。

推荐:开发环境可以直接用 777;生产环境最好用 用户组 ID 或 指定 UID 的方式,既保证功能又更安全。

3. k8s 设置挂载

3.1. 建立pv

pv集群级,不需要指定命名空间:

bash 复制代码
apiVersion: v1          
kind: PersistentVolume
metadata:
  name: yzy-data
spec:
  accessModes:
    - ReadWriteMany    
  capacity:
    storage: 200Gi
  nfs:
    path: /data/nfs/app
    server: <NFS服务ip>
  persistentVolumeReclaimPolicy: Delete
  storageClassName: nfs-storage
  volumeMode: Filesystem
3.1. 建立pvc
bash 复制代码
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: yzy-data
  namespace: <命名空间>
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 200Gi
  storageClassName: nfs-storage
  volumeMode: Filesystem
  volumeName: yzy-data   # 显式绑定上面建的 PV
3.3. 快速验证
bash 复制代码
# 1. 应用
kubectl apply -f pv.yaml
kubectl apply -f pvc.yaml


# 2. 看状态
kubectl get pv yzy-data pvc/yzy-data -n <命名空间>


# 3. 若 PVC 一直 Pending
kubectl describe pvc yzy-data -n <命名空间>
3.4. po 配置加NFS挂载
  1. volumes ------ 声明"盘从哪来"
  2. volumeMounts ------ 声明"挂到容器哪"

示例:

相关推荐
p***c9494 小时前
后端在微服务中的服务网关
微服务·云原生·架构
2501_941881407 小时前
Kubernetes 容器集群资源调度与弹性扩容高可用架构在互联网业务实战经验总结
云原生·容器·kubernetes
究極の法則に通じた野犬7 小时前
k8s设计理念-k8s中哪些服务要部署成StatefulSet哪些部署成Deployment
云原生·容器·kubernetes
wuxingge7 小时前
k8s集群误删node节点,怎么添加回去
云原生·容器·kubernetes
观测云11 小时前
Kubernetes CRD 方式配置容器日志采集最佳实践
容器·kubernetes·日志分析
运维-大白同学17 小时前
2025最全面开源devops运维平台功能介绍
linux·运维·kubernetes·开源·运维开发·devops
努力进修20 小时前
跨设备文件共享零烦恼!PicoShare+cpolar让跨设备传输更简单
云原生·eureka·cpolar
tianyuanwo21 小时前
多平台容器化RPM构建流水线全指南:Fedora、CentOS与Anolis OS
linux·运维·容器·centos·rpm
敲上瘾1 天前
【探索实战】:Kurator分布式统一应用分发平台的全面解析与实践指南
分布式·容器·kubernetes·serverless
cui_win1 天前
Docker Compose 部署一个完整的Prometheus监控告警系统
docker·容器·prometheus