系列目录

本篇将介绍如何使用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. 【Luogu】P2486染色(树链剖分)

    题目链接 线段树维护左端颜色,右端颜色,颜色段数量. 合并的时候看左子树的右端颜色是不是等于右子树的左端颜色,如果等于那么颜色段数量要-1S 然后在树剖跳链的时候搞同样的操作qwq 然后就没有然后了 ...

  2. BZOJ3991 [SDOI2015]寻宝游戏 【dfs序 + lca + STL】

    题目 小B最近正在玩一个寻宝游戏,这个游戏的地图中有N个村庄和N-1条道路,并且任何两个村庄之间有且仅有一条路径可达.游戏开始时,玩家可以任意选择一个村庄,瞬间转移到这个村庄,然后可以任意在地图的道路 ...

  3. mysql 查询死锁语句

    我们可以用下面三张表来查原因:        innodb_trx ## 当前运行的所有事务        innodb_locks ## 当前出现的锁        innodb_lock_wait ...

  4. 区间合并 POJ3667+HDU4553

    两道题都是线段树的区间合并 lsum, rsum分别表示左/右端点 开始向右/左 符合条件的元素的最长连续长度 sum表示这个区间的符合条件的元素的最长连续长度 所以pushUp可写: void pu ...

  5. 洛谷 P 1133 教主的花园

    题目描述 教主有着一个环形的花园,他想在花园周围均匀地种上n棵树,但是教主花园的土壤很特别,每个位置适合种的树都不一样,一些树可能会因为不适合这个位置的土壤而损失观赏价值. 教主最喜欢3种树,这3种树 ...

  6. 树上的路径 BZOJ 3784

    树上的路径 [问题描述] 给定一个N个结点的树,结点用正整数1..N编号.每条边有一个正整数权值.用d(a,b)表示从结点a到结点b路边上经过边的权值.其中要求a<b.将这n*(n-1)/2个距 ...

  7. PXC部署,配置,操作原理

    参考:https://www.cnblogs.com/kevingrace/p/5685371.html?utm_source=itdadao&utm_medium=referra       ...

  8. MongoDB管理与监控

    https://blog.csdn.net/Chen_Victor/article/details/74855050 https://www.cnblogs.com/zhangyinguang/p/5 ...

  9. 饼系列—圈饼 doughnut

    chartControl属性 ApplicationSettings: Name:控件名字 AccessibleDescription: ??? AccessibleName:??? Accessib ...

  10. POJ 1797 Heavy Transportation SPFA变形

    原题链接:http://poj.org/problem?id=1797 Heavy Transportation Time Limit: 3000MS   Memory Limit: 30000K T ...