【云原生】持久化存储之NFS

简介: 【云原生】持久化存储之NFS

介绍


NFS是一种基于TCP/IP传输的网络文件系统协议,最初由sun公司开发,通过NFS协议。客户机可以向访问本地目录一样访问远程NFS服务器中的共享资源。

NFS也是NAS存储设备必然支持的一种协议,但是因为没有用户认证机制,而且数据在网络上明文传输、安全性很差,所以一般只能在局域网中使用。


一、NFS


使用NFS持久化存储,必须要保证NFS服务器和所有Node节点上都部署了NFS服务,否则无法进行挂载。


1. 部署nfs


1.1 找一台服务器作为nfs服务端
  1. 在nfs服务器上安装nfs服务,并且设置挂载路径为/data/nfs
# 安装nfs
yum install -y nfs-utils
# 设置挂载路径
vim /etc/exports


/data/nfs *(rw,no_root_squash)

0837a6a6331641f49183ab0df550ce72.png


1.2 检查:

执行如下命令,不报错即可。如果报错说明配置文件/etc/exports有问题,会有提示,修改/etc/exports文件即可。

exportfs -r     # 不报错即可


8499c132eb9f4aa589c97bb58db0097e.png


1.3 创建挂载路径

挂载路径需要自己创建,这里的挂在路径为:/data/nfs

mkdir /data
cd/data
mkdir nfs

f2b8c2991fd144c694d9fb45fde02e94.png


1.4 在nfs服务器启动nfs服务
systemctl start nfs
ps -ef | grep nfs


1caebe5588be453d82c45e0702acd3ec.png


2. 所有node节点部署nfs服务

在k8s集群的所有node节点上安装nfs,以保证能够挂载成功

yum install -y nfs-utils


3. 测试—部署nginx应用,使用nfs持久网络存储

  1. 在pv目录下创建nfs-nginx.yaml文件,将下述代码复制进去:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-dep1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        volumeMounts:
        - name: wwwroot
          mountPath: /usr/share/nginx/html
        ports:
        - containerPort: 80
      volumes:
        - name: wwwroot
          nfs:
            server: 192.168.2.6  ## nfs服务器IP
            path: /data/nfs   ## nfs服务器挂在路径


运行yaml文件

kubevtl apply -f nfs-nginx.yaml


查看pod

kubectl get pods


331da6dcb5ea44f5bf037e35592104e7.png

  1. 在nfs服务器中,目录/data/nfs/下创建index.yaml文件,编辑文件内容

1469aa78694c4b7b887aae6d6b06ac66.png

  1. 进入master中创建的pod,查看index.yaml文件存在,查看内容
kubectl exec -it [pod 名称] bash
ls /usr/share/nginx/html
cat /usr/share/nginx/html/index.html

96db7444462c416bbf983ee24af7d329.png

  1. 暴露端口号
kubectl expose deployment nginx-dep1 --port=80 --target-port=80 --type=NodePort


查看端口号

kubectl get svc


5、IP+端口号访问nginx网页,显示编辑的内容

0f866d7d16d84df09da645ff8954e7f6.png

看到以上内容说明挂载成功。


二、 PV和PVC


2.1 PV

持久化存储,对存储资源进行抽象,对外提供可以调用的地方(生产者)


2.2 PVC

用于调用,不需要关心内部实现细节(消费者)


2.3 实现流程

c6aa9be91d9f452a9550184658608566.png

pv相当于物理主机,pvc相当于电脑中的C盘D盘等存储磁盘,必须依赖于主机存在,类似于pvc必须要绑定pv


2.4 PV&PVC挂载步骤

  1. 在master节点上创建pv目录,在pv目录下创建两个yaml文件,pv.yamlpvc.yaml,yaml文件内容如下,复制到对应yaml文件中:
    pv.yaml内容:
apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteMany
  nfs:
    path: /data/nfs     ## nfs服务器中挂在路径
    server: 192.168.2.6   ## nfs服务器IP


pvc.yaml内容:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-dep1
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        volumeMounts:
        - name: wwwroot
          mountPath: /usr/share/nginx/html
        ports:
        - containerPort: 80
      volumes:
      - name: wwwroot
        persistentVolumeClaim:
          claimName: my-pvc
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi


运行两个yaml文件

kubectl apply -f pv.yaml
kubectl apply -f pvc.yaml


查看

kubectl get pods
kubectl get pv,pvc

75fdb07c8f7b499780903f2492f6bf41.png

进入任意一个创建的pod中,由于副本数为3,所以我们随便进一个pod里,就会有和nfs服务器一样的index.html文件

kubectl exec -it nginx-dep1-58b7bf955f-7s8hp  bash


下图是master节点上,进入pod内的index.hml

28660faaceeb40b1917b0e2edda86b01.png

下图是nfs服务器上挂载路径下的index.html

718a2300b69c4997adc2a04c8199d1cc.png

相关文章
|
2月前
|
存储 Kubernetes 调度
使用 Kubeadm 部署 Kubernetes(K8S) 安装 -- 持久化存储(NFS网络存储)
使用 Kubeadm 部署 Kubernetes(K8S) 安装 -- 持久化存储(NFS网络存储)
48 0
|
5月前
|
存储 Kubernetes 应用服务中间件
k8s-配置与存储-持久化存储-NFS 挂载、StorageClass 存储类 动态创建NFS-PV案例
k8s-配置与存储-持久化存储-NFS 挂载、StorageClass 存储类 动态创建NFS-PV案例
471 0
|
5月前
|
存储 Kubernetes Cloud Native
云原生|kubernetes|持久化存储pv,pvc和StorageClass的学习
云原生|kubernetes|持久化存储pv,pvc和StorageClass的学习
259 1
|
5月前
|
存储 Kubernetes 关系型数据库
kubernetes学习之持久化存储StorageClass(4---nfs存储服务)
kubernetes学习之持久化存储StorageClass(4---nfs存储服务)
120 0
|
存储 弹性计算 Cloud Native
云原生-云应用挂载持久化存储卷NAS及通过NAS实现批量机器并发查找日志
云原生-云应用挂载持久化存储卷NAS及通过NAS实现批量机器并发查找日志
402 0
云原生-云应用挂载持久化存储卷NAS及通过NAS实现批量机器并发查找日志
|
存储 弹性计算 Kubernetes
云原生-ZK集群及ZK云应用(ZK镜像制作、镜像上传、部署ZK应用、挂载持久化存储卷NAS)
云原生-ZK集群及ZK云应用(ZK镜像制作、镜像上传、部署ZK应用、挂载持久化存储卷NAS)
296 0
云原生-ZK集群及ZK云应用(ZK镜像制作、镜像上传、部署ZK应用、挂载持久化存储卷NAS)
|
存储 缓存 Kubernetes
云原生|kubernetes|持久化存储pv,pvc和StorageClass的学习(一)
云原生|kubernetes|持久化存储pv,pvc和StorageClass的学习
160 0
云原生|kubernetes|持久化存储pv,pvc和StorageClass的学习(一)
|
存储 缓存 Kubernetes
云原生|kubernetes|持久化存储pv,pvc和StorageClass的学习
kubernetes的持久化存储前面学习的时候好像有很多误区,在此,做一个准确的总结,并且与各位能够有一个深入的探讨。
188 0
云原生|kubernetes|持久化存储pv,pvc和StorageClass的学习
|
存储 缓存 Kubernetes
云原生|kubernetes|持久化存储pv,pvc和StorageClass的学习
kubernetes的持久化存储前面学习的时候好像有很多误区,在此,做一个准确的总结,并且与各位能够有一个深入的探讨。
131 0
云原生|kubernetes|持久化存储pv,pvc和StorageClass的学习
|
存储 Kubernetes Cloud Native
云原生|kubernetes|持久化存储pv,pvc和StorageClass的学习(三)
云原生|kubernetes|持久化存储pv,pvc和StorageClass的学习
198 0
下一篇
无影云桌面