系列目录

本篇将介绍如何使用kubelet处理资源耗尽的情况

当可用的计算机资源非常低的时候,kubelet仍然要保证节点的稳定性.当处理不可压缩的计算机资源(比如内存或磁盘空间)时,这尤其重要,当这些资源被耗尽时,节点将变得不稳定

驱离策略

kubelet会积极的监视并阻止可用计算机资源耗尽.这种情况下,kubelet会终止一个或者多个pod来重新取回耗尽的资源,当kubelet终止一个pod时,它将会终止pod的所有容器并把PodPhase设置为Failed

驱离信号

kubelet支持基于下面列表中描述的驱离信号的驱离策略.每一个信号值都由后面description列来描述,并且它们是基于kubelet的summary API

Eviction Signal Description
memory.available memory.available := node.status.capacity[memory] - node.stats.memory.workingSet
nodefs.available nodefs.available := node.stats.fs.available
nodefs.inodesFree nodefs.inodesFree := node.stats.fs.inodesFree
imagefs.available imagefs.available := node.stats.runtime.imagefs.available
imagefs.inodesFree imagefs.inodesFree := node.stats.runtime.imagefs.inodesFree

以上的信号同时支持字面量或者百分比值.百分比值根据每个信号的总容量来计算

memory.available的值从cgroup里衍生出来,而不是通过free -m,这一点很重要因为free -m在容器里是无效的

kubelet仅支持以下两种文件类型分区:

  • nodefs文件系统,kubelet用于存储卷,守护进程log等

  • imagefs文件系统,容器运行时用于存储镜像和容器的可写层

imagefs是可选的,kubelet使用cAdvisor来自动发现.kubelet并不关心其它文件系统.其它类型的配置目前kubelet也不支持,比如把存储卷和log存放到filesystemnot OK

驱离阈值

kubelet支持指定驱离阈值来来触发kubelet回收资源

每一个阈值都是以下形式的:

[eviction-signal][operator][quantity]
  • eviction-signal 是上面表中定义的一个信号token

  • operator是一种期望的操作符,比如<(小于号)

  • quantity 驱离阈值的量,比如1Gi,驱离阈值也可以是由%百分号表示的百分比值

比如说一个节点有10Gi总内存值,并且如果可用内存的值如果低于1Gi的时候你想要触发驱离,你可以以如下两种方式中的任一来定义驱离阈值

memory.available<10%memory.available<1Gi但是你不能两者同时使用.

软驱离阈值

软驱离阈值和一个包含管理员指定的优雅时间的驱离阈值成对出现.驱离信号发出后,在优雅时间没有超出之前,kubelet不会回收资源.如果不指定优雅时间,kubelet会在一开始就返回错误

此外,如果软驱离阈值被满足,operator可以指定被驱离时最大允许的pod优雅终止时间.如果指定了,kubelet使用pod.Spec.TerminationGracePeriodSeconds和最大允许的优雅终止时间两者中较小的一个值.如果没有指定,kubelet会马上杀死pod

以下标识被用于支持软驱离阈值

  • eviction-soft描述了一系列软驱离阈值.

  • eviction-soft-grace-period描述了一系列驱离时间,(比如memory.available=1m30s),对应在驱离发生之前,软件驱离阈值持续的时间

  • eviction-max-pod-grace-period描述了当软驱离阈值被满足时,最大允许的优雅终止时间(单位是秒)

硬驱离阈值

硬驱离阈值没有优雅时段,kubelet会立马对相关的资源采取动作.如果硬驱离阈值被满足,kubelet会立马杀死pod,而没有优雅终止时段.

以下标识可以被用于配置硬驱离阈值

  • memory.available<100Mi

  • nodefs.available<10%

  • nodefs.inodesFree<5%

  • imagefs.available<15%

驱离监视时间间隔

通过housekeeping-interval

节点状态

kubelet把一个或多个驱离信号映射到的对应的节点状态上

如果硬驱离阈值被满足,或者不依赖于优雅时段的软驱离阈值被满足,kubelet会报告一种状态来反映节点处于压力之下

以下是节点状态和特定驱离信号间的关系

Node Condition Eviction Signal Description
MemoryPressure memory.available Available memory on the node has satisfied an eviction threshold
DiskPressure nodefs.available, nodefs.inodesFree, imagefs.available, or imagefs.inodesFree Available disk space and inodes on either the node’s root filesystem or image filesystem has satisfied an eviction threshold

kubelet会继续以--node-status-update-frequency指定的值(默认为10秒)来报告更新的节点状态

回收节点级别的资源

如果驱离阈值被满足并且优雅时段已过,kubelet开始启动对处于压力的资源的回收工作直到监测到压力信号已经消失并且低于定义的阈值

kubelete尝试优先回收节点级别的资源而不是驱离pod.如果监测到磁盘压力,如果节点有容器运行时专用的imagefs,则kubelet回收资源的方式不同

驱离pod

如果kubelet无法在节点上回收到足够的资源,则开始驱离pod.

kubelet首先会根据pod使用的资源是否超过了申请的资源,然后根据他们的优先级把要驱离的pod进行排序.

最终kubelet按照以下列出的顺序对要驱离的pod进行排序:

  • BestEffort或者Burstable类型pod

kubernetes调度之资源耗尽处理配置的更多相关文章

  1. kubernetes调度之资源配额

    系列目录 当多个用户或者开发团队共享一个有固定节点的的kubernetes集群时,一个团队或者一个用户使用的资源超过他应当使用的资源是需要关注的问题,资源配额是管理员用来解决这个问题的一个工具. 资源 ...

  2. kubernetes调度之资源配额示例

    系列目录 前面说过,资源配额限制在指定名称空间下,对资源对象数量和特定类型的资源的限制,你可以在ResourceQuota中指定配额 创建名称空间 我们创建一个新的名称空间来演示 kubectl cr ...

  3. kubernetes调度之pod优先级和资源抢占

    系列目录 Pod可以拥有优先级.优先意味着相对于其它pod某个pod更为重要.如果重要的pod不能被调度,则kubernetes调度器会优先于(驱离)低优先级的pod来让处于pending状态的高优先 ...

  4. Kubernetes:理解资源的概念

    不知你是否已清楚,Kubernetes 是支持 Docker 和 rkt(当前是这两种)的容器调度系统.除了下面这些优美的特性,比如简易部署,配置管理,服务发现,等等,它还允许我们以一种更高效的方式来 ...

  5. 从零开始入门 K8s | Kubernetes 调度和资源管理

    作者 | 子誉  蚂蚁金服高级技术专家 关注"阿里巴巴云原生"公众号,回复关键词"入门",即可下载从零入门 K8s 系列文章 PPT. Kubernetes 调 ...

  6. Kubernetes 调度器实现初探

    Kubernetes 调度器 Kubernetes 是一个基于容器的分布式调度器,实现了自己的调度模块.在Kubernetes集群中,调度器作为一个独立模块通过pod运行.从几个方面介绍Kuberne ...

  7. Kubernetes K8S之资源控制器StatefulSets详解

    Kubernetes的资源控制器StatefulSet详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2 ...

  8. Kubernetes K8S之资源控制器Daemonset详解

    Kubernetes的资源控制器Daemonset详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2C/ ...

  9. Kubernetes K8S之资源控制器Job和CronJob详解

    Kubernetes的资源控制器Job和CronJob详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2 ...

随机推荐

  1. Resource 定位、BeanDefinition 的载入和解析,BeanDefinition 注册。

    在前文提过,IOC 容器的初始化过程分为三步骤:Resource 定位.BeanDefinition 的载入和解析,BeanDefinition 注册. Resource 定位.我们一般用外部资源来描 ...

  2. [luoguP2765] 魔术球问题(最大流—最小不相交路径覆盖)

    传送门 枚举球的个数 num 如果 i < j && (i + j) 是完全平方数,那么 i -> j' 连一条边 再加一个超级源点 s,s -> i 再加一个超级汇 ...

  3. APIO2018 题解

    坑了好久,补一补. 话说我当时去参加 $APIO2018$ 了,不过纯粹打铁…… 我的程序交道人家毛子的网站上, $c++14$ 编译器不停地给我编 $RE$,只记得好像是结构体排序的问题(删掉那个排 ...

  4. 【bzoj1053】[HAOI2007]反素数ant

    对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4.如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数.例如,整数1,2,4,6等都是反质数 ...

  5. Spring Boot的web开发&静态资源配置方式

    Web开发的自动配置类:org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration 1.1. 自动配置的ViewResolve ...

  6. poj 1066 Treasure Hunt 线段相交

    题目链接 题目描述 一个正方形房间被分成若干个小室,宝藏在其中某一点.现可炸开任意一堵墙壁的中点位置.问至少要炸开多少堵墙才能从外面到达宝藏所在地. 思路 (很巧妙,没想到) 直接枚举墙壁与正方形外壁 ...

  7. C语言实现DES算法

    原文转自 http://www.cnblogs.com/imapla/archive/2012/09/07/2674788.html 用C语言实现DES(数据加密算法)的一个例子,密文和密钥都是8个字 ...

  8. UML学习倒腾记

    先看到http://www.jianshu.com/p/1256e2643923这篇博客,号称21分钟入门uml,也许是我太笨了吧,一下午也没有完全搞定: 使用过atom编辑器,没有完全运行出来结果. ...

  9. Linux 之 Memcached

    Memcached的安装使用 参考教程:[千峰教育] 环境:CentOS 6.8 一.简介: memcached作为高速运行的分布式缓存服务器,具有以下的特点. · 协议简单 · 基于libevent ...

  10. DOS底下常用命令

    DOS底下常用命令: dir (directory) :列出当前目录下的文件以及文件夹 md (make directory): 创建目录 rd (remove directory):删除目录 cd ...