K8S如何挂载NFS
Posted 小武的文字记录
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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/v1
kind: Deployment
metadata:
name: alpine
spec:
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/v1
kind: StorageClass
metadata:
name: managed-nfs-storage
provisioner: 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的主要内容,如果未能解决你的问题,请参考以下文章