09-Kubernetes中使用NFS做pod持久化存储

1.0 节点环境

ip地址主机名称角色
10.0.0.70master1.lec.orgK8s 集群主节点 1,Master和etcd
10.0.0.71node1.lec.orgK8s 集群工作节点 1
10.0.0.72node2.lec.orgK8s 集群工作节点 2
10.0.0.73node3.lec.orgK8s 集群工作节点 3
10.0.0.80nfsnfs服务器

1.1 NFS存储卷

nfs存储卷
◼ 将nfs服务器上导出(export)的文件系统用作存储卷
◼ nfs是文件系统级共享服务,它支持多路挂载请求,可由多个Pod对象同时用作存储卷后端

配置参数
◼ server :NFS服务器的IP地址或主机名,必选字段
◼ path :NFS服务器导出(共享)的文件系统路径,必选字段
◼ readOnly :是否以只读方式挂载,默认为false

1.2 基于NFS的多pod示例

在这里插入图片描述

1.3 搭建nfs服务

  • nfs机器10.0.0.80
# 1、安装nfs服务端,2049端口
root@nfs:~# apt install nfs-kernel-server -y 
 
# 2、创建共享目录
root@nfs:~# mkdir /nfs-data

# 3、设置共享,把目录进行共享,赋予读写权限,不做权限映射,是哪个用户写的就是哪个用户的uid和gid权限
root@nfs:~# echo -e "/nfs-data 10.0.0.0/24(no_root_squash,no_subtree_check,rw)" >> /etc/exports

/nfs-data 10.0.0.0/24(no_root_squash,no_subtree_check,rw)

# 4、立即生效配置
root@nfs:~# exportfs -r
# 查看
root@nfs:~# exportfs -v
/nfs-data       10.0.0.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)

1.4 每个node节点安装showmount命令客户端

  • node节点
# 1、安装showmount命令客户端
root@node2:~# apt install nfs-common -y 

# 2、检查能否识别到nfs服务器,和权限
root@node2:~# showmount -e  10.0.0.80
Export list for 10.0.0.80:
/nfs-data 10.0.0.0/24

1.5 测试nfs

1.5.1 创建pod: redis-nfs-001,并写入数据

  • master节点
# yaml文件
vi nfs-1.yaml

---
apiVersion: v1
kind: Pod
metadata:
  name: redis-nfs-001
spec:
  nodeName: node1.lec.org
  containers:
  - name: redis
    image: redis:6
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: redisdata
      mountPath: /data
  volumes:
  - name: redisdata
    nfs:
      server: 10.0.0.80
      path: /nfs-data 

# 创建pod
kubectl apply -f nfs-1.yaml
# 查看pod
kubectl get pod -o wide 

# 进入容器并向redis中写入数据
root@master1:~/yaml# kubectl exec -it redis-nfs-001 -- /bin/sh 
# redis-cli
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> set name lec
OK
127.0.0.1:6379> get name
"lec"
127.0.0.1:6379> save 
OK
127.0.0.1:6379> exit
# ls /data
dump.rdb 
  • nfs节点
# nfs服务上查看文件
root@nfs:~# ls -lrt /nfs-data
total 4
-rw-r--r-- 1 systemd-coredump systemd-coredump 107 Feb  4 11:27 dump.rdb
  • master节点
# master上删除pod
kubectl delete -f nfs-1.yaml

1.5.2 创建pod: redis-nfs-002,并查看数据是否是nfs上的数据

  • master节点
# yaml文件

vi nfs-2.yaml

---
apiVersion: v1
kind: Pod
metadata:
  name: redis-nfs-002
spec:
  nodeName: node2.lec.org
  containers:
  - name: redis
    image: redis:6
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: redisdata
      mountPath: /data
  volumes:
  - name: redisdata
    nfs:
      server: 10.0.0.80
      path: /nfs-data 

# 创建pod
kubectl apply -f nfs-2.yaml
# 查看pod
kubectl get pod -o wide 

# 进入容器,并查看redis数据(发现和nfs上数据一致)
root@master1:~/yaml# kubectl exec -it redis-nfs-002 -- /bin/sh
# redis-cli
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> get name 
"lec"

# 删除pod
kubectl delete -f nfs-2.yaml
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值