前言
K8s中的Ephemeral-Storage是指在Pod生命周期内可用的临时存储空间,Ephemeral-Storage是Pod可以使用的本地存储(如emptyDir、某些类型的日志、容器可写的层等)的总量。这些存储空间在Pod被删除或重新调度时会被清空,因此它通常用于存储临时数据,如缓存、临时文件或容器间的共享数据
分类
Ephemeral-Storage包括以下几种类型:
- Container Writable Layer :容器可写层,用于存储容器中产生的临时文件、缓存等。
- Log Storage :K8s会将容器的标准输出和标准错误日志写入到节点上的日志文件中,这些日志文件也被视为Ephemeral-Storage的一部分。
- EmptyDir Volume :EmptyDir的默认存储类型为磁盘,属于Ephemeral-Storage。但如果将EmptyDir的medium定义为Memory,则EmptyDir的大小将受Memory Limit限制。EmptyDir的数据存储在节点的本地文件系统中,其生命周期与Pod相同。当Pod被创建时,EmptyDir卷也会被创建,并在Pod被删除时一同被删除。
配置与管理
资源限制与请求:
在Pod的YAML定义中,可以通过resources.limits.ephemeral-storage和resources.requests.ephemeral-storage来设置Pod或容器可以使用的临时存储的最大量和请求量。
资源配额:
可以通过Resource Quota来限制一个命名空间中的Pod所使用的临时存储总量。
驱逐机制:
当Pod使用的临时存储超过限制时,kubelet会将其驱逐出节点,以保证不会耗尽节点上的磁盘空间。
使用场景说明
Ephemeral-Storage适用于以下场景:
临时数据共享 :当多个容器需要共享临时数据时,可以使用EmptyDir卷来实现。
缓存数据 :一些应用可能使用缓存来加速访问速度或减轻后端存储的负载。Ephemeral-Storage提供了一个地方来存储这些缓存数据。
临时工作目录 :使用EmptyDir卷可以确保每个容器都有自己的独立工作空间,用于存储临时文件或执行临时任务。
容器日志存储 :Kubernetes会将容器的标准输出(stdout)和标准错误(stderr)日志写入到节点上的日志文件中。这些日志文件占用了Ephemeral-Storage的一部分空间。
EmptyDir卷: EmptyDir是一种由Pod管理的临时存储卷,其生命周期与Pod相同。当Pod被创建时,EmptyDir卷也会被创建,并在Pod被删除时一同被删除。EmptyDir卷常用于存储Pod内部容器之间需要共享的数据,或者用于临时数据的存储。
注意事项
- 由于Ephemeral-Storage是短暂的,并且当Pod被删除时也会被删除,因此它不适合用于存储重要数据或需要长期保留的数据。
- 对于需要持久化的数据,应该使用持久化存储卷(如PersistentVolume (PV)和PersistentVolumeClaim (PVC))进行存储。
- Ephemeral-Storage的单个Pod可用上限是通过资源限制(resource limits)来设定的。这个上限决定了Pod能够使用的临时存储空间的最大量。当Pod使用的临时存储空间超过这个限制时,Kubernetes可能会根据配置采取一系列措施,如驱逐Pod等
- Ephemeral-Storage的资源限制不仅适用于容器的可写层和日志,还适用于EmptyDir卷(如果设置了大小限制)以及其他类型的临时存储。但是,对于容器镜像所占用的空间,通常不计入Ephemeral-Storage的资源限制中,因为这部分空间是由节点上的Docker或容器运行时管理的,而不是由Kubernetes直接管理的
拓展
【一起来学kubernetes】7、k8s中的ingress详解
【一起来学kubernetes】5、kubernetes基本概念梳理