Litmus Chaos 实战:node-memory-hog 节点内存耗尽实验全解析

发布时间:2026/10/12 3:04:33

Litmus Chaos 实战:node-memory-hog 节点内存耗尽实验全解析 云原生运维可观测性【免费下载链接】litmusLitmus helps SREs and developers practice chaos engineering in a Cloud-native way. Chaos experiments are published at the ChaosHub (https://hub.litmuschaos.io). Community notes is at https://hackmd.io/a4Zu_sH4TZGeih-xCimi3Q项目地址https://gitcode.com/gh_mirrors/li/litmus点击查看免费下载node-memory-hog是 Litmus Chaos 实验套件中面向Kubernetes 节点Node层面的混沌注入实验它通过在目标节点上运行携带stress-ng工作负载生成器的 helper pod将节点内存消耗推高至指定水位从而制造节点内存资源耗尽 → 节点变为 Not Ready → 副本被驱逐的真实故障场景。本文以 node-memory-hog.md 为主线完整讲解实验机制、前置条件、最小 RBAC、全部可调参数tunables与可复制的 ChaosEngine 配置示例并辅以仓库内的真实监控注入示例与 FAQ 佐证帮助你直接上手演练应用的驱逐韧性。实验简介让节点内存爆掉该实验会造成Kubernetes 节点的内存资源耗尽Memory resource exhaustion其核心目标并不是测试节点本身而是验证应用副本在节点因内存不足变为不可调度Not Ready而被驱逐时的恢复韧性。换句话说可以把它的意义重新表述为测试应用在因节点内存资源不足导致副本驱逐场景下的韧性表现。注入机制混沌注入通过一个运行 Linuxstress-ng工具工作负载生成器的helper pod完成混沌持续的总时长由TOTAL_CHAOS_DURATION决定内存消耗量由MEMORY_CONSUMPTION_PERCENTAGE占节点总内存的百分比基于 100或MEMORY_CONSUMPTION_MEBIBYTES以 Mebibytes 为单位的绝对内存量受节点可用内存上限约束控制。需要特别强调的是实验消耗的内存量永远不会超过节点的总可用内存。它始终存在一个等于节点总可用内存的上限因此该实验不会被 kubelet 判定为越界超卖而是真实地制造节点内存紧张、调度器驱逐副本的压力环境。典型适用场景该实验最典型的使用场景包括副本驱逐韧性验证观察部署在目标节点上的工作负载副本被驱逐后是否能被调度器重新调度到其他健康节点并顺利完成容器重建与服务恢复节点 Not Ready 演练在混沌注入期间节点进入Not Ready状态验证控制面组件、DaemonSet、StatefulSet 与负载均衡等机制对该状态的容忍度容量与调度策略校验配合污点Taints、优先级PriorityClass、PodDisruptionBudget等调度策略检验集群在资源紧缺下的行为是否符合预期混合故障演练将节点内存耗尽与其他节点类故障如 node-cpu-hog、node-io-stress、node-drain组合模拟多资源维度同时告警的极端场景。前置条件在运行node-memory-hog之前需要确认以下条件满足Kubernetes 版本 1.16Litmus Chaos Operator 已在运行在 operator 所在命名空间通常是litmus执行kubectl get pods确认若未安装可使用仓库 manifests 中的安装清单或 litmus-admin-rbac.yaml 等资源完成部署node-memory-hog实验资源已就绪在目标命名空间执行kubectl get chaosexperiments确认存在对应的ChaosExperimentCRD 实例实验定义由 ChaosHub 分发并在集群中预先安装。默认校验Default Validations实验默认执行的校验逻辑为混沌注入前、注入后目标节点都必须处于Ready状态。实验会在混沌开始前确认节点健康并在注入结束后再次检查节点是否恢复正常以判定实验结果为通过Pass还是失败Fail。最小 RBAC 配置示例如果你是通过 chaos-center 构建并执行 chaos workflow通常会直接复用集群内已预装的 litmus-admin RBAC作为 agent 安装的一部分。而作为独立实验运行时可以使用下面这份最小权限 RBAC 清单在目标应用命名空间创建 chaosServiceAccount--- apiVersion: v1 kind: ServiceAccount metadata: name: node-memory-hog-sa namespace: default labels: name: node-memory-hog-sa app.kubernetes.io/part-of: litmus --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: node-memory-hog-sa labels: name: node-memory-hog-sa app.kubernetes.io/part-of: litmus rules: # Create and monitor the experiment helper pods - apiGroups: [] resources: [pods] verbs: [create,delete,get,list,patch,update, deletecollection] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [] resources: [events] verbs: [create,get,list,patch,update] # Fetch configmaps details and mount it to the experiment pod (if specified) - apiGroups: [] resources: [configmaps] verbs: [get,list,] # Track and get the runner, experiment, and helper pods log - apiGroups: [] resources: [pods/log] verbs: [get,list,watch] # for creating and managing to execute comands inside target container - apiGroups: [] resources: [pods/exec] verbs: [get,list,create] # for configuring and monitor the experiment job by the chaos-runner pod - apiGroups: [batch] resources: [jobs] verbs: [create,list,get,delete,deletecollection] # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - apiGroups: [litmuschaos.io] resources: [chaosengines,chaosexperiments,chaosresults] verbs: [create,list,get,patch,update,delete] # for experiment to perform node status checks - apiGroups: [] resources: [nodes] verbs: [get,list] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: node-memory-hog-sa labels: name: node-memory-hog-sa app.kubernetes.io/part-of: litmus roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: node-memory-hog-sa subjects: - kind: ServiceAccount name: node-memory-hog-sa namespace: default该清单已包含执行实验所需的最小权限集合关键点说明pods的create/delete/get/list/patch/update/deletecollection用于创建并监控实验 pod 与 helper podevents的 CRUD向 chaosengine 与 chaosresult 写入事件configmaps的get/list按需挂载配置pods/log与pods/exec跟踪 runner、实验、helper pod 日志并在目标容器内执行命令jobs的增删查由 chaos-runner pod 配置和监控实验 Joblitmuschaos.io组的chaosengines/chaosexperiments/chaosresults资源操作支撑 chaos workflow 中混沌资源的创建、状态轮询与删除nodes的get/list实验执行节点状态检查。实验可调参数Tunables所有 tunables 均配置在 ChaosEngine 的.spec.experiments[*].spec.components.env下。必填字段Mandatory Fields变量描述备注TARGET_NODES逗号分隔的节点名列表表示施加节点内存压力混沌的目标节点与NODE_LABEL互斥NODE_LABEL节点标签用于在未设置TARGET_NODES时按标签过滤出目标节点与TARGET_NODES互斥若两者同时提供以TARGET_NODES为准可选字段Optional Fields变量描述默认值TOTAL_CHAOS_DURATION混沌注入的总时长秒120LIB用于注入混沌的混沌库litmusLIB_IMAGE运行 stress 命令所用的镜像litmuschaos/go-runner:latestMEMORY_CONSUMPTION_PERCENTAGE占节点总内存容量的百分比30MEMORY_CONSUMPTION_MEBIBYTES消耗的可用内存大小Mebibytes。使用该变量时需将MEMORY_CONSUMPTION_PERCENTAGE留空因为百分比优先无NUMBER_OF_WORKERS参与内存压测的 VM worker 数量1RAMP_TIME混沌注入前后等待的时长秒无NODES_AFFECTED_PERC匹配标签的目标节点中被混沌影响的百分比0对应 1 个节点仅接受数值SEQUENCE多目标场景下混沌执行的顺序parallel支持serial、parallelSTATUS_CHECK_DELAY两次状态检查之间的时间间隔秒2STATUS_CHECK_TIMEOUT等待应用/辅助检查成功的最大时间秒180TERMINATION_GRACE_PERIOD_SECONDShelper pod 终止时的宽限期秒0几个参数的行为细节值得注意MEMORY_CONSUMPTION_PERCENTAGE与MEMORY_CONSUMPTION_MEBIBYTES互斥两者同时设置时实验优先使用百分比计算压测内存只有百分比留空时才按 Mebibytes 压测。NODES_AFFECTED_PERC默认0意味着至少命中 1 个节点它只对支持多节点目标的实验node-memory-hog、node-cpu-hog、node-io-stress生效其他节点类实验始终只选中单个节点。除本文列出的参数外TOTAL_CHAOS_DURATION、RAMP_TIME、SEQUENCE、LIB、LIB_IMAGE、INSTANCE_ID等属于全部实验通用的 tunables完整说明见 common-tunables-for-all-experiments.md节点类实验特有的TARGET_NODES、NODE_LABEL、NODES_AFFECTED_PERC等见 common-tunables-for-node-experiments.md。实验示例Experiment Examples以下示例均以engine-nginx为 ChaosEngine 名称、node-memory-hog-sa为 chaosServiceAccount可直接复制并按需调整。按百分比压测内存MEMORY_CONSUMPTION_PERCENTAGE按节点总容量的MEMORY_CONSUMPTION_PERCENTAGE百分比对目标节点施加内存压力# stress the memory of the targeted node with MEMORY_CONSUMPTION_PERCENTAGE of node capacity # it is mutually exclusive with the MEMORY_CONSUMPTION_MEBIBYTES. # if both are provided then it will use MEMORY_CONSUMPTION_PERCENTAGE for stress apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: name: engine-nginx spec: engineState: active annotationCheck: false chaosServiceAccount: node-memory-hog-sa experiments: - name: node-memory-hog spec: components: env: # percentage of total node capacity to be stressed - name: MEMORY_CONSUMPTION_PERCENTAGE value: 10 # in percentage - name: TOTAL_CHAOS_DURATION value: 60对应文件memory-consumption-percentage.yaml按 Mebibytes 压测内存MEMORY_CONSUMPTION_MEBIBYTES按指定的 Mebibytes 绝对量对目标节点施加内存压力。该参数与MEMORY_CONSUMPTION_PERCENTAGE互斥若设置了百分比则优先按百分比压测否则才按MEMORY_CONSUMPTION_MEBIBYTES压测# stress the memory of the targeted node with given MEMORY_CONSUMPTION_MEBIBYTES # it is mutually exclusive with the MEMORY_CONSUMPTION_PERCENTAGE. # if both are provided then it will use MEMORY_CONSUMPTION_PERCENTAGE for stress apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: name: engine-nginx spec: engineState: active annotationCheck: false chaosServiceAccount: node-memory-hog-sa experiments: - name: node-memory-hog spec: components: env: # node memory to be stressed - name: MEMORY_CONSUMPTION_MEBIBYTES value: 500 # in MiBi - name: TOTAL_CHAOS_DURATION value: 60对应文件memory-consumption-mebibytes.yaml设置压测 worker 数量NUMBER_OF_WORKERS压测并发 worker 数量通过NUMBER_OF_WORKERS调节。worker 越多内存分配与页表操作压力越陡峭通常用于模拟更猛烈的瞬时内存冲击# provide for the workers count for the stress apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: name: engine-nginx spec: engineState: active annotationCheck: false chaosServiceAccount: node-memory-hog-sa experiments: - name: node-memory-hog spec: components: env: # total number of workers involved in stress - name: NUMBER_OF_WORKERS value: 1 - name: TOTAL_CHAOS_DURATION value: 60对应文件workers.yaml节点类实验通用 tunables 速览node-memory-hog与node-cpu-hog、node-io-stress共享以下多节点定位方式均配置在.spec.experiments[*].spec.components.envTARGET_NODES多节点value: node01,node02逗号分隔的节点名列表直接指定压力施加对象NODE_LABEL按标签定位value: keyvalue在未设置TARGET_NODES时按标签匹配节点两者同时设置时以TARGET_NODES为准NODES_AFFECTED_PERC受影响百分比value: 100表示匹配标签的节点中参与混沌的比例留空或0时至少命中 1 个节点。完整说明与示例见 common-tunables-for-node-experiments.md。仓库中的真实运行示例除了文档示例仓库的监控配套目录中还提供了可直接借鉴的实战编排展示如何把node-memory-hog接入真实业务面向 sock-shoporders服务的 ChaosEngineorders-node-memory-hog.yaml 将TOTAL_CHAOS_DURATION设为240秒内存消耗设为90该示例使用了旧版变量名MEMORY_PERCENTAGE当前文档规范名称为MEMORY_CONSUMPTION_PERCENTAGE迁移时注意替换并开启monitoring: true以对接指标采集Argo CronWorkflow 定时混沌orders-node-memory-hog-workflow.yaml 展示了如何用 CronWorkflow调度表达式30-44/15 * * * *、concurrencyPolicy: Forbid把上述 ChaosEngine 定时应用到litmus命名空间实现每隔 15 分钟在每半小时窗口内自动演练一次节点内存压力的周期混沌监控看板联动仓库的 Node-and-pod-metrics-dashboard.json 与 Sock-Shop-Performance-Under-Chaos.json 中均包含了node-memory-hog相关的注入记录可在混沌执行期间同步观察节点与 Pod 的指标变化。常见问题为什么 helper pod 在 kubelet 感知内存压力前不会被 OOM KillFAQ见 experiments.md对此有专门解释实验消耗的是节点总内存容量的一定百分比。helper pod 运行在目标节点上对该节点资源施压因此实验不会消耗超过节点总可用内存的内存资源即始终存在一个等于节点总可用内存的消耗上限。这意味着即使MEMORY_CONSUMPTION_PERCENTAGE被设得很高例如90消耗量也被限制在节点实际可用内存范围内避免 helper pod 因为向 kubelet 申报了超限资源而在注入开始前就被提前 OOM Kill。这也是该实验能在真实集群中稳定复现节点内存压力 副本驱逐的关键设计。结语node-memory-hog是 Litmus 节点类混沌实验中覆盖内存维度的核心故障注入器配合TARGET_NODES/NODE_LABEL的目标选择、百分比/绝对值两种压测模式和NODES_AFFECTED_PERC的批量控制可以精准地在指定节点上制造内存耗尽场景检验应用副本在驱逐与节点 Not Ready 条件下的自愈能力。上手路径建议先在测试集群用最小 RBAC 清单 上述任一 ChaosEngine 示例跑通一次注入再结合仓库中的 sock-shop 示例与 Argo CronWorkflow 编排将节点内存混沌沉淀为周期性演练。赞分享云原生运维可观测性【免费下载链接】litmusLitmus helps SREs and developers practice chaos engineering in a Cloud-native way. Chaos experiments are published at the ChaosHub (https://hub.litmuschaos.io). Community notes is at https://hackmd.io/a4Zu_sH4TZGeih-xCimi3Q项目地址https://gitcode.com/gh_mirrors/li/litmus点击查看免费下载相关推荐Litmus node-cpu-hog 实验指南在 Kubernetes 节点上注入 CPU 资源耗尽故障Litmus node cpu hog 实验指南在 Kubernetes 节点上注入 CPU 资源耗尽故障 node cpu hog 是 Litmus 混沌工云原生运维可观测性Litmus node-drain 混沌实验实战指南Kubernetes 节点排空的原理、配置与验证Litmus node drain 混沌实验实战指南Kubernetes 节点排空的原理、配置与验证 本文以开源混沌工程平台 Litmus 的 node dr云原生运维可观测性Litmus 节点磁盘 I/O 压力注入实验node-io-stress完全指南原理、配置与实战Litmus 节点磁盘 I/O 压力注入实验node io stress完全指南原理、配置与实战 导读 本文以 Litmus Chaos 的 node i云原生运维可观测性上一篇3步搞定B站视频下载BilibiliDown让你的收藏永不丢失下一篇用 PocketFlow 构建自动化 Coding Agent6 个工具驱动的 LLM 循环与 Patch 子流程实战创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/12 3:04:33

FreeRTOS | HAL_UART_Transmit阻塞问题与解决方法

void Seria2_Printf(char *format, ...) {char String[200];va_list arg;va_start(arg, format);vsprintf(String, format, arg);va_end(arg);HAL_UART_Transmit(&huart2,(uint8_t*)&String, strlen(String), HAL_MAX_DELAY); }在FreeRTOS中使用HAL_UART_Transmit函数时…

2026/10/12 2:59:32

STM32驱动DS1302实时时钟:GPIO模拟时序与寄存器配置详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 2:59:32

虚拟电厂云端功率预测:坐标代替气象站,降本30%-50%

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 4:15:00

Java实现电商自动下单:接口层状态机、会话管理与避坑实战

简介:一个基于 Java 的京东自动下单工具,已在京东商城验证,面向双十一等促销活动需要快速抢购的用户,也适合想学习模拟登录、请求抓包、网页解析和自动化下单的 Java 开发者,还可作为二次开发的基础模板。压缩包共 33 …

2026/10/12 4:15:00

刚关门下架的小团队转头被苹果打包带走,背后的算盘藏不住了

刚关门下架的小团队转头被苹果打包带走,背后的算盘藏不住了 你可能很难想象,一家刚刚关门歇业、甚至把软件从各大应用商店下架删库的初创公司,转头就会被全球市值最高的科技巨头悄悄打包带走。 在布鲁塞尔欧盟委员会的一处公开监管备案数据库…

2026/10/12 4:15:00

SpringBoot+Vue陕西民俗网管理系统开发实践

一套基于SpringBootVue的陕西民俗网管理系统,用MyBatis做持久层、MySQL存数据,前后端分离,既能当毕业设计交差,也能真正跑起来做民俗文化展示和后台管理。这篇文章我会把项目从技术选型、数据库设计、核心功能实现,到部…

2026/10/12 4:15:00

兜里揣着千亿现金的苹果拟裁五千客服,机器接通后方案却被叫停

兜里揣着千亿现金的苹果拟裁五千客服,机器接通后方案却被叫停 如果你最近在美国或加拿大拨打过苹果的官方支持热线,接通那一刻,电话那头传来的很可能已经不是真人声音,而是一个能听懂日常口语、能分步骤教你排查手机故障的生成式人…

2026/10/12 4:10:00

100亿Token微调实战:从数据清洗到LoRA/QLoRA开源全流程

从立项到开源,这个项目整整花了我两个月时间,累计消耗的 Token 数超过了 100 亿。期间经历过数据质量不过关重来、训练中 loss 异常、评测结果不理想等多轮反复。这篇文章不打算只讲“我开源了一个模型”这样一个结果,而是把这套完整流程整理…

2026/10/11 0:02:13

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/11 0:02:13

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/11 0:02:13

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

2026/10/12 0:04:22

绝缘子缺陷检测数据集清洗与工业级训练实战指南

简介:本资源是面向电力AI研发人员、工业视觉工程师及智能巡检系统开发者的绝缘子缺陷检测专用YOLO格式数据集,解决无人机航拍场景下绝缘子破损、污闪、积雪等9类典型缺陷的精准识别与定位难题。数据集共2139张真实巡检图像(含训练/验证/测试集…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑