云原生运维可观测性【免费下载链接】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 开源混沌工程平台中的azure-instance-stop实验为核心系统讲解如何对 Azure 虚拟机执行停止-恢复故障注入实验会在指定混沌时长内将 Azure 实例关机随后再将其恢复到运行状态用于验证应用/进程在底层实例意外宕机场景下的可用性与自愈能力。读完本文你将掌握该实验的认证配置azure.auth文件与 Kubernetes Secret、最小 RBAC 授权、全部可调参数Tunables的含义与默认值以及按实例名、按 Scale Set/AKS 节点、多轮迭代三种典型场景的 ChaosEngine 编排写法。实验概览与工作流程azure-instance-stop是 Litmus 面向 Azure 云资源的混沌实验之一其核心动作是将目标 Azure 实例VM执行 PowerOff停机操作在指定的混沌时长结束后再将实例恢复到 running 状态。该实验文档位于 azure-instance-stop.md同类实验还包括azure-disk-loss虚拟磁盘脱挂/重新挂载二者共享同一套 Azure 文件认证机制。从实验文档的流程示意图azure-instance-stop.png可以看出一次完整的实验执行包含以下阶段确定混沌目标实例Derive Azure instance under chaos根据AZURE_INSTANCE_NAMES、RESOURCE_GROUP、SCALE_SET输入解析出要操作的 Azure 实例停止实例Stop Azure instance调用 Azure SDK 对目标实例执行停机操作这是故障注入的触发点等待混沌间隔Wait for chaos interval实例保持停机状态观察应用在该状态下的行为启动实例Start Azure instance混沌间隔结束后恢复实例运行判断总时长是否结束Is chaos duration over若TOTAL_CHAOS_DURATION未耗尽则回到停止实例步骤进行下一轮注入若已耗尽则进入结果校验阶段探针评估与混沌后检查Probe evaluation post chaos check校验通过则VERDICT: PASS失败则VERDICT: FAIL结果落盘最终实验结论写入ChaosResult自定义资源C.RESULT并结束实验。图片说明azure-instance-stop 实验流程图展示了从用户输入实例详情与执行顺序到混沌执行停止→等待→启动→循环→探针校验的完整过程。用途与适用场景该实验的核心价值在于验证运行在 Azure 实例上的应用或进程在底层实例意外停机再恢复后的行为表现。典型验证点包括故障恢复能力实例重新启动后应用/进程是否能够自动恢复并重新提供服务依赖与数据面健壮性停机期间外部的流量、数据库连接、中间件依赖是否发生了超时、重连失败等问题云平台容错设计对于 AKSAzure Kubernetes Service集群验证节点级故障时工作负载的重新调度与集群自愈能力。实验文档指出若实例属于AKS 节点池其实例名应取自 Azure 中的Scale Set虚拟机规模集节点而非 AKS 节点池中的 node 名称——这一点在配置AZURE_INSTANCE_NAMES时极易踩坑务必留意。前置条件在运行azure-instance-stop实验之前需要逐一确认以下前置条件对应文档 azure-instance-stop.md 的 Prerequisites 章节1. Kubernetes 版本与 Chaos OperatorKubernetes 版本要求 1.16Litmus Chaos Operator 运行中在 operator 所在命名空间通常为litmus执行kubectl get pods确认相关 Pod 处于运行状态实验资源已安装在目标命名空间执行kubectl get chaosexperiments确认azure-instance-stop这个 ChaosExperiment CR 存在。若不存在可通过 ChaosHub 获取对应的 fault.yaml 清单进行安装。2. Azure 访问权限执行实验的账号必须具备对目标实例stop 和 start的足够 Azure 权限例如订阅级别的 Contributor 或 VM Contributor 角色。3. 基于文件的 Azure 认证File-based Authentication实验通过 Azure GO SDK 与实例通信采用文件认证file-based authentication方式。认证文件可用 Azure CLI 生成az ad sp create-for-rbac --sdk-auth azure.auth该命令会创建一个服务主体Service Principal并输出一个 JSON 格式的 SDK 认证文件。一个典型的azure.auth文件内容如下{ clientId: XXXXXXXXX, clientSecret: XXXXXXXXX, subscriptionId: XXXXXXXXX, tenantId: XXXXXXXXX, activeDirectoryEndpointUrl: XXXXXXXXX, resourceManagerEndpointUrl: XXXXXXXXX, activeDirectoryGraphResourceId: XXXXXXXXX, sqlManagementEndpointUrl: XXXXXXXXX, galleryEndpointUrl: XXXXXXXXX, managementEndpointUrl: XXXXXXXXX }4. 将认证文件以 Kubernetes Secret 形式注入认证文件必须存放在实验运行命名空间CHAOS_NAMESPACE的 Kubernetes Secret 中。示例 Secret 如下apiVersion: v1 kind: Secret metadata: name: cloud-secret type: Opaque stringData: azure.auth: |- { clientId: XXXXXXXXX, clientSecret: XXXXXXXXX, subscriptionId: XXXXXXXXX, tenantId: XXXXXXXXX, activeDirectoryEndpointUrl: XXXXXXXXX, resourceManagerEndpointUrl: XXXXXXXXX, activeDirectoryGraphResourceId: XXXXXXXXX, sqlManagementEndpointUrl: XXXXXXXXX, galleryEndpointUrl: XXXXXXXXX, managementEndpointUrl: XXXXXXXXX }关键注意点Secret 中的键名默认为azure.auth。若你自定义了键名例如改为my-auth.json则必须同步修改 ChaosExperiment 中AZURE_AUTH_LOCATION环境变量的值使其指向同一键名否则实验无法读取认证信息。5. 默认校验Default Validations实验启动时会执行默认健康校验目标 Azure 实例应处于健康running状态。若实例本身处于异常状态实验将不会继续注入。最小 RBAC 配置示例若你通过 ChaosCenter 构建并执行 Chaos Workflow可以直接复用 agent 安装时预置的litmus-adminRBAC仓库中对应清单为 litmus-admin-rbac.yaml。如需在目标应用命名空间单独创建最小权限的chaosServiceAccount可使用以下 RBAC 清单完整示例见文档--- apiVersion: v1 kind: ServiceAccount metadata: name: azure-instance-stop-sa namespace: default labels: name: azure-instance-stop-sa app.kubernetes.io/part-of: litmus --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: azure-instance-stop-sa labels: name: azure-instance-stop-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: azure-instance-stop-sa labels: name: azure-instance-stop-sa app.kubernetes.io/part-of: litmus roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: azure-instance-stop-sa subjects: - kind: ServiceAccount name: azure-instance-stop-sa namespace: default该清单由 ServiceAccount、ClusterRole、ClusterRoleBinding 三部分组成权限覆盖了实验 Pod 的创建与日志追踪pods、pods/log、pods/exec、events 的读写、secrets/configmaps 的读取以及 ChaosEngine/ChaosExperiment/ChaosResult 三类 litmuschaos.io 资源的全生命周期管理——这是执行该类云故障实验所需的最小权限集合。实验 Tunables可调参数azure-instance-stop的全部可调参数通过 ChaosEngine 的.spec.experiments[0].spec.components.env注入分为必填Mandatory与可选Optional两类。必填参数变量描述备注AZURE_INSTANCE_NAMES目标 Azure 实例的名称支持逗号分隔的多个实例名AKS 节点的实例名应取自 Azure 的 Scale Set 区域而非 AKS 节点池中的 node 名称RESOURCE_GROUP目标实例所属的资源组—可选参数变量描述备注SCALE_SET实例是否属于 Scale Set规模集取值enable/disable默认disableAKS 节点场景需设为enableTOTAL_CHAOS_DURATION混沌注入的总时长秒默认 30sCHAOS_INTERVAL相邻两次实例停机之间的间隔秒默认 30s用于多轮迭代SEQUENCE多实例时的混沌执行顺序默认parallel支持serial、parallelRAMP_TIME注入前后等待的缓冲时长秒可选无默认值说明按需设置通用 Tunables 补充说明除了上述实验专属参数所有 Litmus 实验还共享一组通用 Tunables详细说明与示例见 common-tunables-for-all-experiments.mdTOTAL_CHAOS_DURATION混沌注入总时长单位秒示例值60RAMP_TIME注入前后等待时间单位秒示例值10SEQUENCE多目标执行顺序parallel全部目标同时注入/serial逐个注入默认parallelLIB故障注入所用 chaos 库名称示例值litmusINSTANCE_ID用户自定义的标识串如04-05-2020-9-00会作为后缀追加到 ChaosResult CR 名称中便于区分多次运行LIB_IMAGEhelper Pod 使用的镜像适用于 container-kill、网络、压力等实验azure-instance-stop场景通常无需改动。实验示例场景一按实例名停止Stop Instances By Name这是最基础的用法通过AZURE_INSTANCE_NAMES传入逗号分隔的实例名列表配合RESOURCE_GROUP指定资源组。完整示例见 azure-instance.yaml## contains the azure instance details apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: name: engine-nginx spec: engineState: active annotationCheck: false chaosServiceAccount: azure-instance-stop-sa experiments: - name: azure-instance-stop spec: components: env: # comma separated list of azure instance names - name: AZURE_INSTANCE_NAMES value: instance-01,instance-02 # name of the resource group - name: RESOURCE_GROUP value: resource group of AZURE_INSTANCE_NAME - name: TOTAL_CHAOS_DURATION value: 60要点解析engineState: active表示 ChaosEngine 处于激活状态可以被 Operator 即时接管执行annotationCheck: false关闭对应用注解的检查实验不依赖目标应用的litmuschaos.io/chaos: true注解chaosServiceAccount指向上一节创建的azure-instance-stop-sa该场景未设置SCALE_SET按默认disable处理即目标为普通 Azure VM。场景二停止 Scale Set / AKS 节点实例当目标实例属于Scale Set 或 AKS 节点时必须将SCALE_SET置为enable。完整示例见 azure-scale-set-instance.yaml## contains the azure instance details for scale set instances or AKS nodes apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: name: engine-nginx spec: engineState: active annotationCheck: false chaosServiceAccount: azure-instance-stop-sa experiments: - name: azure-instance-stop spec: components: env: # comma separated list of azure instance names - name: AZURE_INSTANCE_NAMES value: instance-01,instance-02 # name of the resource group - name: RESOURCE_GROUP value: resource group of Scale set # accepts enable/disable value. default is disable - name: SCALE_SET value: enable - name: TOTAL_CHAOS_DURATION value: 60在 AKS 场景下RESOURCE_GROUP应填写Scale Set 所属的资源组通常是MC_资源组名_集群名_区域形式的节点资源组实例名填写 Scale Set 中的实例名。此场景可用于验证节点停机后 Pod 的重调度、节点池自愈以及工作负载在临时节点缺失场景下的表现。场景三多轮迭代混沌Multiple Iterations of Chaos通过CHAOS_INTERVAL控制每两轮停机之间的延迟实现停机-恢复-再停机的多轮循环注入。完整示例见 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: azure-instance-stop-sa experiments: - name: azure-instance-stop spec: components: env: # delay between each iteration of chaos - name: CHAOS_INTERVAL value: 10 # time duration for the chaos execution - name: TOTAL_CHAOS_DURATION value: 60 - name: AZURE_INSTANCE_NAMES value: instance-01,instance-02 - name: RESOURCE_GROUP value: resource group of AZURE_INSTANCE_NAME该配置将混沌总时长设为 60s、迭代间隔设为 10s意味着在 60s 内会反复执行多次停机→等待→启动循环适合模拟周期性实例重启或验证应用在多次恢复后的稳定性与数据一致性。实验执行原理与结果验证结合流程图与文档说明azure-instance-stop的底层行为可以归纳为停机注入 时长循环 探针校验三部分注入动作实验通过 Azure GO SDK文件认证对目标实例执行 PowerOff混沌间隔结束或迭代条件满足后再执行 Start 操作恢复实例循环控制TOTAL_CHAOS_DURATION是总时长上限CHAOS_INTERVAL是相邻注入间隔二者共同决定注入轮次SEQUENCE决定多实例是同时注入parallel还是逐个注入serial结果校验实验结束后执行探针评估与混沌后检查通过则 ChaosResult 的verdict为PASS否则为FAIL。ChaosResult 名称可使用INSTANCE_ID追加后缀以区分多次运行。运行实验前建议确认实验命名空间存在cloud-secret类型的认证 Secret、azure-instance-stopChaosExperiment 资源已安装、目标实例处于健康状态并且 ChaosEngine 使用的 ServiceAccount 具备前文 RBAC 中的全部权限。若你在 ChaosCenter 中构建 Workflow则可直接复用其预置的litmus-adminRBAC无需单独创建最小权限账户。赞分享云原生运维可观测性【免费下载链接】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 混沌工程实战使用 ec2-stop-by-id 实验按实例 ID 停止并恢复 AWS EC2 实例Litmus 混沌工程实战使用 ec2 stop by id 实验按实例 ID 停止并恢复 AWS EC2 实例 导读 ec2 stop by id 是 Li云原生运维可观测性Litmus 混沌工程之 Azure Disk Loss 故障实验虚拟磁盘分离与恢复实战指南Litmus 混沌工程之 Azure Disk Loss 故障实验虚拟磁盘分离与恢复实战指南 azure disk loss 是 Litmus 混沌工程套件中云原生运维可观测性Litmus 混沌实验指南使用 ec2-stop-by-tag 按标签停止并恢复 AWS EC2 实例Litmus 混沌实验指南使用 ec2 stop by tag 按标签停止并恢复 AWS EC2 实例 导读 ec2 stop by tag 是 Litmus云原生运维可观测性上一篇ClawX 默认 Provider 自动接管删除默认模型提供商后的兜底设计原理与实现下一篇TypeGraphQL订阅消息传输协议WebSocket vs HTTP/2创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考