我是靠谱客的博主 机智白开水,最近开发中收集的这篇文章主要介绍3-3 K8s集群基于NFS的pod数据持久化前言本地存储EmptyDir本地存储HostPath网络存储NFSPOD使用NFS,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 前言
  • 本地存储EmptyDir
  • 本地存储HostPath
  • 网络存储NFS
    • 服务端
    • 客户端
  • POD使用NFS


前言

在 Docker 中就有数据卷的概念,当容器删除时,数据也一起会被删除,想要持久化使用数据,需要把主机上的目录挂载到 Docker 中去,在 K8S 中,数据卷是通过 Pod 实现持久化的,如果 Pod 删除,数据卷也会一起删除,k8s 的数据卷是 docker 数据卷的扩展,K8S 适配各种存储系统,包括本地存储 EmptyDir,HostPath, 网络存储(NFS,GlusterFS,PV/PVC)等。



本地存储EmptyDir

EmptyDir主要用于临时目录共享,创建pod时,会在node产生一个空目录。卸载pod时,目录也会删除。该目录可被pod中多个容器共享。

apiVersion: v1
kind: Pod
metadata:
name: alpine-po
namespace: my-ns
spec:
containers:
- name: alpine
image: alpine
command: [ "/bin/sh", "-c", "--" ]
args: [ "while true; do sleep 30; done;" ]
volumeMounts:
- name: my-empty-dir
mountPath: /myemptydir
volumes:
- name: my-empty-dir
emptyDir: {}

查看挂载的emptyDir,当删除pod后,在node也会消失。

kubectl describe pod/alpine-po -n my-ns
...
Mounts:
/myemptydir from my-empty-dir (rw)
...

本地存储HostPath

HostPath挂载宿主机上的目录或文件,当pod删除,node的目录或文件保留。与docker run使用的-v是一样的。

apiVersion: v1
kind: Pod
metadata:
name: alpine-po
namespace: my-ns
spec:
containers:
- name: alpine
image: alpine
command: [ "/bin/sh", "-c", "--" ]
args: [ "while true; do sleep 30; done;" ]
volumeMounts:
- name: my-host-path
mountPath: /myhostpath
volumes:
- name: my-host-path
hostPath:
path: /data

进入pod容器,创建一个文件。再到node查看/data目录文件。挂载成功,pod删除文件还在。

kubectl exec alpine-po -n my-ns -it -- sh
sh# echo iampod > /myhostpath/test.txt 

网络存储NFS

NFS是一种网络文件系统,服务器可以通过NFS将数据存储到另外的网络设备,而不是本地磁盘。在k8s集群中,本地存储较少使用。大部分以网络存储和PV/PVC为主。

服务端

下面将介绍在集群中部署NFS,首先创建一台新的nfs服务器:

# 安装应用,开机自启
yum install nfs-utils
systemctl enable --now nfs
# 创建共享目录,名字要和客户端不一致,属主属组选nfsnobody。
mkdir /data100
chown nfsnobody.nfsnobody /data100
# 提供共享服务,可共享的IP段为物理机IP,rw可读写,all_squash远程用户连到nfs服务器都压榨成nfsnobody用户。
cat << EOF >> /etc/exports
/data100 192.168.100.0/24(rw,all_squash)
EOF
# 重新加载,查看挂载情况
exportfs -r
exportfs -v
# nfs涉及端口较多,测试环境可关闭防火墙
systemctl disable --now firewalld

客户端

查看nfs可用挂载,远程目录挂载到本地mnt目录,开机自动挂载。

# 也需要安装nfs,但不用启动service
yum install nfs-utils
showmount -e 192.168.100.155
mount -t nfs 192.168.100.155:/data100 /mnt
# 设置开机自动挂载
cat << EOF >> /etc/fstab
192.168.100.155:/data200 /mnt nfs4 defaults,_netdev 0 0
EOF

POD使用NFS

配置方式和本地存储类似,挂载部分参照客户端的配置:

apiVersion: v1
kind: Pod
metadata:
name: alpine-po
namespace: my-ns
spec:
containers:
- name: alpine
image: alpine
command: [ "/bin/sh", "-c", "--" ]
args: [ "while true; do sleep 30; done;" ]
volumeMounts:
- name: my-nfs
mountPath: /mnt
volumes:
- name: my-nfs
nfs:
server: 192.168.100.155
path: /data100

进入容器课程挂载情况:

kubectl exec alpine-po -n my-ns -it -- df -hT


最后

以上就是机智白开水为你收集整理的3-3 K8s集群基于NFS的pod数据持久化前言本地存储EmptyDir本地存储HostPath网络存储NFSPOD使用NFS的全部内容,希望文章能够帮你解决3-3 K8s集群基于NFS的pod数据持久化前言本地存储EmptyDir本地存储HostPath网络存储NFSPOD使用NFS所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部