
云原生运维可观测性【免费下载链接】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 开源仓库中的aws-ssm-chaos-by-tag混沌实验官方文档位于 mkdocs/docs/experiments/categories/aws-ssm/aws-ssm-chaos-by-tag.md完整讲解如何借助 Amazon Systems ManagerSSMRun Command 与 SSM Documents对带指定标签的 AWS EC2 实例批量注入 CPU 压力、内存压力、网络、磁盘或 IO 等混沌故障。读完本文你将掌握实验的运行原理与前置条件、最小 RBAC 配置、全部 tunables 参数含义与默认值以及针对单个实例与按百分比批量实例的完整可运行 ChaosEngine 配置。AWS SSM Chaos By Tag 场景示意一、实验概述什么是 AWS SSM Chaos By Tagaws-ssm-chaos-by-tag是 Litmus 提供的 AWS 基础设施级混沌实验之一其核心能力是扰乱 AWS 基础设施资源的运行状态。与直接在 Kubernetes Pod 内注入故障不同它通过Amazon SSM Run Command在目标 EC2 实例上执行混沌动作实验使用SSM DocumentsSSM 文档定义 Systems Manager 需要在受管实例已安装 SSM Agent上执行的动作从而允许对实例施加混沌它会根据给定的EC2 实例标签Tag筛选目标实例在指定REGION内、持续一段混沌时长内注入stress压力、network网络、disk磁盘或 IO等故障默认执行使用内置的 stress-chaos SSM 文档同时你可以在 ChaosExperiment CR 的.spec.definition.configMaps字段挂载自定义 SSM 文档实现任意类型的混沌动作若在 ChaosEngine 中提供了目标应用 Pod 信息实验还会验证部署健全性副本可用性与服务不间断以及恢复工作流用于观测混沌注入期间业务是否受到影响。从仓库目录结构看该实验属于mkdocs/docs/experiments/categories/aws-ssm/分类与按实例 ID 注入的姊妹实验aws-ssm-chaos-by-id并列并在 mkdocs/mkdocs.yml 的文档导航中登记为 AWS SSM Chaos By Tag。二、工作原理SSM Run Command SSM Documents实验的混沌载体是AWS Systems Manager Run CommandLitmus 混沌实验 Pod 通过 AWS SDK 调用send-command向目标 EC2 实例发送 SSM Run Command目标实例上运行的SSM Agent接收命令并按照指定的SSM Document定义的动作执行默认使用的LitmusChaos-AWS-SSM-Doc是一个 stress 型文档其内部依赖stress-ng工具来制造 CPU / 内存压力SSM 文档本身也支持网络、磁盘、IO 等更广义的故障注入混沌执行持续TOTAL_CHAOS_DURATION时长且可通过CHAOS_INTERVAL控制多轮迭代的间隔实验结束后通过 ChaosResult 汇总结果并结合应用 Pod 健康状态判断业务影响。这一机制的关键优势在于混沌动作完全发生在 EC2 实例的操作系统层面与 Kubernetes 工作负载解耦非常适合测试真实业务负载的实例级韧性。实验文档强调SSM Agent 必须安装在目标实例上即实例必须是 Systems Manager 的受管实例这是前置条件之一。三、前置条件在运行aws-ssm-chaos-by-tag之前需要逐项核对以下前提对应官方文档的 Prerequisites 章节Kubernetes 版本大于 1.16Litmus Chaos Operator 正在运行在 Operator 所在命名空间通常为litmus执行kubectl get pods验证未安装时先完成 Litmus 的安装实验资源已部署在目标命名空间执行kubectl get chaosexperiments确认aws-ssm-chaos-by-tag实验 CR 可用若未安装可从 ChaosHub 的faults/aws/aws-ssm-chaos-by-tag/fault.yaml获取安装AWS 访问权限与 IAM Instance Profile目标 EC2 实例必须挂载 IAM 实例配置文件使 SSM Agent 具备被 Run Command 管理所需的权限包括ssm:SendCommand等相关策略在CHAOS_NAMESPACE中创建存放 AWS 访问凭据的 Kubernetes Secret样例 Secret 如下apiVersion: v1 kind: Secret metadata: name: cloud-secret type: Opaque stringData: cloud_config.yml: |- # Add the cloud AWS credentials respectively [default] aws_access_key_id XXXXXXXXXXXXXXXXXXX aws_secret_access_key XXXXXXXXXXXXXXX注意Secret 默认以cloud_config.yml作为 key实验 Pod 会将该配置挂载为/tmp/cloud_config.yml。如果修改了 Secret 的 key 名称不再是cloud_config.yml必须同步修改experiment.yaml中的AWS_SHARED_CREDENTIALS_FILE环境变量为同名路径否则实验 Pod 将无法读取 AWS 凭据。四、默认校验Default Validations实验运行前会自动执行以下校验目标 EC2 实例应处于健康状态healthy。若实例状态异常如stopped、terminated实验会以失败收场可在 ChaosResult 中查看原因。五、最小 RBAC 配置可选如果你通过 chaos-center 编排并执行 Litmus Workflow通常可直接复用集群中预置的litmus-adminRBAC若要在应用命名空间内独立运行则需要创建最小权限的chaosServiceAccount。官方文档给出的完整最小 RBAC 清单如下ServiceAccount ClusterRole ClusterRoleBinding 三段式--- apiVersion: v1 kind: ServiceAccount metadata: name: aws-ssm-chaos-by-tag-sa namespace: default labels: name: aws-ssm-chaos-by-tag-sa app.kubernetes.io/part-of: litmus --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: aws-ssm-chaos-by-tag-sa labels: name: aws-ssm-chaos-by-tag-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 secrets details and mount it to the experiment pod (if specified) - apiGroups: [] resources: [secrets,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] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: aws-ssm-chaos-by-tag-sa labels: name: aws-ssm-chaos-by-tag-sa app.kubernetes.io/part-of: litmus roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: aws-ssm-chaos-by-tag-sa subjects: - kind: ServiceAccount name: aws-ssm-chaos-by-tag-sa namespace: default此清单覆盖了实验所需的全部最小权限操作实验 Pod 与日志、读写 events、读取 secrets/configmaps用于挂载云凭据与自定义 SSM 文档、管理 chaos-runner 的 Job以及对chaosengines、chaosexperiments、chaosresults三类 CR 的增删改查。随后在 ChaosEngine 的spec.chaosServiceAccount字段引用该 ServiceAccount 即可。六、实验参数Tunables详解所有 tunables 均配置在 ChaosEngine 的spec.experiments[*].spec.components.env中。官方文档将参数分为必填与可选两类下表完整保留全部字段及默认值必填字段变量描述备注EC2_INSTANCE_TAG用于筛选目标 EC2 实例的实例标签必须以key:value格式提供例如chaos:ssmREGION目标实例所在的区域名称所有被标签命中的实例应处于同一区域可选字段变量描述备注INSTANCE_AFFECTED_PERC命中标签的实例中被注入混沌的百分比默认0即仅 1 个实例只接受数值TOTAL_CHAOS_DURATION混沌注入的总时长秒默认30sCHAOS_INTERVAL相邻两轮混沌注入之间的间隔秒默认60sAWS_SHARED_CREDENTIALS_FILEAWS 凭据文件路径默认/tmp/cloud_config.ymlDOCUMENT_NAME自定义 SSM 文档名称不使用默认文档时提供默认LitmusChaos-AWS-SSM-DocDOCUMENT_FORMATSSM 文档格式支持YAML/JSON默认YAMLDOCUMENT_TYPE自定义 SSM 文档类型默认CommandDOCUMENT_PATH通过 configMap 挂载自定义文档时的文档路径默认指向 Litmus 内置 SSM 文档路径INSTALL_DEPENDENCIES是否安装默认文档运行 stress-ng 所需的依赖可选True/False默认TrueNUMBER_OF_WORKERS使用默认 SSM 文档时运行 stress 混沌的 worker 数默认1MEMORY_PERCENTAGE使用默认文档时实例内存消耗百分比默认80CPU_CORE使用默认文档时参与 stress 的 CPU 核心数默认0表示占用实例全部可用核心SEQUENCE多实例场景下的混沌执行顺序默认parallel支持serial、parallelRAMP_TIME混沌注入前后的等待时间秒—其中TOTAL_CHAOS_DURATION、RAMP_TIME、SEQUENCE属于所有 Litmus 实验共用的通用 tunables详见 common-tunables-for-all-experiments.mdCPU_CORE、MEMORY_PERCENTAGE、NUMBER_OF_WORKERS、DOCUMENT_*系列、CHAOS_INTERVAL等 AWS-SSM 特有参数可参考 AWS-SSM-experiments-tunables.md。七、实操示例一压力单个实例默认行为是从带指定标签的实例中随机选取 1 个实例注入混沌。将EC2_INSTANCE_TAG设为key:value如chaos:ssm并给出REGION即可定位目标。完整可运行的 ChaosEngine 如下对应仓库示例 instance-tag.yamlapiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: name: engine-nginx spec: engineState: active annotationCheck: false chaosServiceAccount: aws-ssm-chaos-by-tag-sa experiments: - name: aws-ssm-chaos-by-tag spec: components: env: # tag of the ec2 instances - name: EC2_INSTANCE_TAG value: key:value # region of the ec2 instance - name: REGION value: region of the ec2 instances - name: TOTAL_CHAOS_DURATION value: 60部署后执行kubectl apply -f engine.yaml假设文件名为engine.yaml随后通过kubectl get chaosresult观察混沌结果。本例将使用默认 SSM 文档在该实例上运行 stress-ng持续TOTAL_CHAOS_DURATION60 秒的 CPU / 内存压力。八、实操示例二按百分比批量注入当需要验证多个实例同时或依次承受压力时通过INSTANCE_AFFECTED_PERC指定命中标签实例中被注入混沌的百分比。例如设为100表示对全部命中实例注入对应仓库示例 instance-affected-percentage.yamlapiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: name: engine-nginx spec: engineState: active annotationCheck: false chaosServiceAccount: aws-ssm-chaos-by-tag-sa experiments: - name: aws-ssm-chaos-by-tag spec: components: env: # percentage of the ec2 instances filtered by tags - name: INSTANCE_AFFECTED_PERC value: 100 # tag of the ec2 instances - name: EC2_INSTANCE_TAG value: key:value # region of the ec2 instances - name: REGION value: region of the ec2 instances - name: TOTAL_CHAOS_DURATION value: 60多实例场景下可用SEQUENCE控制注入节奏parallel默认对所有实例同时注入serial逐个实例依次注入用RAMP_TIME在注入前后增加等待窗口便于观察指标变化。九、进阶调优CPU、内存、并发与自定义 SSM 文档在 common 目录下仓库为各参数提供了可直接套用的 ChaosEngine 片段将其env合并进aws-ssm-chaos-by-tag实验即可1. CPU 核心压力CPU_CORE# provide the cpu cores to stress the ec2 instance apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: name: engine-nginx spec: engineState: active annotationCheck: false chaosServiceAccount: aws-ssm-chaos-by-tag-sa experiments: - name: aws-ssm-chaos-by-tag spec: components: env: # cpu cores for the stress - name: CPU_CORE value: 1 - name: EC2_INSTANCE_TAG value: key:value - name: REGION value: region of the ec2 instances - name: TOTAL_CHAOS_DURATION value: 60对应示例见 cpu-cores.yaml。CPU_CORE0默认表示耗尽实例全部可用核心适合高负载演练指定具体数值则可精确控制占用规模。2. 内存压力MEMORY_PERCENTAGE# provide the memory percentage to stress the instance memory apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: name: engine-nginx spec: engineState: active annotationCheck: false chaosServiceAccount: aws-ssm-chaos-by-tag-sa experiments: - name: aws-ssm-chaos-by-tag spec: components: env: # memory percentage for the stress - name: MEMORY_PERCENTAGE value: 80 - name: EC2_INSTANCE_TAG value: key:value - name: REGION value: region of the ec2 instances - name: TOTAL_CHAOS_DURATION value: 60对应示例见 memory-percentage.yaml。默认 80% 是一个接近但不至于完全卡死的激进值生产演练中建议从小百分比开始逐步加压。3. 并发 worker 数NUMBER_OF_WORKERSstress-ng 支持多 worker 并行施压NUMBER_OF_WORKERS控制并发度默认 1示例见 workers.yaml。调大该值可模拟更猛烈的实例负载。4. 多轮迭代CHAOS_INTERVAL默认情况下实验会在TOTAL_CHAOS_DURATION内按CHAOS_INTERVAL默认 60s的间隔重复注入多轮以模拟间歇性故障示例见 chaos-interval.yaml# defines delay between each successive iteration of the chaos apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: name: engine-nginx spec: engineState: active annotationCheck: false chaosServiceAccount: aws-ssm-chaos-by-tag-sa experiments: - name: aws-ssm-chaos-by-tag spec: components: env: # delay between each iteration of chaos - name: CHAOS_INTERVAL value: 15 # time duration for the chaos execution - name: TOTAL_CHAOS_DURATION value: 60 - name: CPU_CORE value: 1 - name: EC2_INSTANCE_TAG value: key:value - name: REGION value: region of the ec2 instances5. 自定义 SSM 文档DOCUMENT_* configMap默认文档只做 stress依赖 stress-ng但 SSM 文档可以定义任意动作网络、磁盘、IO 等。自定义流程如下在 ChaosExperiment CR 的.spec.definition.configMaps中挂载包含 SSM 文档内容的 configMap通过DOCUMENT_PATH指定挂载后的文档路径通过DOCUMENT_NAME、DOCUMENT_FORMATYAML/JSON、DOCUMENT_TYPE默认Command声明文档属性。参数组合示例参考 ssm-document-details.yaml## provide the details of the ssm document details apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: name: engine-nginx spec: engineState: active annotationCheck: false chaosServiceAccount: aws-ssm-chaos-by-tag-sa experiments: - name: aws-ssm-chaos-by-tag spec: components: env: # name of the ssm docs - name: DOCUMENT_NAME value: AWS-SSM-Doc # format of the ssm docs - name: DOCUMENT_FORMAT value: YAML # type of the ssm docs - name: DOCUMENT_TYPE value: command # path of the ssm docs - name: DOCUMENT_PATH value: - name: EC2_INSTANCE_TAG value: key:value - name: REGION value: region of the ec2 instances - name: TOTAL_CHAOS_DURATION value: 60同时可配合INSTALL_DEPENDENCIES控制是否预装依赖默认True若自定义文档无需 stress-ng可将其设为False以缩短准备时间。十、验证与观察混沌执行期间可通过 ChaosResult 的verdict字段判断实验成败若在 ChaosEngine 中提供目标应用 Pod如 nginx实验会校验副本可用性与服务不间断性从而量化混沌对业务的实际影响建议配合监控面板观察目标 EC2 实例的 CPU、内存、网络指标随时间的变化曲线确认混沌注入与恢复过程符合预期。十一、常见注意事项标签格式EC2_INSTANCE_TAG必须严格使用key:value形式如chaos:ssm标签写反或遗漏冒号会导致目标筛选失败同区域约束按标签筛选出的实例需位于同一REGION跨区域实例不会被同时管理实例健康默认校验要求目标实例处于 healthy 状态演练前请先确认实例未被停止或处于异常生命周期凭据一致性修改cloud-secret的 key 名称后务必同步更新AWS_SHARED_CREDENTIALS_FILE否则实验 Pod 无法初始化 AWS 客户端多实例节奏批量注入时用SEQUENCEserial/parallel与RAMP_TIME控制爆炸半径避免一次性压垮全部实例导致恢复演练无从开展。延伸阅读按实例 ID 注入的姊妹实验aws-ssm-chaos-by-id.mdAWS-SSM 特有 tunables 汇总AWS-SSM-experiments-tunables.md全部实验通用 tunables时长、Ramp、序列、LIB 等common-tunables-for-all-experiments.md实验文档在 mkdocs 站点的导航注册位置mkdocs/mkdocs.yml赞分享云原生运维可观测性【免费下载链接】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 AWS SSM Chaos By ID 实验实战指南借助 Amazon SSM Run Command 对 EC2 实例注入混沌故障Litmus AWS SSM Chaos By ID 实验实战指南借助 Amazon SSM Run Command 对 EC2 实例注入混沌故障 AWS S云原生运维可观测性Litmus AWS SSM 混沌实验 Tunables 调参指南借助 Systems Manager Run Command 在 EC2 上注入压力故障Litmus AWS SSM 混沌实验 Tunables 调参指南借助 Systems Manager Run Command 在 EC2 上注入压力故障 本云原生运维可观测性终极混沌工程实践指南从Chaos Monkey到Litmus的完整工具使用教程终极混沌工程实践指南从Chaos Monkey到Litmus的完整工具使用教程 在现代DevOps实践中确保系统在各种故障条件下的稳定性至关重要。混沌工程作云原生CI/CD运维上一篇nyc-taxi-predictor数据预处理技术scikit-learn scalers如何提升模型准确性下一篇NoFlo UI项目实战构建你的第一个流处理应用完整教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考