在系统硬件资源紧缺的情况下保证node的稳定性, 是kubelet需要解决的一个重要问题
1.驱逐策略
kubelet持续监控主机的资源使用情况, 一旦出现资源紧缺的迹象, kubelet就会主动终止一个或多个pod的运行,以回收紧缺的资源

2.驱逐信号
kubelet根据信号作为决策依据来触发驱逐行为

- memory.available
- nodefs.available
- nodefs.inodesFree
- imagefs.available
- imagefs.inodesFree
memory : 内存,不是根据系统的free 收集,取值来自于cgroupfs,free -m命令不支持在容器中工作
nodefs: 指node自身的存储,存储daemon的运行日志等,一般指root分区/;
imagefs: 指docker daemon用于存储image和容器可写层(writable layer)的磁盘;

3.驱逐阀值:一旦超过阀值, 就会触发kubelet进行资源回收
例:memory.available<10% 可用内存不足10%时进行驱逐

软驱逐: 当系统资源消耗达到软阀值, 有一段的宽限期, kubelet不会触发驱逐动作,

--eviction-soft=memory.available<1.5GiB                驱逐阀值
-eviction-soft-grace-period=memory.available=1m30s   驱逐宽限期

硬驱逐: 没有宽限期, 达到硬阀值, 直接触发对pod的驱逐操作

--eviction-hard=memory.available<1.5GiB  

4.驱逐监控频率

--housekeeping-interval  定义一个时间间隔, kubelet每隔一个时间间隔就会对驱逐阀值进行评估

5.节点资源紧张情况下的kubelet行为
node节点回收资源: 磁盘有压力的情况下回收资源方式:删除死掉的pod, 删除无用的镜像
如果通过删除上面的方式无法回收资源, 那么会进行驱逐用户的pod策略: 根据pod服务的服务质量qos(besteffort, burstable, guaranteed)

6.节点资源紧张情况下的系统行为

调度器行为: kubelet会向master报告这个情况, 调度器不再继续向节点调度新的pod
node的oom行为: kubelet根据pod的qos为每个容器设置了一个oom_score_adj 值, 得分最高的容器会被驱逐, 与pod驱逐不同, 一个pod容器被oom杀掉, 可能被kubelet根据restartpolicy重启
kubelet无法区分daemonset类型的pod, 所以不建议把daemonset的pod设置成besteffort类型

7.驱逐策略建议

保留10%的内存给系统守护进程(内核, kubelet, kube-proxy, flanneld) 防止进程资源不够
内存使用率达到95%立即进行pod驱逐防止系统的oom
以节点内存容量10G为例子
--eviction-hard=memory.available<500Mi
--system-reserved=memroy=1.5Gi

8.主动驱逐保护:PodDisruptionBudget资源对象

当节点处于维护状态(kubectl drain),会马上驱逐节点上的pod, 需求是系统应该保证应用以不低于一定数量的pod保障服务的正常运行, 系统将确保每终止一个pod后, 一定会在另一台健康的node上启动新的pod, 再继续终止下一个pod

kubernetes之node资源紧缺时pod驱逐机制的更多相关文章

  1. kubernetes之node 宕机,pod驱离问题解决

    背景: 当node宕机时,希望该node节点上的pod能够快速疏散到其他节点,并提供服务.测试发现,要等待5分钟,上面的pod才会疏散. 网上介绍通过修改 /etc/kubernetes/manife ...

  2. 十六, k8s集群资源需求和限制, 以及pod驱逐策略。

    目录 容器的资源需求和资源限制 QoS Classes分类 Guaranteed Burstable Best-Effort kubernetes之node资源紧缺时pod驱逐机制 Qos Class ...

  3. Kubernetes调整Node节点快速驱逐pod的时间

    在高可用的k8s集群中,当Node节点挂掉,kubelet无法提供工作的时候,pod将会自动调度到其他的节点上去,而调度到节点上的时间需要我们慎重考量,因为它决定了生产的稳定性.可靠性,更快的迁移可以 ...

  4. Kubernetes 针对资源紧缺处理方式的配置

    如何在资源紧缺的情况下,保证 Node 的稳定性,是 Kubelet 需要面对的一个重要的问题.尤其对于内存和磁盘这种不可压缩的资源,紧缺就相当于不稳定. 在kubelet启动作为参数或者在配置文件中 ...

  5. Kubernetes Pod 驱逐详解

    原文链接:Kubernetes Pod 驱逐详解 在 Kubernetes 中,Pod 使用的资源最重要的是 CPU.内存和磁盘 IO,这些资源可以被分为可压缩资源(CPU)和不可压缩资源(内存,磁盘 ...

  6. Kubernetes中资源清单与Pod的生命周期(二)

    一.资源清单 1,定义: 在k8s中一般使用yaml格式的文件来创建符合我们预期的资源,这样的yaml被称为资源清单. 使用资源清单创建Pod: kubectl apply -f nginx.yaml ...

  7. Kubernetes Pod驱逐策略

    Kubelet 能够主动监测和防止计算资源的全面短缺. 在资源短缺的情况下,kubelet 可以主动地结束一个或多个 Pod 以回收短缺的资源. 当 kubelet 结束一个 Pod 时,它将终止 P ...

  8. kubernetes资源清单之pod

    什么是pod? Pod是一组一个或多个容器(例如Docker容器),具有共享的存储/网络,以及有关如何运行这些容器的规范. Pod的内容始终位于同一地点,并在同一时间安排,并在共享上下文中运行. Po ...

  9. 6、kubernetes资源清单之Pod控制器190714

    一.Pod控制器的类别 ReplicationController:早期唯一的控制器,已废弃 ReplicaSet:控制Pod满足用户期望副本:标签选择器选择由自己管理的Pod副本:Pod资源模板完成 ...

随机推荐

  1. CentOS下Hadoop及ZooKeeper环境搭建

    1. 测试环境 操作系统 CentOS 6.5. 总共5台机器,前两台作为namenode,称之为 nn01.nn02:后三台作为datanode,称为 dn01.dn02.dn03. 每台机器的内存 ...

  2. Cognos Framework操作记录:开发复杂报表

    设计一张数据库的表:TEST_001_ADDRESS 表结构: | 编号 | 姓名 | 省 | 市 | 县 | 公司 | 部门 | 职位 | | ---- | --- | -- | - | - | - ...

  3. python基础----pymysql模块

    安装pymysql   ----pip install mysql 步骤: 1.建立连接   指定ip.端口号.密码.账号.数据库 2.建立游标 3.执行sql语句 4.获取结果或提交 5.关闭游标, ...

  4. 【Web】利用jquery实现百度新闻导航菜单滑动动画

    前言 前两天,群里有人问百度新闻导航是如何实现的,当时由于忙于工作,没有来得及细看,恰好今天有空闲时间,索性就实现一下这个效果吧: 思路与步骤 1.利用UL创建简单横向导航: <!DOCTYPE ...

  5. Flutter 页面下拉刷新和上拉加载

    flutter_easyrefresh 正如名字一样,EasyRefresh很容易就能在Flutter应用上实现下拉刷新以及上拉加载操作,它支持几乎所有的Flutter控件.它的功能与Android的 ...

  6. Java学习笔记-Java概述和环境配置

    基础常识 软件:一系列按照特定顺序组织的计算机数据 和指令的集合 常见的软件: 系统软件:如:DOS,windows,Linux等 应用软件:如:扫雷,迅雷,QQ等 软件的出现实现了人与计算机之间的更 ...

  7. pycharm2017注册码

    BIG3CLIK6F-eyJsaWNlbnNlSWQiOiJCSUczQ0xJSzZGIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiI ...

  8. UWP笔记-消息弹窗自动淡出

    为了让用户有个更好的UI交互,可以增加自动淡出的消息弹窗,例如:网易云音乐UWP,切换播放模式时,出现的类似消息提示. 右键项目,添加用户控件 UserControlDemo.xaml: <Us ...

  9. jquery 实时监听输入框值变化的完美方案

    只需要同时绑定 oninput 和 onpropertychange 两个事件,但是这并不完美 $('.input-form :input').bind('input propertychange', ...

  10. Linux Crontab格式说明

    Crontab基本格式: * * * * * command 分 时 日 月 周 命令 第1列表示分钟1-59 每分钟用 */1表示 第2列表示小时1-23(0表示0点) 第3列表示日期1-31 第4 ...