当前位置: 首页 > news >正文

nas怎么提供给k8s容器使用

NAS(网络附加存储)通过 Kubernetes 存储插件 可无缝对接 K8s 集群,为容器提供 共享存储服务(支持多 Pod 并发读写),核心是将 NAS 的文件共享能力转化为 K8s 原生的 PersistentVolume(PV) 和 PersistentVolumeClaim(PVC),让容器像使用本地存储一样访问 NAS。

一、核心原理:NAS 与 K8s 的对接逻辑

K8s 本身不直接管理 NAS,需通过 存储插件(CSI 或 FlexVolume) 实现 “NAS 资源抽象”:

  1. 存储插件:作为中间层,负责与 NAS 设备通信(如创建共享目录、挂载权限配置),并将 NAS 共享目录转化为 K8s 可识别的 PV;
  2. PV/PVC:PV 是对 NAS 共享目录的 “K8s 化描述”(如容量、访问模式),PVC 是 Pod 对 PV 的 “申请请求”,二者通过 storageClassName 绑定;
  3. Pod 挂载:Pod 通过 PVC 绑定 PV 后,NAS 共享目录会被挂载到 Pod 的指定路径,容器内可直接读写该路径下的文件(支持多 Pod 同时挂载)。

二、常见 NAS 类型与 K8s 对接方案

不同厂商的 NAS(如开源 OpenMediaVault、商业群晖 / 威联通、云厂商阿里云 NAS/ AWS EFS)对接 K8s 的核心逻辑一致,但插件选择略有差异,以下分 通用协议(NFS/SMB) 和 云厂商 NAS 两类说明。

方案 1:通用 NAS(支持 NFS/SMB 协议,如群晖、OpenMediaVault)

通用 NAS 通常支持 NFS(Linux 首选)或 SMB(Windows/Linux 兼容)协议,K8s 可通过 NFS CSI 插件 或 原生 NFS PV 对接,推荐用 CSI 插件(功能更丰富,支持动态 PV 创建)。

步骤 1:NAS 端配置(以 NFS 为例)
  1. 在 NAS 管理界面(如群晖 DSM)中,创建一个共享目录(如 k8s-nas-share);
  2. 开启 NFS 服务,设置 NFS 共享权限:允许 K8s 所有节点的 IP 访问(如 K8s 节点网段为 192.168.1.0/24),权限设为 “读写”;
  3. 记录 NAS 的 NFS 共享路径(如 192.168.1.200:/volume1/k8s-nas-share192.168.1.200 是 NAS 的 IP)。
步骤 2:K8s 端部署 NFS CSI 插件(动态 PV 方案)

CSI(Container Storage Interface)是 K8s 官方推荐的存储插件标准,支持动态创建 PV(无需手动定义 PV),以下以 nfs-subdir-external-provisioner(开源 NFS CSI 插件)为例:

2.1 安装插件(基于 Helm,推荐)

Helm 是 K8s 包管理工具,可快速部署插件:

# 1. 添加 Helm 仓库
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/# 2. 安装插件,指定 NAS 的 NFS 共享路径和服务器 IP
helm install nfs-csi nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \--set nfs.server=192.168.1.200 \  # NAS 的 IP--set nfs.path=/volume1/k8s-nas-share \  # NAS 的 NFS 共享路径--set storageClass.name=nfs-sc \  # 自定义存储类名称(后续 PVC 会引用)--set storageClass.defaultClass=false  # 是否设为默认存储类(按需选择)

2.2 验证插件部署

# 查看 CSI 控制器和节点端 Pod(均需为 Running 状态)
kubectl get pods -l app=nfs-subdir-external-provisioner
# 查看创建的存储类(storageClass)
kubectl get sc | grep nfs-sc
步骤 3:创建 PVC 并挂载到 Pod

通过 PVC 申请 NAS 存储,Pod 引用 PVC 即可使用 NAS 共享目录:

3.1 创建 PVC(申请存储)

创建 nfs-pvc.yaml 文件:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: nfs-pvc  # PVC 名称
spec:accessModes:- ReadWriteMany  # 访问模式:多 Pod 读写(NAS 核心优势)resources:requests:storage: 10Gi  # 申请的存储容量(需 ≤ NAS 共享目录剩余容量)storageClassName: nfs-sc  # 关联之前创建的 NFS 存储类

执行创建命令:

kubectl apply -f nfs-pvc.yaml
# 验证 PVC 状态(需为 Bound,表示已绑定 PV)
kubectl get pvc nfs-pvc
3.2 创建 Pod 挂载 PVC

创建 nfs-pod.yaml 文件,将 PVC 挂载到 Pod 的 /data 路径:

apiVersion: v1
kind: Pod
metadata:name: nfs-pod
spec:containers:- name: test-containerimage: nginx:alpine  # 用 Nginx 镜像示例volumeMounts:- name: nfs-volume  # 卷名称,与下方 volumes 对应mountPath: /data  # 容器内挂载路径volumes:- name: nfs-volumepersistentVolumeClaim:claimName: nfs-pvc  # 引用之前创建的 PVC

执行创建命令并验证:

kubectl apply -f nfs-pod.yaml
# 进入 Pod,验证 NAS 挂载
kubectl exec -it nfs-pod -- /bin/sh
# 在 Pod 内创建文件,查看 NAS 端是否同步
echo "test from k8s pod" > /data/test.txt

此时在 NAS 的 k8s-nas-share 目录下,会看到 test.txt 文件,说明挂载成功。


文章转载自:

http://67i7nUKF.ffksr.cn
http://oR40LClS.ffksr.cn
http://URsOdZsG.ffksr.cn
http://COPQQKg3.ffksr.cn
http://fuAPrNTP.ffksr.cn
http://MJfz1EkJ.ffksr.cn
http://tNVSH9fy.ffksr.cn
http://ADAzGNbb.ffksr.cn
http://qzpTY7QN.ffksr.cn
http://bQL3fSkg.ffksr.cn
http://rnvybDNC.ffksr.cn
http://V1bF5YjY.ffksr.cn
http://MHJtVrKX.ffksr.cn
http://yG5mMY1T.ffksr.cn
http://DMNKaVqo.ffksr.cn
http://5VqsEGxy.ffksr.cn
http://5Uo35Duc.ffksr.cn
http://FdXKBer7.ffksr.cn
http://Lr06MYJ1.ffksr.cn
http://xa2perSa.ffksr.cn
http://vG7nPFAr.ffksr.cn
http://6uxQz0Ud.ffksr.cn
http://ckBFqz4r.ffksr.cn
http://5vkZVe24.ffksr.cn
http://zGVl2qDH.ffksr.cn
http://LljHDSG7.ffksr.cn
http://XpICJnzP.ffksr.cn
http://KUnJ5qng.ffksr.cn
http://J6PzNRui.ffksr.cn
http://q4BPcw8r.ffksr.cn
http://www.dtcms.com/a/387949.html

相关文章:

  • 【第五章:计算机视觉-项目实战之图像分类实战】1.经典卷积神经网络模型Backbone与图像-(8)多标签图像分类理论
  • 认知语义学中的意象图式对人工智能自然语言处理深层语义分析的影响与启示
  • [ffmpeg] 时间基总结
  • 数据结构排序入门(3):核心排序(归并排序,归并非递归排序,计数排序及排序扫尾复杂度分析)+八大排序源码汇总
  • 计算机网络七层模型理解
  • 同步与互斥学习笔记
  • 命令行方式部署OceanBase 集群部署
  • 小迪安全v2023学习笔记(八十四讲)——协议安全桌面应用hydra爆破未授权检测
  • MAC-简化版枚举工具类
  • Science Robotics 美国康奈尔大学开发的新型触觉显示器
  • Java 零基础学习指南
  • 音频剪辑总出错?音视频分割工具免费功能实测 音视频分割工具新手怎么用?4步搞定音视频分割 音视频分割工具常见问题解决:新手避坑参考
  • 线性回归与 Softmax 回归总结
  • 文字一键生成视频软件哪家比较靠谱?
  • Android,Jetpack Compose,坦克大战游戏案例Demo(随机生成地图)
  • Unity 笔记:构建AAB包大小超过谷歌商店上限
  • 在idea中git修改用户名和邮箱/切换账号
  • 设计模式(C++)详解——组合模式(Composite Pattern)(1)
  • 103、23种设计模式之外观模式(12/23)
  • 依赖注入基础
  • 代码随想录二刷之“图论”~GO
  • 基础数学转金融数学考研:一场需要清醒规划的转型
  • Alpha World携手非小号Talking Web3,海上ALPHA WEB3派对启航
  • Vue3钩子,路由拦截实现
  • 数据结构七大排序算法模拟实现性能分析
  • vue+react笔记
  • springboot获取wav文件音频长度
  • 【Redis】-- 缓存
  • 鸿蒙高效数据处理框架全攻略:缓存、并行与流式实战
  • 全网首发! Nvidia Jetson Thor 128GB DK 刷机与测评(五)常用功能测评 - RealtimeSTT 音频转文本 同声传译