NFS存储

NFS即网络文件系统Network File System,它是一种分布式文件系统协议,最初是由Sun MicroSystems公司开发的类Unix操作系统之上的一款经典网络存储方案,其功能是在允许客户端主机可以像访问本地存储一样通过网络访问服务端文件。

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

•server:NFS服务器的IP地址或者主机名,必选字段。•path:NFS服务器导出(共享)的文件系统路径,必选字段。•readOnly:是否以只读挂载,默认为false。

1.部署一个NFS服务 在集群之外的节点192.168.31.241

#ubuntu部署sudo apt install nfs-kernel-server#centos部署yum -y install rpcbind nfs-utils
#创建要共享的目录mkdir /data/redis -p#编辑NFS配置并加入以下内容vim /etc/exports/data/redis 192.168.31.0/24(rw,sync,no_all_squash,no_subtree_check)#载入配置exportfs -rv

•/data/redis:NFS服务要共享的目录•192.168.31.0/24:允许访问NFS服务器的网段,也可以写 * ,表示所有地址都可以访问NFS服务•rw:访问到此目录的服务器都具备读写权限•sync:数据同步写入内存和硬盘•no_all_squash:所有用户对根目录具备完全管理访问权限•no_subtree_check:不检查父目录的权限

启动NFS服务

#ubuntu启动systemctl start nfs-kernel-server#centos启动systemctl start rpcbind nfs

服务检查

#查看NFS配置是否生效cat /var/lib/nfs/etab/data/redis    192.168.31.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,no_all_squash)#通过showmount命令查看NFS共享情况showmount -e 192.168.31.241Export list for 192.168.31.241:/data/redis 192.168.31.0/24

2.创建Pod资源配置清单 Pod中使用Redis镜像来运行容器,将Redis数据持久化至NFS服务器上,下面是简单实用Redis的一个示例:

cat redis-nfs.yamlapiVersion: v1kind: Podmetadata:  name: vol-nfs-pod  labels:    app: redisspec:  containers:  - name: redis    image: redis:5.0           #镜像版本    ports:    - containerPort: 6379      #容器端口      name: redisport    volumeMounts:    - mountPath: /data         #卷挂载到容器中的目录      name: redisdata          #卷名称  volumes:  - name: redisdata             #卷名称    nfs:                        #使用NFS网络存储卷      server: 192.168.31.241    #NFS服务器地址      path: /data/redis         #NFS服务器共享的目录      readOnly: false           #是否为只读

上面的示例定义在资源配置文件vol-nfs.yaml中,其中的Pod资源拥有一个关联至NFS服务器192.168.31.241的存储卷,Redis容器将其挂载到容器中的/data目录上,它是运行于容器中的redis-server数据的持久保持位置。

提示:这里应确保事先要存在一个名为192.168.31.241的NFS服务器,其输出了/data/redis目录,并授权给Kubernetes集群中的节点访问。主机和目录都可以按需进行调整。

3.创建Pod对象并查看配置信息

kubectl apply -f redis-nfs.yaml

如下vol-nfs-pod被调度到了k8s-node03上

kubectl get pods -o wide -l app=redisNAME          READY   STATUS    RESTARTS   AGE    IP            NODE         NOMINATED NODE   READINESS GATESvol-nfs-pod   1/1     Running   0          106s   172.20.3.31   k8s-node03              
kubectl describe pods/vol-nfs-podName:         vol-nfs-podNamespace:    defaultPriority:     0Node:         k8s-node03/192.168.31.233Start Time:   Tue, 23 Jun 2020 13:47:29 +0800Labels:       app=redisAnnotations:  Status:  RunningIP:           172.20.3.31IPs:  IP:  172.20.3.31Containers:  redis:    Container ID:   docker://dfa1a8202b39460db9e1d9849d6a4d416ab50a33e48fae556d1248a8efb3193b    Image:          redis:5.0    Image ID:       docker-pullable://redis@sha256:faea2a6e7fbd7e144cdb15e12ff16c24a5b8d9469e25796ec6d3b7a82a817e1b    Port:           6379/TCP    Host Port:      0/TCP    State:          Running      Started:      Tue, 23 Jun 2020 13:47:30 +0800    Ready:          True    Restart Count:  0    Environment:        Mounts:      /data from redisdata (rw)             #挂载到容器中的路径      /var/run/secrets/kubernetes.io/serviceaccount from default-token-xxqkj (ro)Conditions:  Type              Status  Initialized       True  Ready             True  ContainersReady   True  PodScheduled      TrueVolumes:  redisdata:    Type:      NFS (an NFS mount that lasts the lifetime of a pod)      #NFS类型挂载    Server:    192.168.31.241               #Server是192.168.31.241    Path:      /data/redis                  #Server的路径    ReadOnly:  false                        #不是只读  default-token-xxqkj:    Type:        Secret (a volume populated by a Secret)    SecretName:  default-token-xxqkj    Optional:    falseQoS Class:       BestEffortNode-Selectors:  Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s                 node.kubernetes.io/unreachable:NoExecute for 300sEvents:  Type    Reason     Age    From                 Message  ----    ------     ----   ----                 -------  Normal  Scheduled  2m29s  default-scheduler    Successfully assigned default/vol-nfs-pod to k8s-node03  Normal  Pulled     2m28s  kubelet, k8s-node03  Container image "redis:5.0" already present on machine  Normal  Created    2m28s  kubelet, k8s-node03  Created container redis  Normal  Started    2m28s  kubelet, k8s-node03  Started container redis

4.查看容器挂载情况

kubectl exec -it vol-nfs-pod -- df -hT | grep dataFilesystem                 Type     Size  Used Avail Use% Mounted on192.168.31.241:/data/redis nfs4      59G  9.4G   47G  17% /data#查看/data目录下的数据kubectl exec -it vol-nfs-pod -- ls /datadump.rdb

5.资源创建完成后,可通过其命令客户端redis-cli创建测试数据,并手动触发其同步于存储系统中

kubectl exec -it vol-nfs-pod -- redis-cli127.0.0.1:6379> set mykey 'hello world'OK127.0.0.1:6379> get mykey"hello world"127.0.0.1:6379> BGSAVEBackground saving started127.0.0.1:6379> exit

6.测试数据持久化 为了测试数据持久化效果,下面删除Pod资源vol-nfs-pod,然后再对该Pod重建查看数据是否能够正常访问

#删除Podkubectl delete pods vol-nfs-pod#重建Podkubectl apply -f redis-nfs.yaml#连接到Redis容器并查看数据持久化效果kubectl exec -it vol-nfs-pod -- redis-cli127.0.0.1:6379> keys *1) "mykey"127.0.0.1:6379> get mykey"hello world"

如上所示可以看到,此前创建的mykey及其数据在Pod资源重建后依然存在。

☆ END ☆

8s nfs 挂载文件_Kubernetes集群使用网络存储NFS相关推荐

  1. PPTV Docker集群的网络方案选型

     原作者:李周     转载来源:http://dockone.io/article/1673 PPTV Docker集群的网络方案选型 作者介绍:李周,现PPTVDCOS技术主要负责人.专注于Doc ...

  2. 分盘存储:实现数据库备集群备份文件分散存储

    摘要:为了解决磁盘存储空间限制的问题,提出分盘存储手段,从而实现备集群备份文件分散存储的目的. 1. 摘要 双集群容灾场景下,需要将主集群中的数据备份到备集群.然而,随着主集群数据量的增大,备集群不存 ...

  3. 玩转Docker Ceph集群及对象存储

    为什么80%的码农都做不了架构师?>>>    [编者按]Ceph是一种集高性能.高可靠性和高可扩展性为一体的统一的.分布式的存储系统."统一的"意味着Ceph可 ...

  4. .NET开发框架(八)-服务器集群之网络负载平衡(视频)

    [视频教程在文章底部],本文讲解Windows服务器集群的网络负载平衡NLB的作用,以及在.NET开发框架的架构设计中,如何应用NLB与ARR,使用它们各有什么优点. 视频教程目录: 1.讲解NLB概 ...

  5. 灵雀云开源网络插件Kube-OVN 1.4.0 版发布!支持跨集群容器网络、NetworkPolicy 日志

    从 1.4 开始 Kube-OVN 支持将多个 Kubernetes 集群容器网络打通,不同集群之间的 Pod 可以通过 Pod IP 直接互相通信.本版本还支持 ACL 日志,可以记录因 Netwo ...

  6. nfs服务器_Kubernetes集群下部署NFS持久存储

    NFS是网络文件系统Network File System的缩写,NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地的文件系统中,而在本地的系统中来看,那个远程主机的目录就好像是自己的一 ...

  7. 8s nfs 挂载文件_把你的树莓派家庭实验室变成一个网络文件系统 | Linux 中国

    导读:使用 NFS 服务器将共享文件系统添加到你的家庭实验室. 本文字数:8554,阅读时长大约:12分钟https://linux.cn/article-12413-1.html作者:Chris C ...

  8. windows10没有nfs服务_CentOS 7集群间实现NFS文件共享

    最近在搞实验室集群环境,需要把存储服务器用起来,两台存储服务器大概12T的大小,想实现使其他的8个计算节点都能像访问本地目录一样访问存储服务器,类似Windows下的文件共享,因此使用了NFS服务. ...

  9. 1,多路径 2,nfs cifs 3,集群wrr算法,路由规则 4,haproxy 5, keepalived

    第一天 李子岩  cluster hpc lb ha top500 cpu+gpu(ibm,nvidia) 1PB = 1024T  10GBps 04-11 linux python (14-16) ...

最新文章

  1. html语言字体是否依赖客户端,【前端面试】HTML5+CSS3初级面试1
  2. oracle中取最新的前几条记录(rownum)
  3. 20155308 《信息安全系统设计基础》课程总结
  4. 高等数学下-赵立军-北京大学出版社-题解-练习10.3
  5. 使用jdbc连接mysql数据库代码示例
  6. python3 内置方法
  7. 中科院地平线开源state-of-the-art行人重识别算法EANet:增强跨域行人重识别中的部件对齐...
  8. 哈工大大数据实验_【新闻动态】南京大学PASA大数据实验室在KDD Cup 2020 AutoGraph自动化图数据建模国际挑战赛中荣获第二名...
  9. 用C#实现MD5算法
  10. 化学实验中计算机技术的应用,浅谈计算机在基础化学实验中的应用
  11. Layui 是否开启合计行区域
  12. 实用的base.css文件
  13. 物流管理系统需要的服务器,物流业务管理系统
  14. java视频生成缩略图_Java调用ffmpeg工具生成视频缩略图实例
  15. 实战无成本搭建php社工库,简单、高效、几T数据随便查,高效社工库搭建与数据库整理–深夜福利...
  16. 汽车维修店如何挖掘潜在客户资源
  17. 2019最新 BAT、TMD等公司技术面试题及其答案
  18. 数据结构·堆·完全二叉树
  19. 文件服务器+权限+迁移,文件服务器文件夹,共享文件夹及权限迁移
  20. 区块链系统:挖矿原理

热门文章

  1. TypeError: can't pickle _thread.RLock objects
  2. 知识图谱最新权威综述论文解读:关系抽取
  3. Django-C001-快速入门
  4. 2018.8.2 Juint测试介绍及其命名的规范
  5. 61二叉搜索树的第k个结点
  6. maven常用插件功能
  7. 《构建之法》 读书笔记(4)
  8. JavaScript抽象类及Class.create备忘
  9. 日常小问题汇总(1)
  10. MATLAB图自编码器