详情页标题前

腾讯云容器服务OOMGuard 说明同尘科技

详情页1

简介

说明该组件在用户态降低了由于 cgroup 内存回收失败而产生的各种内核故障的发生几率,仅适用于解决操作系统版本为 CenteOS 7.2/7.6的原生内核缺陷,其他镜像版本无需安装。

组件介绍

内存溢出(Out of Memory,OOM)是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于能提供的最大内存。当 cgroup 内存不足时,Linux 内核会触发 cgroup OOM 来选择一些进程杀掉,以便能回收一些内存从而尽量继续保持系统继续运行。但 Linux 内核(尤其是3.10等低版本内核)对 cgroup OOM 的处理存在很多问题,频繁的 cgroup OOM 经常会带来节点故障(例如卡死、重启或进程异常但无法杀死)的情况。OOM-Guard 是容器服务 TKE 提供的在用户态处理容器 cgroup OOM 的组件。当 cgroup OOM 情况出现时,在系统内核杀死相关容器进程之前,OOM-Guard 组件会直接在用户空间杀掉超过内存限制的容器,从而减少了在内核态回收内存失败而触发各种节点故障的概率。在触发阈值进行 OOM 之前,OOM-Guard 会先通过写入 memory.force_empty 触发相关 cgroup 的内存回收,如果 memory.stat 显示还有较多 cache,则不会触发后续处理策略。在 cgroup OOM 杀掉容器后,会向 Kubernetes 上报 OomGuardKillContainer 事件,可以通过 kubectl get event 命令进行查看。

原理介绍

核心思想是在发生内核 cgroup OOM kill 之前,在用户空间杀掉超限的容器, 减少走到内核 cgroup 内存回收失败后的代码分支从而触发各种内核故障的机会。oom-guard 会给 memory cgroup 设置 threshold notify,接受内核的通知。详情见 threshold notify。

示例

假如一个 pod 设置的 memory limit 是1000M,oom-guard 会根据配置参数计算出 margin。

margin = 1000M * margin_ratio = 20M // 缺省 margin_ratio 是 0.02

另外 margin 最小不小于 min_margin(缺省1M),最大不大于 max_margin(缺省为50M)。如果超出范围,则取 min_margin 或 max_margin。然后计算 threshold:

threshold = limit - margin // 即 1000M - 20M = 980M

把980M作为阈值设置给内核。当这个 pod 的内存使用量达到980M时,oom-guard 会收到内核的通知。在触发阈值之前,oom-gurad 会先通过 memory.force_empty 触发相关 cgroup 的内存回收。另外,如果触发阈值时,相关 cgroup 的 memory.stat 显示还有较多 cache,则不会触发后续处理策略,这样当 cgroup 内存达到 limit 时,内核还是会触发 cgroup OOM。

达到阈值后的处理策略

通过--policy参数来控制处理策略。目前有以下三个策略,缺省策略是 container。

策略 描述
process 采用跟内核 cgroup OOM killer 相同的策略,在该 cgroup 内部,选择一个 oom_score 得分最高的进程杀掉。通过 oom-guard 发送 SIGKILL 来杀掉进程。
container 在该 cgroup 下选择一个 docker 容器,杀掉整个容器。
noop 只记录日志,并不采取任何措施。

部署在集群内的 Kubernetes 对象

Kubernetes 对象名称 类型 默认占用资源 所属 Namespaces
oomguard ServiceAccount kube-system
system:oomguard ClusterRoleBinding
oom-guard DaemonSet 0.02核 CPU,120MB内存 kube-system

使用场景

应用于节点内存压力比较大,业务容器经常发生 OOM 导致节点故障的 Kubernetes 集群。

限制条件

没有修改 containerd 服务 socket 路径,保持 TKE 的默认路径:docker 运行时:/run/docker/containerd/docker-containerd.sockcontainerd 运行时:/run/containerd/containerd.sock没有修改 cgroup 内存子系统挂载点,保持默认挂载点:/sys/fs/cgroup/memory

使用方法

1. 登录 容器服务控制台,在左侧导航栏中选择集群。2. 在集群列表中,单击目标集群 ID,进入集群详情页。3. 选择左侧导航中的组件管理,在组件管理页面单击新建。4.新建组件管理页面中勾选 OOM-Guard。5. 单击完成即可安装组件。
容器服务官网1折活动,限时活动,即将结束,速速收藏
同尘科技腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利。同意关联立享优惠

转转请注明出处:https://www.yunxiaoer.com/147590.html

(0)
上一篇 2023年12月9日 下午12:42
下一篇 2023年12月9日
详情页2

相关推荐

  • 腾讯云Serverless应用中心云端调试-同尘科技

    开发模式 开发模式是为处于开发状态下的项目可以更便捷的进行代码编写、开发调试而设计的。在开发模式中,用户可以持续地进行开发-调试的过程,尽量减少打包、更新等其他工作的干扰。 进入开发模式 在项目下执行 scf dev命令,可以进入项目的开发模式。示例如下: $ scf devserverless-cloud-frameworkDev Mode – Watch…

    2023年12月9日
  • 腾讯云TDSQL-C MySQL版大数据集场景测试结果

    本文为您介绍 TDSQL-C MySQL 版在大数据集场景下与腾讯云 MySQL的性能对比测试结果。 大数据集场景介绍 大数据集场景指全部数据不可全部放到缓存里(数据量是内存2倍),查询过程中需要读写磁盘更新缓存。 大数据集场景测试结论 只读场景下 TDSQL-C MySQL 版都可以将计算节点的 CPU 利用率达到90%以上,测试结论体现了 TDSQL-C…

    2023年12月9日
  • 腾讯云对象存储设置盲水印

    简介 盲水印是对象存储基于数据万象推出的特殊水印服务,能够将水印图以不可见形式添加至图像频域,在图片被攻击后仍可进行水印图提取,进行鉴权追责,详情请参见 盲水印概述。注意盲水印是付费服务,由数据万象收取,具体费用请参见数据万象的 定价文档。盲水印目前仅适用于中国大陆公有云地域。 操作步骤 1. 登录 对象存储控制台 ,在存储桶列表页面选择需操作的存储桶,进入…

    腾讯云 2023年12月9日
  • 腾讯云对象存储用于前端直传 COS 的临时密钥安全指引

    简介 在移动应用和 Web 应用中,您可以通过 iOS/Android/JavaScript SDK 在前端直接向对象存储(Cloud Object Storage,COS)发起请求,此时数据的上传和下载可以不经过您的后端服务器,既节约了您后端服务器的带宽和负载,还可以充分利用 COS 的带宽和全球加速等能力,提升您的应用体验。在实际应用中,您需要使用临时密…

    腾讯云 2023年12月9日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 阿里云RDS数据库根据标签筛选实例-云淘科技

    实例绑定标签后,您可以根据标签筛选实例。 登录RDS管理控制台,在左侧单击实例列表,然后在上方选择地域。 通过标签的键和值筛选实例。 说明 按标签筛选实例后,如果您需要取消筛选,可以删除标签键右侧的筛选条件。 相关API API描述查询标签查询标签。内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家阿里云企业补贴进行中: 马上申请腾讯云限时活动1折…

    2023年12月10日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。