Kubernetes教程(九)了解卷volume的emptyDir和hostPath
了解卷volume的emptyDir和hostPath
- 一、前言
- 二、卷
- 1. emptyDir
- 2. hostPath
 
一、前言
Pod的特点是临时性,随着Pod的重建,容器中的产生的数据会被销毁,这将导致应用程序无法读取之前的数据。K8s提供的卷(volume)和持久卷(persistent volume)就是要解决Pod中数据持久性的问题。
二、卷
卷是一种用于在Pod中存储和共享数据的抽象,它提供一种把存储设备挂载到Pod中的机制,以便Pod可以存储和访问。
| 卷类型分类 | 卷类型 | 说明 | 
|---|---|---|
| 临时存储 | emptyDir | 用于 Pod中容器之间的数据共享 | 
| 本地存储 | hostPath | 将节点文件系统上的文件或目录挂载到 Pod中 | 
| 存储对象 | ConfigMap、Secret | K8s内置的存储对象,存储程序配置和敏感数据 | 
| 自建存储系统 | NFS、Ceph、ISCSI | 将自建存储系统挂载到 Pod中 | 
| 存储对象 | 持久卷声明 | 与persistentVolume持久卷配合使用 | 
1. emptyDir
- emptyDir用于在- Pod中实现容器之间的数据共享。
- emptyDir与- Pod的生命周期一致,当- Pod被删除时,这个目录也会被删除。
- emptyDir特点:- 临时、- 临时、- 临时,重要的事说三遍。💥💥💥

 emptyDir卷的配置
apiVersion: v1
kind: Pod
metadata:name: emptydir-example
spec:containers:# 应用容器- image: app1name: appvolumeMounts:               # 卷挂载- name: data                # 挂载的卷名称mountPath: /opt           # 卷挂载到容器中的路径# 边车容器- image: app2name: sidecarvolumeMounts:               - name: data                 mountPath: /opt       volumes:                      # 定义卷- name: data                  # 卷名称emptyDir:                   # 卷类型sizeLimit: 1Gi             # 卷的大小限制为1G              
2. hostPath
hostPath卷用于将主机上的任意目录或文件挂载到Pod中,使得Pod中容器可以访问主机上的数据。
apiVersion: v1
kind: Pod
metadata:name: app
spec:containers:- image: app:1.1name: test-containervolumeMounts:- mountPath: /log    挂载到容器中的地址name: test-volume  volumes: - name: test-volumehostPath:path: /var/log     宿主机目录type: Directory    可选,"Directory"表示该目录必须存在

- hostPath卷允许挂载主机上的任意目录,如果配置不正确,会导致数据泄露或破坏
- hostPath卷不支持容量限制,并且可使用的容量受主机文件系统限制,意味着可能写满主机磁盘
- 如果Pod重建后,没有调度到原来的节点上,将无法访问之前的数据
综上这么多缺点,在生产环境很少使用emptyDir或hostPath,在不使用云存储的情况下,一般会自建存储系统,比如选择NFS。本篇博客只是引出存储卷的概念,也方便操作实践,在下一篇博客中再介绍下自建存储系统的方式。💪💪💪
