前言
在以前使用docker 的时候,当我们需要把容器内的目录映射到主机的时候通常是下面的情况
现在使用k8s,当发生故障转移的时候会出现转移后找不到挂载文件的情况
ks8可以统一把挂载的这层统一管理起来,称为存储层,以后你的pod想挂什么,你找k8s申请 k8s给你分配空间,当你的pod死了在其他节点重启,k8s还是能找到你之前挂载的东西
k8s在存储层是开放的,你可以选择不同的存储方案
以nfs为例,当你在node1创建了一个50g的空间,同样也会在其他节点创建这个空间,在任意一个地方写都会同步到其他节点,当你pod2节点炸了,在pod3拉起的时候,以为node3节点同步了数据,所以新拉起的节点也可以正常读取到数据
这篇我们先演示下使用NFS挂载
整体架构
NFS安装
环境准备
#所有机器安装
yum install -y nfs-utils
主节点
#nfs主节点
echo "/nfs/data/ *(insecure,rw,sync,no_root_squash)" > /etc/exports
mkdir -p /nfs/data
systemctl enable rpcbind --now
systemctl enable nfs-server --now
exportfs -r
从节点
showmount -e 172.16.55.75
#执行以下命令挂载 nfs 服务器上的共享目录到本机路径 /root/nfsmount
mkdir -p /nfs/data
mount -t nfs 172.16.55.75:/nfs/data /nfs/data
测试
在随便一台写入,在任意一台观察数据是否同步
# 写入一个测试文件
echo "hello nfs server" > /nfs/data/test.txt
pod挂载
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx-pv-demo
name: nginx-pv-demo
spec:
replicas: 2
selector:
matchLabels:
app: nginx-pv-demo
template:
metadata:
labels:
app: nginx-pv-demo
spec:
containers:
- image: nginx
name: nginx
volumeMounts:
- name: html
mountPath: /usr/share/nginx/html
volumes:
- name: html
nfs:
server: 172.16.55.75
path: /nfs/data/nginx-pv
pod启动成功后,测试在外部nfs server修改下文件,进入pod里面看下挂载的目录下文件是否同步发生了变化