编程技术分享平台

网站首页 > 技术教程 正文

精通k8s(17)存储系统-NFS_k8s存储最佳方案

xnh888 2025-09-01 16:44:33 技术教程 18 ℃ 0 评论

nfs的工作原理

它的原理比较简单,在服务端创建目录A,然后在客户机上创建一个目录B,最后用A来挂载B,那么客户端再打开本地的B目录就相当于打开A目录,这样就实现了共享。对于服务端来说,就像是开了一个服务器,拓扑图如下:

nfs的好处在于它是通过网络协议通信的,可以远程访问。

hostPath模式和NFS模式的对比

上一篇讲到hostPath,它也有缺点,就是绑定了机器,比如说Pod换个机器运行时,说不定就没有绑定的那个目录或文件了,可以认为是节点级别的,而NFS是统一的服务端,大家都可以从这个端挂载目录,就像我们都可以打开百度网页一样,属于集群级别的,因此区别一目了然,在实际工作中需要哪种模式可以看场景。

下面写下NFS安装和具体操作。

安装NFS

(1)在每台机器上都安装nfs-utils

yum install -y nfs-utils 

nfs-utils包括客户端服务端的工具软件。

(2)挑选一台机器充当服务端(我这里选择k8s的master节点),在上面执行命令

# 在master 执行以下命令  
echo "/nfs/data/ *(insecure,rw,sync,no_root_squash)" > /etc/exports

# 执行以下命令,启动 nfs 服务;创建共享目录
mkdir -p /nfs/data

# 在master执行
systemctl enable rpcbind
systemctl enable nfs-server
systemctl start rpcbind
systemctl start nfs-server

# 使配置生效
exportfs -r

#检查配置是否生效
exportfs

(3)在客户机上执行下面命令

#查看master的挂载目录
showmount -e 192.168.234.100

#创建本地目录
mkdir -p /nfs/data

#映射master的目录
mount -t nfs \
192.168.234.100:/nfs/data /nfs/data

经过上面几步,就将服务端和客户端配置完成了。

实验:nginx映射NFS上的目录

需求:

我有一个nginx的Pod,想把它的主页目录映射到NFS的目录上,那么我这个nginx无论调度到哪台机器上,都可以从NFS中读取主页。

实验拓扑图

/nfs/data/nginx-pv是共享的NFS目录,/usr/share/nginx/html是Nginx默认网页的根目录,用/nfs/data/nginx-pv来挂载/usr/share/nginx/html,这样就可以从NFS中读取主页了。

实验准备:nfs上创建一个主页目录用于挂载

#创建用于nginx映射的目录
mkdir -p /nfs/data/nginx-pv

#在此目录中创建一个index.html文件用于观察结果
vim index.html
<h2>hello nginx!!!</h2>

实验准备:编写Pod部署文件并执行

#配置文件名:nginx-deploy-nfs-test.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx-pv-demo
  name: nginx-pv-demo
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx-pv-demo
  template:
    metadata:
      labels:
        app: nginx-pv-demo
    spec:
      containers:
      - image: nginx
        name: nginx
        ports:
        - containerPort: 80
        volumeMounts:
        - name: html  # 卷挂载名称,与下面 volumes 对应
          mountPath: /usr/share/nginx/html  # Nginx 默认网页根目录
      volumes:
      - name: html  # 卷名称
        nfs:
          server: 192.168.234.100  # NFS 服务器 IP
          path: /nfs/data/nginx-pv  # NFS 共享目录路径
          readOnly: false  # 可读写(默认)

k8s执行部署

kubectl apply -f nginx-deploy-nfs-test.yml

实验观察

(1)查看Pod地址

kubectl get pods -o wide

#可以看到两个Pod的地址:
10.244.36.112
10.244.36.107

(2)执行curl

curl 10.244.36.112

#看到正确的结果:
<h2>hello nginx!!!</h2>

实验结束的清理工作

#删除deploy
kubectl delete deploy nginx-pv-demo

#删除部署文件
rm -rf nginx-deploy-nfs-test.yml

总结

NFS采用统一的服务端模式,无论Pod移动到哪里,只要NFS是通的那么就可以共享目录。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表