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

k8s 中存储之 NFS 卷

目录

1 NFS 卷的介绍

2 NFS 卷的实践操作

2.1 部署一台 NFS 共享主机

2.2 在所有k8s节点中安装nfs-utils

2.3 部署nfs卷

2.3.1 生成 pod 清单文件

2.3.2 修改 pod 清单文件增加 实现 NFS卷 挂载的 参数

2.3.3 声明签单文件并查看是否创建成功

2.3.4 在 NFS 服务器 创建默认发布文件并访问测试


1 NFS 卷的介绍

HostPath可以解决数据持久化的问题,但是一旦Node节点故障了,Pod如果转移到了别的节点,又会出现问题了,此时需要准备单独的网络存储系统,比较常用的用NFS、CIFS。

NFS是一个网络文件存储系统,可以搭建一台NFS服务器,然后将Pod中的存储直接连接到NFS系统上,这样的话,无论Pod在节点上怎么转移,只要Node跟NFS的对接没问题,数据就可以成功访问。

2 NFS 卷的实践操作

2.1 部署一台 NFS 共享主机

# 部署 NFS 主机
[root@harbor ~]#  yum install nfs-utils -y
[root@harbor ~]#  systemctl enable --now nfs-server.service

[root@harbor ~]# vim /etc/exports
/nfsdata   *(rw,sync,no_root_squash)

[root@harbor ~]# mkdir /nfsdata

# 重新加载配置文件
[root@harbor ~]# exportfs -rv
exporting *:/nfsdata

# 查看是否通讯
[root@harbor ~]# showmount  -e
Export list for harbor:
/nfsdata *

2.2 在所有k8s节点中安装nfs-utils

[root@k8s-master & node1 & node2  ~]# yum install nfs-utils -y

# 测试是否可用
[root@k8s-master volumes]# showmount -e harbor
Export list for harbor:
/nfsdata *

2.3 部署nfs卷

2.3.1 生成 pod 清单文件

[root@k8s-master volumes]# kubectl run nfs \
--image nginx:latest --port 80 \
--dry-run=client -o yaml > nfs-volume.yml

2.3.2 修改 pod 清单文件增加 实现 NFS卷 挂载的 参数

[root@k8s-master volumes]# vim nfs-volume.yml 
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: nfs
  name: nfs
spec:
  volumes:
  # 定义一个名为 cache-vol 的 NFS 卷
  # NFS 卷允许 Pod 访问远程 NFS 服务器上的文件系统
  - name: cache-vol
    nfs:
      server: 192.168.239.50  # NFS 服务器的 IP 地址
      path: /nfsdata           # 在 NFS 服务器上的路径
  containers:
  - image: nginx:latest
    name: nginx
    volumeMounts:
    # 将 cache-vol 卷挂载到容器内的 /usr/share/nginx/html 路径
    # 这样容器可以访问远程 NFS 服务器上的 /nfsdata 目录
    - mountPath: /usr/share/nginx/html
      name: cache-vol
    ports:
    - containerPort: 80  

2.3.3 声明签单文件并查看是否创建成功

# 声明清单文件
[root@k8s-master volumes]# kubectl apply -f nfs-volume.yml

# 查看是否创建成功
[root@k8s-master volumes]# kubectl get pods -o wide 
NAME                       READY   STATUS      RESTARTS   AGE     IP            NODE        NOMINATED NODE   READINESS GATES
nfs                        1/1     Running     0          34s     10.244.1.36   k8s-node1   <none>           <none>
nginx-v1-dbd4bc45b-49hhw   1/1     Running     0          3d19h   10.244.2.54   k8s-node2   <none>           <none>
nginx-v2-bd85b8bc4-nqpv2   1/1     Running     0          3d19h   10.244.1.35   k8s-node1   <none>           <none>
testpod                    0/1     Completed   0          3d6h    10.244.2.58   k8s-node2   <none>           <none>

# 如果访问会显示 fobbiden ,因为在 NFS服务器 的 /nfsdata 目录下并没有文件
[root@k8s-master volumes]# curl 10.244.1.36
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.27.1</center>
</body>
</html>

2.3.4 在 NFS 服务器 创建默认发布文件并访问测试

# NFS 服务器增加数据文件
[root@harbor ~]# cd /nfsdata/
[root@harbor nfsdata]# echo this is NFS server 192.168.239.50 harbor > index.html

# 在集群内可以访问到
[root@k8s-master volumes]# curl 10.244.1.36
this is NFS server 192.168.239.50 harbor


http://www.kler.cn/news/339216.html

相关文章:

  • 老房装修换窗需要注意哪些方面?
  • 学习使用Cube软件
  • 简易CPU设计入门:取指令(四)
  • 【代码随想录Day37】动态规划Part06
  • 【C语言】指针和数组的内存使用详解
  • IIOT工业物联网的标准与互操作性—SunIOT
  • Redis面试篇1
  • 计算机网络:物理层 —— 信道复用技术
  • 20.Nginx动静分离原理与案例实现
  • 极端天气道路目标检测数据集 3400张 带标注 VOC YOLO 6类
  • Javascript-标准内置对象-值属性-globalThis-Infinity-Nan-undefined 手写实现globalThis功能
  • java8 双冒号(::)使用方法
  • 解决方案:Pandas里面的loc跟iloc,有什么区别
  • VSCode调试Vue项目方法
  • 2024四大剪辑软件推荐及下载地址介绍!
  • 关键字:extern
  • 面试题:Redis(一)
  • 提升外贸营销效果,EDM策略与实践分享
  • Spring Boot读取resources目录下文件(打成jar可用),并放入Guava缓存
  • HJDQN环境配置