pod eviction

当资源使用情况触发了驱逐条件时,kubelet会启动一个任务去轮流停止运行中的pod,直到资源使用状况恢复到阈值以下。以硬驱逐为例,整体流程是:

  • 每隔一段时间从cadvisor中获取资源使用情况,发现触发了阈值;
  • 从运行中的pod里找到QoS策略最开放的一个,比如策略为bestEffort的一个pod(即便这个pod没有吃多少内存,大部分内存是另一个策略为burstable,但内存使用率也很高的pod),kubelet停止该pod对应的所有容器,然后将pod状态更新为Failed。如果该pod长时间没有被成功kill掉,kubelet会再找一个pod进行驱逐。
  • 检查内存用量是否恢复到阈值以下,如果没有,则重复第二步(这里就要干掉那个罪魁祸首了)。一直到内存使用情况恢复到阈值以下为止。

有几个要注意的点是:

  • kubelet挑选pod进行驱逐的策略,就是按照QoS的策略开放度排序,而同一个QoS的多个pod中,kubelet会优先驱逐使用触发指标资源最多的一个。
  • 磁盘的使用不像memory有通过request和limit进行配置,磁盘用量可以认为是一种QoS策略为BestEffort的资源。当触发磁盘资源不足时,kubelet会做一些额外的工作,比如清理已经dead的pod的容器日志,清理没有被使用的容器镜像,当然kubelet也会挑磁盘使用量(包括挂载本地volume空间+容器log大小,若是imagefs指标超额,此处还要加上容器运行时读写层的文件大小)最大的一个pod进行驱逐。

node condition


如上图,当软驱逐或者硬驱逐触发时,kubelet会尝试干掉一个pod,并且会将自身的状态从驱逐的指标信息中映射过来,比如内存使用超标触发驱逐,node的condtion就会变成memoryPressure,这个condition伴随的kubelet定时的心跳报文上传到master,记录在etcd中。在调度器进行调度时,会以这些condition作为调度条件的参考。比如,处于diskPressure的node,调度器就不会再将任何pod调度上去。否则一旦磁盘空间用满,node上的容器可能会严重崩溃。

但如果node的内存在阈值上下波动,condition被反复更新为pressure或正常,那么pod被误调度到node上也会很耽误事,所以用eviction-pressure-transition-period参数指定触发eviction后condition更新一次后要保留改状态的最小时长。在这个时长范围内即便资源使用下降到阈值以下,condition也不会恢复。

kubernets eviction策略相关推荐

  1. Caffeine Eviction策略

    Caffeine缓存剔除策略有三个: 基于容量剔除 基于时间剔除 基于引用剔除 基于容量剔除 // 如果缓存的条目大于maximumSize值时,caffeine将尝试剔除最近或很少使用的缓存条目 L ...

  2. Kubernetes网络策略,这一篇就够了

    目前许多组织都在采用Kubernetes来运行他们的应用程序.以至于有些人将Kubernetes称为新的数据中心操作系统.因此,组织开始将Kubernetes(通常缩写为k8s)视为关键任务平台,它需 ...

  3. redis 配置文件示例

    # redis 配置文件示例   # 当你需要为某个配置项指定内存大小的时候,必须要带上单位, # 通常的格式就是 1k 5gb 4m 等酱紫: # # 1k => 1000 bytes # 1 ...

  4. Spark内存管理(3)—— 统一内存管理设计理念

    Spark内存管理系列文章:  Spark内存管理(1)-- 静态内存管理  Spark内存管理(2)-- 统一内存管理 在本文中,将会对各个内存的分布以及设计原理进行详细的阐述  相对于静态内存模型 ...

  5. Spark内存管理(1)—— 静态内存管理

    Spark内存管理简介 Spark从1.6开始引入了动态内存管理模式,即执行内存和存储内存之间可以相互抢占  Spark提供了2种内存分配模式: 静态内存管理 统一内存管理 本系列文章将分别对这两种内 ...

  6. MongoDB 如何使用内存?为什么内存满了?

    最近接到多个MongoDB内存方面的线上case及社区问题咨询,主要集中在: 为什么我的 MongoDB 使用了 XX GB 内存? 一个机器上部署多个 Mongod 实例/进程,WiredTiger ...

  7. redis的默认配置文件redis.conf详解

    1 # redis 配置文件示例 2 3 # 当你需要为某个配置项指定内存大小的时候,必须要带上单位, 4 # 通常的格式就是 1k 5gb 4m 等酱紫: 5 # 6 # 1k => 1000 ...

  8. redis应用之安装配置介绍

    一.redis介绍: 1.redis定义: Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月1 ...

  9. redis.conf配置详细解析

    转载:http://www.cnblogs.com/kreo/p/4423362.html # redis 配置文件示例 # 当你需要为某个配置项指定内存大小的时候,必须要带上单位, # 通常的格式就 ...

最新文章

  1. 100多年了,左右大脑的不对称性依然备受关注
  2. 数据绑定设计器的使用
  3. 第44节:Java当中的JVM
  4. linux 单个网卡配置多个IP
  5. ACM:动态规划,01背包问题
  6. toad查看oracle的plsql包,Oracle logminer 分析redo log(TOAD与PLSQL)
  7. 宏定义与预处理、函数和函数库
  8. 正则匹配后缀 html,如何用正则匹配后缀名不为.jpg, .css, .js, .html, .htm, .png的文件...
  9. Java基础练习之流程控制(四)
  10. 常用正则表达式及基础语法
  11. 百度地图与高德地图比较
  12. 学习linux心得,linux学习心得范文
  13. DEA模型及matlab应用2:超效率SE-DEA模型
  14. VHD 多系统安装 无需分区 无需U盘 无需任何第三方工具
  15. android垂直进度条控件,Android常用控件之ProgressBar,水平进度条
  16. 如何使用Windows Live Writer远程发布到WordPress
  17. mysql 启动时,服务无法启动:发生系统错误1067.
  18. n用matlab怎么表示什么意思,matlab中n=[0:1:N-1];是什么意思
  19. 内网渗透之内网信息收集(综合)
  20. 小数不显示末尾的0的模块

热门文章

  1. 服务器(1)——IIS(1)——Windows7中IIS简单安装与配置(详细图解)
  2. abb机器人指令手册_ABB机器人速度设置
  3. 各星座导演与他们的电影风格【转】]
  4. 简单教你贴-iPhone新一代超薄卡贴
  5. 基于金鹰优化算法的函数寻优算法
  6. 使用朴素贝叶斯进行个人信用风险评估
  7. 如何判断测试项目是否需要高频交直流电流探头
  8. 基于pyqt5的登录界面及人脸识别功能界面相互跳转的设计(1)
  9. SSIS - Excel Destination无法接受大于255个字符长度的字符字段(转载)
  10. arcgis字段计算器赋值_【干货】关于ArcGIS的这62个常用技巧,你造吗?