K8S-磁盘配额管理-整理
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/):

从上述官网介绍,总结如下:
- 临时存储:临时的含义是指容器内的数据未做持久化处理,生命周期和容器一致。
- 作用对象:容器日志(/var/log)、EmptyDir类型的volume数据(/var/lib/kubelet)、镜像层和容器可写层(/var/lib/docker)。由此可见,基本覆盖了Pod各个方面的磁盘消耗。
- 管理的文件系统:ephemeral-storage对kubelet的根目录(默认是/var/lib/kubelet)所在的节点分区(文件系统)进行管理,即如果把/var/lib/docker独立分区,ephemeral-storage将不对/var/lib/docker目录进行管理。
- 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 其他情况说明
- /var/lib/docker和/var/lib/docker分区文件系统不一致。未做截图,但是已经实际验证:/var/lib/docker的分区和kubelet分区不一致的时候,ephemeral-storage对/var/lib/docker目录磁盘空间大小不做管控
3. 验证结论
- 分区要一致,否则ephemeral-storage管理不到
- ephemeral-storage管理的是容器相关的目录路径下的磁盘大小,自己显式挂载的定制化路径无法控制磁盘空间
4. 参考文档
- https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
- https://blog.csdn.net/sdmei/article/details/101017405(总结的非常好)
K8S-磁盘配额管理-整理的更多相关文章
- linux磁盘管理系列一:磁盘配额管理
磁盘管理系列 linux磁盘管理系列一:磁盘配额管理 http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_040_quota.html l ...
- quota - linux磁盘配额管理
磁盘管理系列 linux磁盘管理系列一:磁盘配额管理 http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_040_quota.html l ...
- Linux磁盘管理系列 — 磁盘配额管理
一.磁盘管理的概念 Linux系统是多用户任务操作系统,在使用系统时,会出现多用户共同使用一个磁盘的情况,如果其中少数几个用户占用了大量的磁盘空间,势必压缩其他用户的磁盘的空间和使用权限.因此,系统管 ...
- 磁盘配额管理disk quotas
条件: a.确保系统内核支持,Linux一般都支持 b.确保分区格式支持,ext2都只持! c.安装有quota软件,centos默认都有! (1)检查内核是否打开磁盘配额支持 [root@cento ...
- Linux 磁盘配额(XFS & EXT4)
若是在Linux中搭建了FTP服务器,为了安全性,就要考虑磁盘配额,以防服务器磁盘空间被恶意占满. 磁盘配额概述 1.作用范围:只在指定的分区有效. 2.限制对象:主要针对用户.组进行限制,对组账号限 ...
- 解析Linux中LVM与磁盘配额
LVM 逻辑卷管理 LVM 概述 LVM 是 Linux 操作系统中对磁盘分区进行管理的一种逻辑机制,它是建立在硬盘和分区之上.文件系统之下的一个逻辑层,在建立文件系统时屏蔽了下层的磁盘分区布局,因此 ...
- LVM磁盘配额
目录 一.LVM概述 1.1.逻辑卷管理 1.2.LVM机制的基本概念 二.LVM管理命令 三.磁盘配额概述 3.1.实现磁盘配额的条件 3.2.Linux磁盘限额的特点 3.3.常用命令及选项 3. ...
- 整理全网最全K8S集群管理工具、平台
整理常见的整理全网最全K8S集群管理工具.平台解决方案. 1 Rancher Rancher中文官网:https://docs.rancher.cn/ 2 KubeSphere 官网:https:// ...
- Win2003 Server磁盘配额揭密之启用篇
Win2003 Server磁盘配额揭密之启用篇 [ 作者:茶乡浪子 转贴自:it168.com 点击数:4973 更新时间:2005-1-17 ] 本文要向大家介绍如何利用W ...
随机推荐
- [Python基础]002.语法(1)
语法(1) 变量 基本数据类型 空值 布尔值 数字 字符串 列表 元组 字典 结构嵌套 变量 定义变量 i = 10 这样就定义了一个名为 i 的变量,它的值是 10 . 变量名必须是大小写英文.数字 ...
- MRCTF 2020 WP
MRCTF 2020 WP 引言 周末趁上课之余,做了一下北邮的CTF,这里记录一下做出来的几题的WP ez_bypass 知识点:MD5强类型比较,is_numeric()函数绕过 题目源码: I ...
- Java IO(四) InputStream 和 OutputStream
Java IO(四) InputStream 和 OutputStream 一.介绍 InputStream 和 OutputStream 是字节流的超类(父类),都是抽象类,都是通过实例化它们的子类 ...
- 附019.Rancher搭建及使用
一 Rancher概述 1.1 什么是Rancher Rancher 是为使用容器的公司打造的容器管理平台.Rancher 简化了使用 Kubernetes 的流程,方便开发者可以随处运行 Kuber ...
- 11 . Python3之异常,调试和测试
12.Python3入门之异常.调试和测试 在程序运行过程中,总会遇到各种各样的错误. 有的错误是程序编写有问题造成的,比如本应该输出整数结果输出了字符串,这种错误我们通常称之为bug,bug是必须修 ...
- 09 . Python3之常用模块
模块的定义与分类 模块是什么? 一个函数封装一个功能,你使用的软件可能就是由n多个函数组成的(先备考虑面向对象).比如抖音这个软件,不可能将所有程序都写入一个文件,所以咱们应该将文件划分,这样其组织结 ...
- jupyter notebook 安装扩展nbextensions
安装nbextensions可提高jupyter notebook效率,安装步骤如下: 1.pip 方式安装: (gluon) [root@localhost ~]# pip install jupy ...
- Rocket - 断句 - Diplomatic Design Patterns: A TileLink Case Study
https://mp.weixin.qq.com/s/afRVgTCYs1Mxu898uSmVaQ 整理一篇介绍Diplomacy和TileLink的文章. 原文链接: https://carrv ...
- js函数prototype属性学习(二)
继续探讨js对象的prototype属性,前面已经看到在创建完一个对象之后,随时都会有一个_proto_属性伴随所有,那么,这个_proto_又是用来干嘛的,面试时问的高大上的原型链又是怎么回事? 拿 ...
- 如何选出适合自己的管理Helm Chart的最佳方式?
本文转载自Rancher Labs 无论你喜欢与否,你都不得不承认Helm是管理Kubernetes应用程序独一无二的工具,你甚至可以通过不同的方式使用它. 在Helm的使用过程中,我们注意到有几个问 ...