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 ------ 声明"挂到容器哪"

示例:

相关推荐
Sagittarius_A*13 小时前
Docker:渗透前置容器化核心基础
运维·安全·docker·容器
成为你的宁宁13 小时前
【Kubernetes集群证书续签】
kubernetes·证书过期
名字还没想好☜15 小时前
Docker 多阶段构建:把镜像从 1.2GB 砍到 15MB
运维·docker·容器·多阶段构建·镜像优化
her_heart16 小时前
ChatGPT 5.6 实战:用 AI 做云成本治理,从账单复盘到 K8s 优化
人工智能·云原生·chatgpt·kubernetes·测试用例
花和满楼16 小时前
K8s 1.36 ImageVolume GA:OCI 镜像不再只能跑容器
java·容器·kubernetes
生活爱好者!17 小时前
NAS还能玩游戏?部署一款 WebGL 3D 赛车小游戏
游戏·docker·容器·玩游戏
DolphinScheduler社区17 小时前
Apache DolphinScheduler 6 月治理优化,补齐调度运维全链路细节
大数据·运维·云原生·apache·海豚调度
hj28625118 小时前
Docker 核心知识点整理(网络 + Dockerfile + 原理 + 命令)
网络·docker·容器
梦想的颜色1 天前
【Docker原理】Docker 容器一文打尽:生命周期、环境管控、迁移备份、日志进程排查、垃圾清理
运维·docker·容器·容器生命周期·容器日志排查·容器迁移备份·容器进程管理