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。本篇博客只是引出存储卷的概念,也方便操作实践,在下一篇博客中再介绍下自建存储系统的方式。💪💪💪