概述
文章目录
- 前言
- 本地存储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所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复