Kubernetes 临时存储需要限制吗?

Stella981
• 阅读 632

临时存储简介

Node节点通常还可以具有本地的临时性存储,由本地挂载的可写入设备或者 RAM来提供支持。临时(Ephemeral) 意味着对所存储的数据不提供长期可用性的保证。

Pods 通常可以使用临时性本地存储来实现缓冲区、保存日志等功能。kubelet 可以为使用本地临时存储的 Pods 提供这种存储空间,允许后者使用 emptyDir 类型的卷将其挂载到容器中。

kubelet 也使用此类存储来保存节点层面的容器日志容器镜像文件以及运行中容器的可写入层

临时存储有哪些

  • 本地临时存储(local ephemeral storage)

  • emptyDir

本地临时存储(local ephemeral storage):Kubernetes在1.8的版本中引入了一种类似于CPU,内存的新的资源模式:ephemeral-storage,并且在1.10版本kubelet中默认打开这个特性。ephemeral-storage是为管理和调度Kubernetes中运行的应用短暂存储。

emptyDir:emptyDir 类型Volume在Pod分配到Node上时被创建,Kubernetes会在Node节点上自动分配一个目录,因此无需指定宿主机Node上对应的目录文件。这个目录初始内容为空,当Pod从Node上移除时,emptyDir中的数据会被永久删除。

注释:容器的 crashing 事件并不会导致 emptyDir 中的数据被删除。

临时存储默认存储在哪个位置?

在每个 Kubernetes Node节点 上,kubelet 默认根目录是 /var/lib/kubelet 和 日志目录 /var/log 保存在节点的系统分区上,这个分区同时也会被Pod的 EmptyDir 类型的 volume容器日志镜像层容器的可写层所占用ephemeral-storage 便是对系统分区进行管理。

临时存储需要限制吗?

答案是 需要限制,从上文了解到,临时存储默认根目录是在 /var/lib/kubelet 中,/var 一般情况都是在系统根分区中,并且根分区磁盘一般不会很大(阿里云ECS系统盘默认为 40G),这就必须限制,为系统预留足够的磁盘空间来支持正常运行。上文也说到,临时存储也可以使用 RAM,那就更应该限制,内存是一种非常有限的资源。

Node节点设置临时存储使用大小

Node节点上的 kubelet 组件启动时,kubelet会统计当前节点默认 /var/lib/kubelet 所在的分区可分配的磁盘资源,或者你可以覆盖节点上kubelet的配置来自定义可分配的资源。创建Pod时会根据存储需求调度到满足存储的节点,Pod使用超过限制的存储时会对其做驱逐处理来保证不会耗尽节点上的磁盘空间。

注意:如果运行时指定了别的独立的分区,比如修改了docker的镜像层和容器可写层的存储位置(默认是/var/lib/docker)所在的分区,将不再将其计入 ephemeral-storage 的消耗。

kubelet 如下配置,限制Node节点上临时存储能使用多大磁盘空间

# Node 资源保留  nodefs.available: 10% # 给 /var/lib/kubelet 所在分区保留 10% 磁盘空间  nodefs.inodesFree: 5% # 给 /var/lib/kubelet 所在分区保留 5% inodes

临时存储限制使用举例

限制磁盘本地临时存储

apiVersion: v1kind: Podmetadata:  name: test-storage  labels:    app: test-storagespec:  containers:  - name: busybox    image:  busybox    command: ["sh", "-c", "while true; do dd if=/dev/zero of=$(date '+%s').out count=1 bs=30MB; sleep 1; done"] # 使用dd命令持续往容器写数据    resources:      limits:        ephemeral-storage: 300Mi #定义存储的限制为300Mi      requests:        ephemeral-storage: 300Mi

容器使用磁盘超过 300Mi,被 kubelet 驱逐。具体请见下图

Kubernetes 临时存储需要限制吗?

限制内存临时存储

emptyDir 也是一种临时存储,因此也需要限制使用。

在Pod级别检查临时存储使用量时,也会将 emptyDir 的使用量计算在内,因此如果对 emptyDir 使用过量后,也会导致该Pod被 kubelet Evict

另外,emptyDir本身也可以设置容量上限。指定 emptyDir 使用内存作为存储介质,这样用户可以获得极好的读写性能,但是由于内存比较珍贵,只提供了 128Mi 的空间,当用户在 /cache-data 目录下使用超过64Mi后,该Pod会被 kubelet 驱逐。

        volumeMounts:        - mountPath: /cache-data          name: cache-data-volume      volumes:      - emptyDir:          medium: Memory          sizeLimit: 128Mi        name: cache-data-volume

参考链接

热门文章推荐

最后

  • 欢迎您加我微信【 ypxiaozhan01】,拉您进技术群,一起交流学习...

  • 欢迎您关注【 YP小站】,学习互联网最流行的技术,做个专业的技术人...

Kubernetes 临时存储需要限制吗?


【文章让您有收获,👇 或者 在看 支持我吧】

本文分享自微信公众号 - YP小站(ypxiaozhan)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
待兔 待兔
2个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
8个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这