k8s从入门到实战(十):k8s存储之NFS挂载

3,316 阅读2分钟
前言

在以前使用docker 的时候,当我们需要把容器内的目录映射到主机的时候通常是下面的情况

image.png

现在使用k8s,当发生故障转移的时候会出现转移后找不到挂载文件的情况

image.png

ks8可以统一把挂载的这层统一管理起来,称为存储层,以后你的pod想挂什么,你找k8s申请 k8s给你分配空间,当你的pod死了在其他节点重启,k8s还是能找到你之前挂载的东西

image.png

k8s在存储层是开放的,你可以选择不同的存储方案

image.png

以nfs为例,当你在node1创建了一个50g的空间,同样也会在其他节点创建这个空间,在任意一个地方写都会同步到其他节点,当你pod2节点炸了,在pod3拉起的时候,以为node3节点同步了数据,所以新拉起的节点也可以正常读取到数据

image.png 这篇我们先演示下使用NFS挂载

整体架构

image.png

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里面看下挂载的目录下文件是否同步发生了变化