您的位置 首页 k8s

Pod数据持久化-emptyDir-hostsPath-nfs

Pod数据持久化,当Pod被删除时,数据丢失的问题该如何解决?

有3中 方式: emptyDir , hotsPath数据卷, nfs 数据卷

 

接下来分别介绍一下:

一、emptyDir

 

什么是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: dashu-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-dashu

 

二、hotsPath数据卷:

hotsPath数据卷:
	挂载Node文件系统(Pod所在节点)上文件或者目录到Pod中的容器。如果Pod删除了,宿主机的数据并不会被删除。

应用场景:
Pod中容器需要访问宿主机文件。

hotsPath优缺点:

	优点:
		(1)可以实现同一个Pod不同容器之间的数据共享;
		(2)可以实现同一个Node节点不同Pod之间的数据共享;

	缺点:
		无法满足跨节点Pod之间的数据共享。
推荐阅读:
参考案例:
[root@master231 pod]# cat 12-pods-volumes-hostPath.yaml

apiVersion: v1
kind: Pod
metadata:
  name: dashu-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


---

apiVersion: v1
kind: Pod
metadata:
  name: dashu-volumes-hostpath-006
spec:
  volumes:
  - name: data
    hostPath:
      path: /data
    # emptyDir: {}
  nodeName: worker233
  containers:
  - name: linux
    image: harbor.baimei.com/baimei-linux/alpine:latest
    stdin: true
    volumeMounts:
    - name: data
      mountPath: /baimei-dashu

type:  DirectoryOrCreate   , 如果目录不存在就创建。

 

三、NFS数据卷

NFS数据卷:
提供对NFS挂载支持,可以自动将NFS共享路径挂载到Pod中。

NFS:
	英文全称为"Network File System"(网络文件系统),是由SUN公司研制的UNIX表示层协议(presentation layer protocol),能使使用者访问网络上别处的文件就像在使用自己的计算机一样。
	NFS是一个主流的文件共享服务器,但存在单点故障,我们需要对数据进行备份哟,如果有必要可以使用分布式文件系统哈。

推荐阅读:
https://kubernetes.io/docs/concepts/storage/volumes/#nfs

 

nfs共享存储案例:

1)所有节点安装nfs相关软件包
[root@master231 pod]# yum -y install nfs-utils
[root@worker232 ~]# yum -y install nfs-utils
[root@worker233 ~]# yum -y install nfs-utils


	(2)master231节点设置共享目录
[root@master231 pod]# mkdir -pv /baimei/data/kubernetes
[root@master231 pod]# cat > /etc/exports <<'EOF'
/baimei/data/kubernetes *(rw,no_root_squash)
EOF

	(3)配置nfs服务开机自启动
[root@master231 pod]# systemctl enable --now nfs

	(4)服务端检查NFS挂载信息,如上图所示。
[root@master231 pod]# exportfs

	(5)客户端节点手动挂载测试
[root@worker233 ~]# mount -t nfs master231:/baimei/data/kubernetes /mnt/
[root@worker233 ~]# 
[root@worker233 ~]# cp /etc/os-release /mnt/
[root@worker233 ~]# 
[root@worker233 ~]# 
[root@worker233 ~]# ll /mnt/
total 4
-rw-r--r-- 1 root root 393 Jun 16 16:23 os-release
[root@worker233 ~]# 
[root@worker233 ~]# umount /mnt 
[root@worker233 ~]# 
[root@worker233 ~]# ll /mnt/
total 0
[root@worker233 ~]# 

 

(6)编写资源清单

[root@master231 pod]# cat 13-pods-volumes-nfs.yaml

 

apiVersion: v1
kind: Pod
metadata:
  name: dashu-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


---

apiVersion: v1
kind: Pod
metadata:
  name: dashu-volumes-nfs-004
spec:
  volumes:
  - name: data
    # hostPath:
    #   path: /data
    # emptyDir: {}
    nfs:
      server: master231
      path: /baimei/data/kubernetes
  nodeName: worker233
  containers:
  - name: linux
    image: harbor.baimei.com/baimei-linux/alpine:latest
    stdin: true
    volumeMounts:
    - name: data
      mountPath: /baimei-dashu

 

欢迎来撩 : 汇总all

白眉大叔

关于白眉大叔linux云计算: 白眉大叔

热门文章