前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >kubernetes调度之资源耗尽处理方案

kubernetes调度之资源耗尽处理方案

作者头像
kubernetes中文社区
发布2019-06-24 16:18:39
1.1K0
发布2019-06-24 16:18:39
举报

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

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

驱离策略

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

驱离信号

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

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

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

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

  • nodefs文件系统,kubelet用于存储卷,守护进程log等
  • imagefs文件系统,容器运行时用于存储镜像和容器的可写层

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

驱离阈值

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

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

代码语言:javascript
复制
[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会报告一种状态来反映节点处于压力之下

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

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

回收节点级别的资源

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

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

驱离pod

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

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

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

BestEffort或者Burstable类型pod

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 kubernetes中文社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 驱离策略
    • 驱离信号
    • 驱离阈值
    • 软驱离阈值
    • 硬驱离阈值
    • 驱离监视时间间隔
    • 回收节点级别的资源
    • 驱离pod
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档