kubernetes数据存储(2)--网络文件存储NFS

kubernetes数据存储(2)--网络文件存储NFS

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

GlusterFS、NFS和YRFS都是分布式文件系统,都提供文件级别的存储。它们可以将多个硬件节点上的磁盘空间汇聚为一个统一的文件系统,使得多个不同的机器都可以通过网路访问同一个文件系统中的文件。

目录

部署nfs

使用nfs用作k8s后端存储

创建nginx deployment

创建nginx serivce 

查看效果 

验证nfs存储的持久化特性 

nfs存储的缺点


部署nfs

由于资源有限将mater节点复用为nfs服务器。

所有kubernetes节点都是nfs服务器的客户端,这样无论pod迁移到哪个节点都可以访问到位于nfs服务器上的共享文件。

#nfs服务端配置(复用master节点)
1.检查并安装软件
rpm -q rpcbind nfs-utils
yum install -y rpcbind nfs-utils

2.创建共享目录
#创建/nfs/data目录用做nfs共享文件夹
mkdir -p /nfs/data
#NFS的配置文件,默认文件内容为空(无任何共享)
vim /etc/exports
#设置/nfs/data为共享文件夹,允许所有主机访问
echo "/nfs/data/ *(insecure,rw,sync,no_root_squash)" > /etc/exports

3.启动服务
#一定要先开启rpcbind服务
systemctl start rpcbind
systemctl start nfs

4、查看nfs共享的文件夹和允许连接的网段
showmount -e 172.31.246.53
[root@master ~]# showmount -e 172.31.246.53
Export list for 172.31.246.53:
/nfs/data *



#nfs客户端配置
#将服务端的存储空间共享给客户端
1.检查并安装软件
rpm -q rpcbind nfs-utils
yum install -y rpcbind nfs-utils
systemctl start rpcbind
systemctl start nfs

2.创建共享目录
mkdir -p /nfs/data

3.将服务端的共享目录挂载到客户端的共享目录   
mount 172.31.246.53:/nfs/data/ /nfs/data/

4.查看是否挂载成功
df -h | grep nfs
[root@node1 ~]# df -h | grep nfs
172.31.246.53:/nfs/data        100G   12G   89G  12% /nfs/data

使用nfs用作k8s后端存储

先创建nfs namespace,便于后续实验环境较为干净

apiVersion: v1
kind: Namespace
metadata:
  name: nfs

创建nginx deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx
  name: nginx
  namespace: nfs
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx
        name: nginx
        volumeMounts:
        - name: nginx-volume
          mountPath: /usr/share/nginx/html
      volumes:
      - name: nginx-volume
        #通过nfs服务挂载
        nfs:
          server: 172.31.246.53
          # 此处要特别注意:一定要手动创建nginx子目录,否则pod在过载的时候会报目录不存在异常
          path: /nfs/data/nginx

创建nginx serivce 

apiVersion: v1
kind: Service
metadata:
  labels:
    app: svc-nginx
  name: svc-nginx
  namespace: nfs
spec:
  selector:
    app: nginx
  type: NodePort
  ports:
  - port: 8000
    protocol: TCP
    targetPort: 80

查看效果 

#进入nginx容器
kubectl exec -it nginx-677dc96888-57tcl -n nfs -- bash

#查看nfs存储挂载情况
df -h

#可以看到nfs共享存储已经成功挂载到nginx容器中

由下图可以发现在容器内修改的文件在nfs服务器上的对应目录可以看到

验证nfs存储的持久化特性 

#删除nfs namespace包括namespace下的pod、svc。
kubectl delete ns nfs

#查看文件仍存在d
cat /nfs/data/nginx/index.html 

#重新搭建nginx 再次访问数据还在
kubectl create -f nfs-namespaces.yaml 

kubectl create -f nginx-deployment.yaml 

kubectl create -f nginx-service.yaml 

kubectl get svc -n nfs
curl 10.10.200.115:8000

 

nfs存储的缺点

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

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

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

3、在存储服务器创建相应的存储目录

因此,为了能够屏蔽底层存储实现的细节,方便用户使用, kubernetes引入PV和PVC两种资源对象。kubernetes数据存储(3)--PV&PVC

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值