kubernetes使用nfs存储

NFS 是Network File System的缩写,即网络文件系统。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。

NFS使用RPC协议进行通信,也就是说NFS系统只是一组RPC程序。FS可以看作是一个RPC Server,主要功能是管理需要分享的目录和文件。它不负责通信和信息传输,而是把这部分工作交给RPC协议来完成。

1. 安装nfs
nfs服务端安装:

yum -y install nfs-utils
mkdir /data/volumes -p
echo “/data/volumes 192.168.1.0/24(rw,no_root_squash,no_all_squash,async,anonuid=501,anongid=501)” >> /etc/exports
systemctl start nfs-server && systemctl enable nfs-server

客户端安装:

yum -y install nfs-utils

2.测试挂载nfs数据卷

#cat nfs-mount-test.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-nfs-pvc
labels:
name: nginx-nfs-pvc
spec:
containers:
- name: nginx-nfs-container
image: nginx:1.10
ports:
- name: http
containerPort: 80
volumeMounts:
- name: nginx-vol
mountPath: /usr/share/nginx/html
volumes:
- name: nginx-vol
nfs:
path: /data/nfs-test
server: 192.168.4.10

3.查看pod信息并测试访问网页

[root@node1-1 nfs-pv]# kubectl get pod nginx-nfs-pvc -owide
NAME READY STATUS RESTARTS AGE IP NODE
nginx-nfs-pvc 1/1 Running 0 1m 10.2.45.7 192.168.4.114

# 服务端数据目录写入:

cd /data/nfs-test
echo “hello” > index.html

# 测试挂载成功

[root@node1-1 nfs-pv]# curl 10.2.45.7
hello

nfs 静态供给存储

1.创建pv配置文件

apiVersion: v1
Kind: PersistentVolume
metadata:
name: pv001
labels:
name: pv001
spec:
accessmodes:
- ReadWriteMany
- ReadOnlyMany
- ReadWriteOnce
capacity:
storage: 2Gi
PersistentVolumeReclaimPolicy: Retain
nfs:
path: /data/volume01
server: 192.168.4.133

apiVersion: v1
Kind: PersistentVolume
metadata:
name: pv002
labels:
name: pv002
spec:
accessmodes:
- ReadWriteMany
- ReadWriteOnce
capacity:
storage: 5Gi
PersistentVolumeReclaimPolicy: Retain
nfs:
path: /data/volume02
server: 192.168.4.133

定义多个pv就在这里写多个配置

pv是全局使用的,没有namespace概念

accessModes 支持的访问模式有3种:
需要注意的是不同的存储支持不同的数据访问模式:(需要根据存储支持的访问模式进行配置)

  1. ReadWriteOnce – PV 能以 read-write 模式 mount 到单个节点。
  2. ReadOnlyMany – PV 能以 read-only 模式 mount 到多个节点。
  3. ReadWriteMany – PV 能以 read-write 模式 mount 到多个节点。

persistentVolumeReclaimPolicy 指定当 PV 的回收策略。
支持的策略有3种:

  1. Retain – 需要管理员手工回收。(保留数据)
  2. Recycle – 清除 PV 中的数据,效果相当于执行 rm -rf /thevolume/*。
  3. Delete – 删除 Storage Provider 上的对应存储资源,例如 AWS EBS、GCE PD、Azure Disk、OpenStack Cinder Volume 等。
2.静态供给 nfs PVC 创建

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 4Gi

3.静态供给 nfs pod 创建

apiVersion: v1
kind: Pod
metadata:
name: nfs-pvc-pod01
namespace: default
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v1
volumeMounts:
- name: html
mountPath: /usr/share/nginx/html
volumes:
- name: html
persistentVolumeClaim:
claimName: nfs-pvc-01

配置 pv 和 pvc 和 pod 时,最好将配置文件分离开,如果pvc的回收模式是:Retain,此时将 pod 和 pvc 删除,此 pvc 将无法被使用。因为 pvc 保留这上一次启动pod生成的数据。

[root@node1-1 nfs-pv-test]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv001 2Gi RWO,ROX,RWX Retain Available 4m
pv002 5Gi RWO,RWX Retain Bound default/nfs-pvc-01 4m

[root@node1-1 nfs-pv-test]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
nfs-pvc-01 Bound pv002 5Gi RWO,RWX 13m

从 kubectl get pvc 和 kubectl get pv 的输出可以看到 pvc-test1 已经 Bound 到 nfs-pvc,申请成功

storageClassName 指定 PV 的 class 为 nfs。相当于为 PV 设置了一个分类,PVC 可以指定 class 申请相应 class 的 PV。
kubectl get pv ,STATUS 为 Available,表示 pv-test1 就绪,可以被 PVC 申请。

NFS小知识:

更新nfs存储卷:

exportfs -arv

显示nfs的存储卷:

showmount -e nfsserverIP

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值