k8s–基础–18.4–存储卷–类型–NFS


1、介绍

1.1、 NFS概念

  1. NFS是一种基于TCP/IP传输的网络文件系统协议。
  2. 通过使用NFS协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源

1.2、 注意

  1. nfs支持多个客户端挂载,可以在多创建几个pod,挂载同一个nfs服务器
  2. nfs如果宕机了,数据也就丢失了,需要使用分布式存储,常见的分布式存储有glusterfs和cephfs。

2、搭建NFS服务端

在master1上操作
参考资料

https://blog.csdn.net/zhou920786312/article/details/124919461

2.1、安装软件包

# 查看是否安装了 nfs-utils和rpcbind 软件包
rpm -q rpcbind nfs-utils                  

# 没有则用yum安装
yum install -y rpcbind nfs-utils  		

2.2、设置共享目录

2.2.1、创建共享目录

# 创建目录
mkdir /nfs/share -p

# 给与权限
chmod 777 /nfs/share
 

2.2.2、编辑配置文件

# vim /etc/exports	
/nfs/share 192.168.187.0/24(rw,no_root_squash)
说明
  1. /nfs/share 允许192.168.187.0/24的客户端访问。
  2. rw:表示允许读写,ro表示为只读;
  3. no_root_squash:表示当客户机以root身份访问时赋予本地root权限

2.3、启动NFS服务程序

# 启动
systemctl start rpcbind.service
systemctl start nfs



# 开机自启动
systemctl enable rpcbind.service
# 开机自启动
systemctl enable nfs

2.4、查看rpcbind是否开启和本机发布的NFS共享目录

# 查看rpcbind是否开启,rpcbind服务默认使用111端口
netstat -anpt | grep rpcbind   

# 宣告共享目录
exportfs -arv

# 查看本机发布的NFS共享目录
showmount -e 

在这里插入图片描述

3、搭建NFS 客户端

  1. 在node1上操作
  2. 这里是为了测试,可以不做
  3. pod本质就是NFS客户端,这里搭建NFS客户端只是为了验证NFS服务端有没有搭建成功
https://blog.csdn.net/zhou920786312/article/details/124919461

3.1、安装软件包

# 查看是否安装rpcbind,nfs-utils 
rpm -q rpcbind nfs-utils  
# 未安装可以使用yum进行安装                  
yum install -y rpcbind nfs-utils 
 			
 

3.2、启动客户端

 
# 开启 rpcbind服务            
systemctl start rpcbind			
# 设置开机自启			
systemctl enable rpcbind					
		

3.3、手动挂载并查看是否成功

# 创建目录
mkdir  /nfs-client-share
# 手动挂载
mount 192.168.187.154:/nfs/share /nfs-client-share
# 查看是否成功
df -Th | grep /nfs-client-share

在这里插入图片描述

4、创建有存储卷的pod

  1. 如果原先pod-nginx-volume.yaml已经被使用,需要先删除
  2. 在master1节点上操作
kubectl delete -f /root/test2/pod-nginx-volume.yaml  

4.1、查看字段定义

# 其他字段不懂通过explain来查看
kubectl explain pods.spec.volumes.nfs

4.2、创建脚本

vi /root/test2/pod-nginx-volume.yaml

内容

apiVersion: v1
kind: Pod
metadata:
  # pod的名称
  name: pod-nginx-volume
spec: 
  containers:
  - name: c-nginx
    image: nginx:1.14
    # 容器挂载存储卷
    volumeMounts:
    # 容器存储卷目录
    - mountPath: /usr/share/nginx/html
      # 引入名称为nginx-volume的存储定义
      name: nginx-volume
  # 设置存储卷定义
  volumes:
    # 存储卷类型
    - nfs: 
        # nfs共享目录
        path: /nfs/share
        # nfs服务端地址
        server: 192.168.187.154
      # 存储卷名称
      name: nginx-volume   
 
 

4.3、执行

kubectl apply -f /root/test2/pod-nginx-volume.yaml 

5、验证

5.1、查看pod在哪个节点上

kubectl get pods pod-nginx-volume -o wide

在这里插入图片描述

可以看到pod在node1上。

5.2、在容器存储卷目录 创建文件

kubectl -it exec  pod-nginx-volume -c c-nginx -- /bin/sh
cd /usr/share/nginx/html
echo 'hello' > index.html

在这里插入图片描述

5.3、可以看到,nfs客户端和服务端都出现了index.html

在这里插入图片描述

5.3、访问pod

在这里插入图片描述

上面说明挂载nfs存储卷成功了

6、一个pod多个存储卷

6.1、nfs服务端配置修改

在这里插入图片描述

6.2、重启nfs服务端

# 重启
systemctl restart rpcbind.service
systemctl restart nfs
# 宣告共享目录
exportfs -arv

在这里插入图片描述

6.3、修改pod

apiVersion: v1
kind: Pod
metadata:
  # pod的名称
  name: pod-nginx-volume
spec: 
  containers:
  - name: c-nginx
    image: nginx:1.14
    ports:
    - containerPort: 80
      protocol: TCP
    # 容器挂载存储卷
    volumeMounts:
    # 容器存储卷目录
    - mountPath: /usr/share/nginx/html
      # 引入名称为nginx-volume的存储定义
      name: nginx-volume
  - name: c-tomcat
    image: tomcat:8.5-jre8-alpine
    ports:
    - containerPort: 8080
      protocol: TCP
    # 容器挂载存储卷
    volumeMounts:
    # 容器存储卷目录
    - mountPath: /tomcat
      # 引入名称为nginx-volume2的存储定义
      name: nginx-volume2   
      
  # 设置存储卷定义
  volumes:
    # 存储卷类型
    - nfs: 
        # nfs共享目录
        path: /nfs/share
        # nfs服务端地址
        server: 192.168.187.154
      # 存储卷名称
      name: nginx-volume   
    # 存储卷类型
    - nfs: 
        # nfs共享目录
        path: /nfs/share2
        # nfs服务端地址
        server: 192.168.187.154
      # 存储卷名称
      name: nginx-volume2   
 

在这里插入图片描述

6.4、在容器c-nginx,c-tomcat的存储卷目录 创建文件

kubectl -it exec  pod-nginx-volume -c c-nginx -- /bin/sh
cd /usr/share/nginx/html
echo 'hello1' > index.html


kubectl -it exec  pod-nginx-volume -c c-tomcat -- /bin/sh
cd /tomcat
echo 'hello2' > index.html

6.5、在nfs服务端查看

在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐