kubernetes数据存储(2)--网络文件存储NFS
NFS是一个网络文件存储系统,可以搭建一台NFS服务器,然后将Pod中的存储直接连接到NFS系统上,这样的话,无论Pod在节点上怎么转移,只要host跟NFS的对接没问题,数据就可以成功访问。
GlusterFS、NFS和YRFS都是分布式文件系统,都提供文件级别的存储。它们可以将多个硬件节点上的磁盘空间汇聚为一个统一的文件系统,使得多个不同的机器都可以通过网路访问同一个文件系统中的文件。
目录
部署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