Kubernetes 卷存储 NFS | nfs搭建配置 原理介绍 nfs作为存储卷使用

目录

    • 1、NFS介绍
    • 2、NFS服务部署
      • 2.1安装nfs服务 (服务端配置)
      • 2.2启动NFS服务
      • 2.3 服务检查
      • 2.4 客户端配置
    • 3、nfs作为存储卷使用
      • 3.1 nfs作为volume
      • 3.2 nfs存储的缺点
      • 3.3 nfs作为PersistentVolum
    • 4、nfs作为动态存储提供
    • 5、总结

1、NFS介绍

NFS(Network File System)是一种分布式文件系统协议,允许客户端远程访问服务器上的文件,实现数据共享。它整合多个存储设备为统一文件系统,方便数据存储和管理,支持负载均衡和故障转移,确保服务高可用和可扩展。但需注意,NFS依赖网络环境,网络状况影响其性能,且配置管理需技术经验。
nfs端口:2049
RPC端口:111w

nfs原理
工作原理主要基于客户端-服务器架构。在NFS环境中,服务器端运行NFS服务,将本地文件系统中的文件共享给网络上的其他计算机。客户端通过挂载远程NFS共享,可以像访问本地文件系统一样访问这些共享文件。
NFS 使用RPC(Remote Procedure Call)的机制进行实现,RPC使得客户端可以调用服务端的函数。同时,由于有 VFS 的存在,客户端可以像使用其它普通文件系统一样使用 NFS 文件系统。经由操作系统的内核,将 NFS 文件系统的调用请求通过 TCP/IP 发送至服务端的 NFS 服务。NFS服务器执行相关的操作,并将操作结果返回给客户端。
在这里插入图片描述
1.首先服务器端启动RPC服务,并开启111端口

2.服务器端启动NFS服务,并向RPC注册端口信息

3.客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口

4.服务端的RPC(portmap)服务反馈NFS端口信息给客户端。

5.客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。

NFS服务主要进程包括:

  • rpc.nfsd:最主要的NFS进程,管理客户端是否可登录
  • rpc.mountd:挂载和卸载NFS文件系统,包括权限管理
  • rpc.lockd:非必要,管理文件锁,避免同时写出错
  • rpc.statd:非必要,检查文件一致性,可修复文件

nfs的关键工具包括:

  • 主要配置文件:/etc/exports
  • NFS文件系统维护命令:/usr/bin/exportfs;
  • 共享资源的日志文件: /var/lib/nfs/*tab;
  • 客户端查询共享资源命令: /usr/sbin/showmount;
  • 端口配置: /etc/sysconfig/nfs。

2、NFS服务部署

在NFS服务器端的主要配置文件为/etc/exports时,通过此配置文件可以设置共享文件目录。每条配置记录由NFS共享目录、NFS客户端地址和参数这3部分组成,格式如下:

[NFS共享目录] [NFS客户端地址1(参数1,参数2,参数3……)]

NFS共享目录:服务器上共享出去的文件目录;
NFS客户端地址:允许其访问的NFS服务器的客户端地址,可以是客户端IP地址,也可以是一个网段(192.168.64.0/24);
访问参数:括号中逗号分隔项,主要是一些权限选项。
访问权限参数

选项描述
ro客户端对于共享文件目录为只读权限。(默认设置)
rw客户端对共享文件目录具有读写权限。

Kubernetes的NFS存储用于将某事先存在的NFS服务器导出export的存储空间挂载到Pod中来供Pod容器使用。与emptyDir不同的是,NFS存储在Pod对象终止后仅是被卸载而非删除。另外,NFS是文件系统及共享服务,它支持同时存在多路挂载请求。定义NFS存储时,常用到以下字段。

2.1安装nfs服务 (服务端配置)

#ubuntu部署
sudo apt install nfs-kernel-server#centos部署
yum -y install rpcbind nfs-util#创建要共享的目录
mkdir /data/redis -p    #/data/redis:NFS服务要共享的目录#编辑NFS配置并加入以下内容
vim /etc/exports        #NFS的配置文件,默认文件内容为空(无任何共享)
/data/redis 192.168.31.0/24(rw,sync,no_all_squash,no_subtree_check,no_root_squash)
#载入配置
exportfs -rv

在这里插入图片描述

/data/redis 192.168.31.0/24(rw,sync,no_all_squash,no_subtree_check,no_root_squash)
/data/redis 192.168.31.0/24(rw,no_root_squash) #两者效果一样
#设置/redis为共享目录,允许192.168.31.0/24网段的IP地址主机访问,也可以写 * ,表示所有地址都可以访问NFS服务
#rw:访问到此目录的服务器都具备读写权限
#sync:数据同步写入内存和硬盘 默认同步,可不写入
#no_all_squash:所有用户对根目录具备完全管理访问权限 默认禁用all_squash,可不写入
#no_subtree_check:不检查父目录的权限 默认禁用subtree_check,可不写入
#root_squash选项会将这个root用户映射成一个非特权用户,此处禁用 no_root_squash

2.2启动NFS服务

#ubuntu启动
systemctl start nfs-kernel-server#centos启动
systemctl start rpcbind //一定要先开启rpcbind服务
systemctl start nfs //如服务已启动,更改完配置信息后需要重启服务

设置开机自启

systemctl enable rpcbindsystemctl enable nfs-server

2.3 服务检查

showmount -e localhost
exportfs -v

可以看到redis共享目录信息
在这里插入图片描述

2.4 客户端配置

1.1.检查并安装软件

rpm -q rpcbind nfs-utils
yum install -y rpcbind nfs-utils
systemctl start rpcbind && systemctl start nfs
systemctl enable rpcbind && systemctl enable nfs-server

2.将共享目录挂载到本地

mount -t nfs 服务端地址:/共享目录  /mnt
showmount -e  服务端地址

在这里插入图片描述

2.5 服务测试
在服务端共享目录创建文件,在客户端挂载目录可以看到

cd /data/redis
echo "hello world" >>hello.txt

在这里插入图片描述

cd /mnt/  && cat hello.txt 

在这里插入图片描述
注:也可以客户端写入,服务端查看 (客户端需要有权限)

3、nfs作为存储卷使用

3.1 nfs作为volume

nfs可以直接作为存储卷使用
下面是一个redis部署的YAML配置文件。在此示例中,redis在容器中的持久化数据保存在/data目录下;存储卷使用nfs,nfs的服务地址为:192.168.8.150,存储路径为:/k8s-nfs/redis/data。容器通过volumeMounts.name的值确定所使用的存储卷。

vi redis.yaml
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:name: redis
spec:selector:matchLabels:app: redisrevisionHistoryLimit: 2template:metadata:labels:app: redisspec:containers:# 应用的镜像- image: redisname: redisimagePullPolicy: IfNotPresent# 应用的内部端口ports:- containerPort: 6379name: redis6379env:- name: ALLOW_EMPTY_PASSWORDvalue: "yes"- name: REDIS_PASSWORDvalue: "redis"   # 持久化挂接位置,在docker中 volumeMounts:- name: redis-persistent-storagemountPath: /datavolumes:# 宿主机上的目录- name: redis-persistent-storagenfs:path: /data/redisserver: 192.168.200/30
 kubectl apply -f redis.yaml

3.2 nfs存储的缺点

基于上述过程可以发现用户在使用nfs或者其他类似的存储时,要求较高:

1、需要了解底层存储用的是什么

2、需要存储服务器的地址,以及因此带来的安全问题

3、在存储服务器创建相应的存储目录
在这里插入图片描述
因此,为了能够屏蔽底层存储实现的细节,方便用户使用, kubernetes引入PV和PVC两种资源对象。

3.3 nfs作为PersistentVolum

在Kubernetes当前版本的中,可以创建类型为nfs的持久化存储卷,用于为PersistentVolumClaim提供存储卷。在下面的PersistenVolume YAML配置文件中,定义了一个名为nfs-pv的持久化存储卷,此存储卷提供了5G的存储空间,只能由一个PersistentVolumClaim进行可读可写操作。此持久化存储卷使用的nfs服务器地址为192.168.5.150,存储的路径为/tmp。

vi nfs-pv.yaml
apiVersion: v1 
kind: PersistentVolume 
metadata: name: nfs-pv 
spec: capacity: storage: 5Gi volumeMode: Filesystem accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Recycle storageClassName: slow mountOptions: - hard - nfsvers=4.1# 此持久化存储卷使用nfs插件 nfs:# nfs共享目录为/data/redis path: /data/redis# nfs服务器的地址server: 192.168.200.30

通过执行如下的命令可以创建上述持久化存储卷:

kubectl create -f nfs-pv.yaml

存储卷创建成功后将处于可用状态,等待PersistentVolumClaim使用。PersistentVolumClaim会通过访问模式和存储空间自动选择合适存储卷,并与其进行绑定。

4、nfs作为动态存储提供

部署nfs-provisioner 实现PV 动态供给(StorageClass)直通车

5、总结

1.NFS服务多用于局域网内
2.共享目录权限要适应实际生产环境
3.搭建服务时一定要先启动rpc后启动nfs
4.配置文件中的信息格式一定要对,否则报错

参考资料
1.《Persistent Volumes》地址:https://kubernetes.io/docs/concepts/storage/persistent-volumes/
2.《Storage Classes》地址:https://kubernetes.io/docs/concepts/storage/storage-classes/
3.《Dynamic Volume Provisioning》地址:https://kubernetes.io/docs/concepts/storage/dynamic-provisioning/
4.《Volums》地址:
https://kubernetes.io/docs/concepts/storage/volumes/
5.《nfs》地址:
https://github.com/kubernetes-incubator/external-storage/tree/master/nfs

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/484946.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

模糊的照片怎么变清晰?这些方法让你快速完成

在我们日常生活中,拍照已经成为记录生活点滴的重要方式。然而,有时候由于各种原因,拍摄出来的照片会显得模糊不清,这让我们感到十分苦恼。尤其是当我们希望珍藏那些对我们有着特殊意义的照片时,却因为清晰度不足而无法…

智慧公厕是什么?智慧公厕是构建智慧城市的环境卫生基石

随着城市化进程的不断加速,城市人口密度和流动性也逐渐增大,对城市公共设施的需求与日俱增。而在这些公共设施中,公厕作为城市基础设施中不可或缺的一环,对城市的环境卫生和市民生活质量起着举足轻重的作用。如何提高公厕的管理效…

思考:如何写出让同事难以维护的代码?

本文从【程序命名&注释】【数据类型&类&对象】【控制执行流程】和【程序/结构设计】四个方面梳理了一些真实案例,相信通过这些案例你能迅速get技能:如何写出让同事难以维护的代码doge。 比起什么程序员删库跑路,我更喜欢「写出让…

基于springboot+vue的电影评论网站(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

OPPO公布全新AI战略;苹果iPad新品细节曝光;周鸿祎称Sora工作原理像人做梦

OPPO 公布全新 AI 战略,AI 手机时代再提速 昨日,OPPO 举办 AI 战略发布会,分享新一代 AI 手机的四大能力特征: AI 手机首先要能够高效地利用计算资源,以满足 AI 时代下生成式 AI 的计算需要;AI 手机要能敏…

SwiftUI 集合视图(Grid)拖放交换 Cell 的极简实现

概览 自从 SwiftUI 横空出世那天起,小伙伴们都感受到了它惊人的简单与便捷。而在本课中,我们将会用一个小“栗子”更直观的让大家体验到它无与伦比简洁的描述性特质: 如上图所示,我们在 SwiftUI 中实现了 Grid 中拖放交换 Cell 的…

IIC通信驱动EEPROM,AT24C02硬件存储器编程(2)

接着上一篇博客文章讲解了IIC协议的原理及编程思路,本篇博客文章将以IIC为基础,从芯片手册入手,梳理讲解如何对AT24C02进行驱动编程,实现数据的读写操作。IIC通信驱动硬件编程 (1)-CSDN博客https://blog.csdn.net/weixin_49337111…

06 内存管理

目录 c/c内存分布c语言中动态内存管理方式c中动态内存管理方式operator new与operator delete函数new和delete的实现原理定位new表达式(placement-new)常见题 1. c/c内存分布 看一段代码 int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticV…

FSQ: FINITE SCALAR QUANTIZATION: VQ-VAE MADE SIMPLE

Paper name FINITE SCALAR QUANTIZATION: VQ-VAE MADE SIMPLE Paper Reading Note Paper URL: https://arxiv.org/abs/2309.15505 Code URL: (官方 jax 实现) https://github.com/google-research/google-research/tree/master/fsq(pytorch 实现) https://github.com/luci…

教你用Appium搭建Android自动化测试框架(详细教程)

如题,本文附有仓库地址以及代码,目录如下: 1.下载安装appium 2.配置并使用appium 3.配置工程 一、下载安装appium 下载appium-desktop的mac版本,我选择用1.17.1版本,最新的版本1.22.0,拆分一个桌面应用…

2.22作业

作业要求&#xff1a; 程序代码&#xff1a; #include<myhead.h>int num 520; pthread_mutex_t mutex;void* task1(void* arg) {pthread_mutex_lock(&mutex);num 1314;sleep(3);printf("task1:num %d\n", num);pthread_mutex_unlock(&mutex); }voi…

医药之链:基于Django的智能药品管理系统

框架 Python 3.7 django 3.2.13 Bootstrap&#xff08;前端&#xff09; sqlite&#xff08;数据库&#xff09;导包 pip install django3.2.13 pip install pandas pip install xlwt环境搭建 登录 zfx 123456