k8s 存储卷 pod数据持久化 的方式
1- emptyDir
2- -hostPath
hotsPath数据卷:
挂载Node文件系统(Pod所在节点)上文件或者目录到Pod中的容器。如果Pod删除了,宿主机的数据并不会被删除。
3-nfs
提供对NFS挂载支持,可以自动将NFS共享路径挂载到Pod中。
什么是emptyDir:
是一个临时存储卷,与Pod的生命周期绑定到一起,如果Pod被删除了,这意味着数据也被随之删除。
emptyDir作用:
(1)可以实现持久化;
(2)同一个Pod的多个容器可以实现数据共享,多个不同的Pod之间不能进行数据通信;
(3)随着Pod的生命周期而存在,当我们删除Pod时,其数据也会被随之删除;
emptyDir的应用场景:
(1)临时缓存空间,比如基于磁盘的归并排序;
(2)为较耗时计算任务提供检查点,以便任务能方便的从崩溃前状态恢复执行;
(3)存储Web访问日志及错误日志等信息;
emptyDir优缺点:
优点:
(1)可以实现同一个Pod内多个容器之间数据共享;
(2)当Pod内的某个容器被强制删除时,数据并不会丢失,因为Pod没有删除;
缺点:
(1)当Pod被删除时,数据也会被随之删除;
(2)不同的Pod之间无法实现数据共享;
参考链接:
https://kubernetes.io/docs/concepts/storage/volumes#emptydir
温馨提示:
1)启动pods后,使用emptyDir其数据存储在"/var/lib/kubelet/pods"路径下对应的POD_ID目录哟!
/var/lib/kubelet/pods/${POD_ID}/volumes/kubernetes.io~empty-dir/
参考案例:
[root@master231 pod]# cat 11-pods-volumes-emptyDir.yaml
apiVersion: v1
kind: Pod
metadata:
name: volumes-emptydir-004
spec:
# 定义存储卷
volumes:
# 声明存储卷的名称
- name: data
# 声明存储卷类型为emptyDir.
emptyDir: {}
containers:
- name: web
image: harbor.baimei.com/baimei-web/nginx:1.25.1-alpine
# 挂载存储卷
volumeMounts:
# 要挂载的存储卷名称
- name: data
# 指定容器的挂载点
mountPath: /usr/share/nginx/html
- name: linux
image: harbor.baimei.com/baimei-linux/alpine:latest
# 分配一个标准输入
stdin: true
volumeMounts:
- name: data
mountPath: /baimei
hotsPath数据卷:
挂载Node文件系统(Pod所在节点)上文件或者目录到Pod中的容器。如果Pod删除了,宿主机的数据并不会被删除。
应用场景:
Pod中容器需要访问宿主机文件。
hotsPath优缺点:
优点:
(1)可以实现同一个Pod不同容器之间的数据共享;
(2)可以实现同一个Node节点不同Pod之间的数据共享;
缺点:
无法满足跨节点Pod之间的数据共享。
推荐阅读:
https://kubernetes.io/docs/concepts/storage/volumes/#hostpath
参考案例:
apiVersion: v1
kind: Pod
metadata:
name: linux86-volumes-hostpath-005
spec:
# 定义存储卷
volumes:
# 声明存储卷的名称
- name: data
# 声明存储卷类型为hostPath
hostPath:
# 指定宿主机的路径
path: /data
# emptyDir: {}
nodeName: worker233
containers:
- name: web
image: harbor.baimei.com/baimei-web/nginx:1.25.1-alpine
# 挂载存储卷
volumeMounts:
# 要挂载的存储卷名称
- name: data
# 指定容器的挂载点
mountPath: /usr/share/nginx/html
NFS数据卷:
提供对NFS挂载支持,可以自动将NFS共享路径挂载到Pod中。
NFS:
英文全称为"Network File System"(网络文件系统),是由SUN公司研制的UNIX表示层协议(presentation layer protocol),能使使用者访问网络上别处的文件就像在使用自己的计算机一样。
NFS是一个主流的文件共享服务器,但存在单点故障,我们需要对数据进行备份哟,如果有必要可以使用分布式文件系统哈。
推荐阅读:
https://kubernetes.io/docs/concepts/storage/volumes/#nfs
参考案例:
apiVersion: v1
kind: Pod
metadata:
name: linux86-volumes-nfs-003
spec:
# 定义存储卷
volumes:
# 声明存储卷的名称
- name: data
# 声明存储卷类型为hostPath
# hostPath:
# # 指定宿主机的路径
# path: /data
# emptyDir: {}
# 声明nfs类型
nfs:
server: master231
path: /baimei/data/kubernetes
nodeName: worker232
containers:
- name: web
image: harbor.baimei.com/baimei-web/nginx:1.25.1-alpine
# 挂载存储卷
volumeMounts:
# 要挂载的存储卷名称
- name: data
# 指定容器的挂载点
mountPath: /usr/share/nginx/html