1.  ephemeral-storage介绍

Kubernetes在1.8的版本中引入了一种类似于CPU,RAM的新的资源模式:ephemeral-storage属性(直译为临时存储),并且在1.10的版本kubelet默认启用了这个特性。

ephemeral-storage实现了对Pod应用存储资源的管理,可以有效的降低Pod应用失控消耗完 node磁盘空间的风险。官网中对该属性的描述如下:

https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/):

从上述官网介绍,总结如下:

  1. 临时存储:临时的含义是指容器内的数据未做持久化处理,生命周期和容器一致。
  2. 作用对象:容器日志(/var/log)、EmptyDir类型的volume数据(/var/lib/kubelet)、镜像层和容器可写层(/var/lib/docker)。由此可见,基本覆盖了Pod各个方面的磁盘消耗。
  3. 管理的文件系统:ephemeral-storage对kubelet的根目录(默认是/var/lib/kubelet)所在的节点分区(文件系统)进行管理,即如果把/var/lib/docker独立分区,ephemeral-storage将不对/var/lib/docker目录进行管理。
  4. Pod调度流程:节点上的kubelet启动的时候,kubelet会统计当前节点的kubelet分区的可分配的磁盘资源,或者你可以覆盖节点上kubelet的配置来自定义可分配的资源。在创建Pod时会根据存储需求调度到满足存储的节点,在Pod使用超过限制的存储时会对其做驱逐的处理来保证不会耗尽节点上的磁盘空间。

2. ephemeral-storage功能验证

2.1   环境准备

  • 虚拟机配置

1)    规格:16 vCpu + 80 GB RAM + 1000 GB 磁盘

2)    分区:/var/lib/docker、/var/lib/kubelet/和/var/log全在同一个系统分区上

  • 测试容器镜像

1)  Dockerfile

FROM ubuntu:16.04
ADD start.sh /home/
RUN mkdir -p /lq/log/
ENTRYPOINT /home/start.sh

2)  Start.sh

#!/bin/bash
while true
do
dateString=`date`
echo "$dateString==================================">> /lq/log/test.log
done
  • 集群环境

1)  Kuberneters版本:1.15.6

2)  Docker版本:18.06

2.2   容器可写层大小

  • 容器的部署文件

说明:

1)    容器的启动脚本start.sh会持续的向容器内路径/lq/log下写test.log日志

2)    该日志并未挂载出来,故日志文件在宿主机的容器可写层目录下

3)    该容器申请10Mi的磁盘空间,上限为20Mi

  • 创建该Pod

使用kubectl apply -f xxxx.yaml,观察可写层日志大小情况以及Pod运行情况

很快可写层的日志就达到了16Mi

  • 继续观察Pod

Pod驱逐了(容器被杀掉,容器内数据全部丢失)

从上述Event事件可以看到,Pod可用磁盘空间被限制住了

2.3   EmptyDir日志

  • 部署文件

说明:

1)    容器的启动脚本start.sh会持续的向容器内路径/lq/log下写test.log日志

2)    该日志通过EmptyDir挂载出来,故日志文件在宿主机的/var/lib/kubelet目录下

3)    该容器申请10Mi的磁盘空间,上限为100Mi,emptyDir路径上限为40Mi

  • 创建该Pod

使用kubectl apply -f  xxxxxxxx.yaml

  • 查询日志路径以及Pod运行情况

可以看到日志已经到了32Mi,目前Pod运行正常

  • 继续等待,观察Pod情况

Pod被驱逐了(容器杀死,全部数据丢失)

  • 查看Pod事件

可见该日志磁盘空间被限制了

2.4   /var/log目录日志

一般Pod的启动日志(k8s上的控制台日志)会记录到宿主机的/var/log目录下,并且根据前面介绍得知ephemeral-storage会对该目录下的容器日志磁盘空间大小进行管理,但是由于我使用的测试镜像并无启动日志,故通过hostPath挂载的方式挂载到该路径下,看看我们显示指定挂载路径的时候,ephemeral-storage还能否生效。

  • 部署文件

  • 创建该Pod

  • 观察Pod运行情况

可以看到,自己显示挂载的路径并做不到磁盘空间限制。

  • 换一种思路

由于无启动日志,故想书写脚本向容器的启动日志疯狂输出日志,观测Pod运行情况

1)  修改start.sh

2)  修改部署文件

3)  创建该Pod

Docker logs查看,容器在疯狂的输出日志

4)  持续一段时间,观察Pod运行状态

Pod驱逐了

2.5   其他情况说明

  1. /var/lib/docker和/var/lib/docker分区文件系统不一致。未做截图,但是已经实际验证:/var/lib/docker的分区和kubelet分区不一致的时候,ephemeral-storage对/var/lib/docker目录磁盘空间大小不做管控

3.  验证结论

  1. 分区要一致,否则ephemeral-storage管理不到
  2. ephemeral-storage管理的是容器相关的目录路径下的磁盘大小,自己显式挂载的定制化路径无法控制磁盘空间

4.  参考文档

  1. https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
  2. https://blog.csdn.net/sdmei/article/details/101017405(总结的非常好)

K8S-磁盘配额管理-整理的更多相关文章

  1. linux磁盘管理系列一:磁盘配额管理

    磁盘管理系列 linux磁盘管理系列一:磁盘配额管理   http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_040_quota.html l ...

  2. quota - linux磁盘配额管理

    磁盘管理系列 linux磁盘管理系列一:磁盘配额管理   http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_040_quota.html l ...

  3. Linux磁盘管理系列 — 磁盘配额管理

    一.磁盘管理的概念 Linux系统是多用户任务操作系统,在使用系统时,会出现多用户共同使用一个磁盘的情况,如果其中少数几个用户占用了大量的磁盘空间,势必压缩其他用户的磁盘的空间和使用权限.因此,系统管 ...

  4. 磁盘配额管理disk quotas

    条件: a.确保系统内核支持,Linux一般都支持 b.确保分区格式支持,ext2都只持! c.安装有quota软件,centos默认都有! (1)检查内核是否打开磁盘配额支持 [root@cento ...

  5. Linux 磁盘配额(XFS & EXT4)

    若是在Linux中搭建了FTP服务器,为了安全性,就要考虑磁盘配额,以防服务器磁盘空间被恶意占满. 磁盘配额概述 1.作用范围:只在指定的分区有效. 2.限制对象:主要针对用户.组进行限制,对组账号限 ...

  6. 解析Linux中LVM与磁盘配额

    LVM 逻辑卷管理 LVM 概述 LVM 是 Linux 操作系统中对磁盘分区进行管理的一种逻辑机制,它是建立在硬盘和分区之上.文件系统之下的一个逻辑层,在建立文件系统时屏蔽了下层的磁盘分区布局,因此 ...

  7. LVM磁盘配额

    目录 一.LVM概述 1.1.逻辑卷管理 1.2.LVM机制的基本概念 二.LVM管理命令 三.磁盘配额概述 3.1.实现磁盘配额的条件 3.2.Linux磁盘限额的特点 3.3.常用命令及选项 3. ...

  8. 整理全网最全K8S集群管理工具、平台

    整理常见的整理全网最全K8S集群管理工具.平台解决方案. 1 Rancher Rancher中文官网:https://docs.rancher.cn/ 2 KubeSphere 官网:https:// ...

  9. Win2003 Server磁盘配额揭密之启用篇

    Win2003 Server磁盘配额揭密之启用篇 [ 作者:茶乡浪子    转贴自:it168.com    点击数:4973    更新时间:2005-1-17  ]   本文要向大家介绍如何利用W ...

随机推荐

  1. 前端基础进阶(十一):详细图解jQuery对象,以及如何扩展jQuery插件

    早几年学习前端,大家都非常热衷于研究jQuery源码.我还记得当初从jQuery源码中学到一星半点应用技巧的时候常会有一种发自内心的惊叹,“原来JavaScript居然可以这样用!” 虽然随着前端的发 ...

  2. 飞机调度 Now or Later? LA 3211 (2-SAT问题)

    洛谷题目传送门 题目描述 有n架飞机需要着陆.每架飞机都可以选择“早着陆”和“晚着陆”两种方式之一,且必须选择一种.第i架飞机的早着陆时间为Ei,晚着陆时间为Li,不得在其他时间着陆.你的任务是为这些 ...

  3. 浅谈SIEM

    一.概念 SIEM ( Security Information Event Management,安全信息与事件管理) Gartner的定义:安全信息和事件管理(SIEM)技术通过对来自各种事件和上 ...

  4. Rocket - debug - TLDebugModuleInner - ROM Generation

    https://mp.weixin.qq.com/s/j_CgHU4PnY82NMwJzOqHYg 简单介绍Variable ROM Generation. 1. jalAbstract jalAbs ...

  5. 【Linux】CentOS7安装tomcat8.5.45,这方法也太简单了吧!

    1.下载tomcat https://tomcat.apache.org/download-80.cgi 选择tar.gz.下载完大概9495kb大小的压缩包 2.将文件从Windows复制到Cent ...

  6. DOM表单,下拉菜单和表格

    DOM访问表单控件的常用属性和方法如下: action 返回该表单的提交地址 elements 返回表单内全部表单控件所组成的数组,通过数组可以访问表单内的任何表单控件. length 返回表单内表单 ...

  7. JavaSE (六)面向对象 -- 类的结构

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 目录 一.属性(变量) 1.变量的分类: 二.方法 1.例子: 2.格式: 3.方法的说明: 4.ret ...

  8. java实现最大镜像子串

    ** 最大镜像子串** [代码填空](满分12分) 串"abcba"以字母"c"为中心左右对称:串"abba" 是另一种模式的左右对称.这两 ...

  9. java实现杨辉三角系数

    ** 杨辉三角系数** (a+b)的n次幂的展开式中各项的系数很有规律,对于n=2,3,4时分别是:1 2 1, 1 3 3 1,1 4 6 4 1.这些系数构成了著名的杨辉三角形: 1 1 1 1 ...

  10. 减少if...的使用

    最近维护一批代码,其中包括一堆if...的使用,多的情况嵌套8.9层,痛苦不堪,所以搜寻一些可以降低if...else的方法来改善一下代码,写个简单总结. 第一种: 优化前 if (measuredV ...