K8S如何挂载NFS

Posted 小武的文字记录

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了K8S如何挂载NFS相关的知识,希望对你有一定的参考价值。


K8S如何挂载NFS


大家好,这篇文章记录一下如何在k8s上挂载NFS。

1. 前言

首先,咱们摆一下为啥要在k8s要挂载NFS,为啥是NFS,不是其他?

在实际环境中,我们有一些场景,比如文件永久保存、日志收集、共享存储,需要在容器间能够方便地传递文件,那么容器自己的存储就不太够看了,没办法把文件永久保存在磁盘上,啥?你说docker的volume?嗯,也不是不行,那就是所谓的local storage,这篇文章不涉及,想要了解的话,请查看k8s官方文档

然后为啥是NFS呢?足够用,且简单好用。官方给了很多方式,像ceph、Glusterfs,他们都说好,可他们不知道维护起来有多麻烦,特别是Ceph,不是专业的存储工程师的话,一旦踏足,今年和明年都有活干了……。NFS则不然,几条命令就可以把目录共享出来,使用也相当方便,他们说存在单点故障之类的,NFS只是协议,咋就存在单点问题了,而且非常多的案例证明,NFS是足够稳定且不容易损坏的,在绝大部分场景下是足够使用了。这个时候你可能会说,啊,我需要裸磁盘,请问你有多少场景是需要裸磁盘的?

2. 干活

那么好了,我们证明完了逻辑,开始干活,撸一个demo出来。

第一,你需要一个K8S集群,要是没有的话,用30秒创建一个k3s集群也是非常不错的,链接见下方参考文档。

第二,你需要一个NFS服务器,要是没有的话,在ubuntu 18.04下,你可以这么干:

 apt install nfs-kernel-server  vim /volume/exports /opt/nfs1 192.168.0.*(rw, sync, no_root_squash, no_subtree_check)  sudo /etc/init.d/nfs-kernel-server restart

当然,你也可以买一个群晖(捂脸。

第三,找个服务器验证一下,是不是好的,这个挺重要的,需要确认权限没有问题,在ubuntu 18.04下,你可以这么干:

 apt install nfs-kernel-server mkdir -p /mnt/nfs mount -t nfs -o nolock 192.168.0.192:/opt/nfs1 /mnt/nfs

第四步,搞一个k8s yaml(专业叫 manifest),然后kubectl apply -f  alpine-nfs.yaml 来试试能不能挂载。

---apiVersion: apps/v1kind: Deploymentmetadata: name: alpinespec: selector: matchLabels: app: alpine replicas: 2 # 启动两个副本看看是不是能共享内容 template: metadata: labels: app: alpine spec: containers: - name: alpine image: alpine:latest command: ["top"] # 让他不要自动退出,能启动起来。 volumeMounts: - name: nfs-client-root # 需要和31行名字一样 mountPath: /persistentvolumes # 这个是容器NFS挂载目录 env: - name: PROVISIONER_NAME value: fuseim.pri/ifs # 这个需要和最后一行名字一样 - name: NFS_SERVER value: 192.168.0.192 # 这个是NFS的IP地址 - name: NFS_PATH value: /volume1/test # 这个是NFS的目录 volumes: - name: nfs-client-root nfs: server: 192.168.0.192 # 这个是NFS的IP地址 path: /volume1/test # 这个是NFS的目录
---apiVersion: storage.k8s.io/v1kind: StorageClassmetadata: name: managed-nfs-storageprovisioner: fuseim.pri/ifs

第五步,进到一个容器里面,cat 123 > /persistentvolumes/1.txt,肯定可以在另外一个容器能看到相同内容,也肯定可以在第三步的目录中看到相同的内容。

第六步,完美!

3. 总结

K8S挂载无权限控制的NFS是比较简单的,而且一般来说够用,本文给了一个非常简单的demo,希望能够对刚接触NFS和K8S的小伙伴有帮助。

参考文档:

  • k3s 快速入门指南: https://docs.rancher.cn/docs/k3s/quick-start/_index

  • ubuntu18.04系统nfs文件系统挂载: https://zhuanlan.zhihu.com/p/102796676

  • 利用NFS动态提供Kubernetes后端存储卷: https://jimmysong.io/kubernetes-handbook/practice/using-nfs-for-persistent-storage.html

  • Alpine Linux,一个只有 5M 的 Docker 镜像: https://www.infoq.cn/article/2016/01/Alpine-Linux-5M-Docker

  • 使用Deployment运行一个无状态应用: https://kubernetes.io/zh/docs/tasks/run-application/run-stateless-application-deployment/

  • k8s启动自动补全: https://kubernetes.io/zh/docs/tasks/tools/install-kubectl/#%E5%90%AF%E7%94%A8-shell-%E8%87%AA%E5%8A%A8%E8%A1%A5%E5%85%A8%E5%8A%9F%E8%83%BD

  • containerd client CLI: https://github.com/projectatomic/containerd/blob/master/docs/cli.md



K8S如何挂载NFS

扫描二维码关注

有态度,有温度

有思考,有行动




以上是关于K8S如何挂载NFS的主要内容,如果未能解决你的问题,请参考以下文章

[k8s]使用nfs挂载pod的应用日志文件

k8s之存储抽象nfs挂载

k8s数据挂载

k8s文件挂载权限分析

如何修复 kubernetes nfs 挂载错误没有这样的文件或目录

microk8s上给Pod挂载NFS