本文介绍如何使用混沌工程进行Pod OOM(Out of Memory)故障演练。

前提条件

警告 开启混沌工程前请充分评估影响范围,避免使用混沌工程对您的业务造成影响,建议在测试环境上验证后,再应用到生产环境上。

演练目的

  • 熟悉Pod异常场景下的报警、诊断方法和SOP处理流程。
  • 熟悉应用接入AHAS及AHAS产品的基本操作流程。

步骤一:配置集群报警信息

选择状态为运行中的集群为演练对象,以ACK专有版集群为例说明。

  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,单击集群
  3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
  4. 在集群管理页左侧导航栏中,选择运维管理 > 报警配置
    说明 首次登录需根据页面提示进行安装,若显示组件未升级,需单击开始升级完成升级后,进入报警配置页面。
  5. 报警配置页面,按照以下步骤完成联系人创建和联系人分组创建。
    1. 单击联系人管理页签,然后单击创建
    2. 创建联系人页面,输入姓名电话邮箱。然后单击确定
      联系人创建完成后,您将会收到验证激活短信或验证激活邮件,请按相应提示进行激活操作。
    3. 单击联系人分组管理页签,然后单击创建
    4. 创建分组页面,输入分组名称,然后选择分组联系人,最后单击确定
      选择分组联系人时,将可选联系人添加到已选联系人列表,也可移除已选联系人。创建分组
  6. 报警配置页面,单击报警规则管理页签。
    1. 集群容器副本异常报警规则集启动状态设置为开启。
      报警规则集合容器场景的监控报警能力,提供报警的统一配置管理。此处以集群容器副本异常报警规则集为例,更多报警配置,请参考容器服务报警管理
    2. 单击编辑通知对象,添加需要接收此报警规则集的联系人分组。

步骤二:为演练集群接入应用

您需要执行以下步骤为目标演练集群部署所需的应用。

创建应用

  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,单击集群
  3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
  4. 在集群管理页左侧导航栏中,选择工作负载 > 无状态
  5. 无状态页面顶部,选择命名空间为default,然后单击使用镜像创建
  6. 应用基本信息配置向导中,设置应用的基本信息。然后单击下一步
    本例应用名称设置为nginx
  7. 容器配置配置向导中,输入镜像名称镜像Tag资源限制。然后单击下一步
    本次使用的nginx应用配置的CPU限额为1 Core,内存限制额为1024 MiB
  8. 高级配置配置向导中,找到标签和注解区域,单击Pod标签后的添加。标签添加完成后,单击下方创建
    • 输入第一个Pod标签的名称ahas.aliyun/app-instancenginx-app
    • 输入第二个Pod标签的名称ahas.aliyun/app-groupnginx-group
    添加Pod标签
  9. 创建完成页面,单击查看应用详情
    • nginx页面的容器组页签下可看到nginx应用正常运行。正常运行
    • nginx页面右上角,单击查看Yaml,可看到无状态应用nginx的YAML配置中看到相应标签。YAML文件

部署探针

在执行演练前,需要为目标集群安装AHAS的探针,对应组件ack-ahas-pilot安装操作如下:

  1. 在控制台左侧导航栏中选择市场 > 应用市场
  2. 应用市场页面单击应用目录页签,然后搜索并单击ack-ahas-pilot
  3. ack-ahas-pilot页面,单击一键部署
  4. 在弹出页面中,选择集群和命名空间,然后单击下一步
    说明 命名空间和发布名称默认为ahas
  5. 在参数配置页面,单击确定

查看部署结果

  1. 在集群管理页左侧导航栏中,选择工作负载 > 无状态
  2. 无状态页面顶部,选择命名空间ahas,可看到如下应用正常运行。
    无状态应用

步骤三:实施演练

配置演练

  1. 登录AHAS控制台
  2. 在顶部菜单栏,选择与演练集群相同的地域。
  3. 在控制台左侧导航栏中选择故障演练 > 我的空间
  4. 我的空间页面,选择新建演练 > 新建空白演练进入演练配置页面。
    新建演练
  5. 演练配置页面,输入演练基本信息完成演练基本配置。
    界面配置如下图所示。演练配置
  6. 演练配置页面,单击配置页签配置演练分组信息,然后单击添加演练内容
    界面配置如下图所示。演练配置
    说明
    • 演练应用:在下拉框中搜索并选中nginx-app。此处为步骤8中创建的ahas.aliyun/app-instance的值,本文的值为nginx-app
    • 应用分组:在下拉框中搜索并选中nginx-group。此处为步骤8中创建的ahas.aliyun/app-group的值,本文的值为nginx-group
    • 机器列表nginx应用创建成功后,会有对应的机器列表项供选择。
  7. 在弹出的选择演练故障页面,选择内存资源 > 容器内内存负载,然后单击确定
    容器内存
  8. 配置页面的演练内容区域,单击容器内内存负载,选择目标容器名称nginx,单击保存,然后单击下一步
    说明 保存操作完成后,下一步才能变成激活可单击状态。
    内存
  9. 根据页面提示,继续单击下一步,弹出演练成功页面,然后单击演练详情进入刚创建的演练详情页面。
    您可以在演练详情页面执行演练操作。

执行演练

  1. 在演练详情页面,单击配置页签,然后单击演练
    说明 若未购买资源包或资源包不足,请根据提示完成资源包的购买,才能继续执行演练操作。
  2. 在弹出框中单击确认进入如下演练执行页面。
    执行演练
    说明 演练开始后,可通过监控查看目标容器的内存资源耗尽,出现OOM事件和报警;停止演练后,目标容器会自动恢复。

查看演练状态

演练开始后,可通过以下方式监控查看目标容器的内存资源已被耗尽,出现OOM事件和报警;停止演练后,目标容器会自动恢复。

  1. 查看Pod内存使用情况。
    1. 登录容器服务管理控制台
    2. 在控制台左侧导航栏中,单击集群
    3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
    4. 在集群管理页左侧导航栏中,选择运维管理 > Prometheus监控
    5. Prometheus监控页面,单击集群监控概览页签,然后单击Pods memory usage查看对应监控大盘。
      在监控大盘右侧,选中正在演练的Pod,可以查看Pod的内存监控曲线,观察Pod的内存资源是否耗尽。监控
  2. 查看容器组事件。
    1. 在集群管理页左侧导航栏中,选择工作负载 > 容器组
    2. 容器组页面中,在顶部选择对应命名空间,单击目标Pod名称或者目标Pod右侧操作列下的详情
    3. 在Pod详情页面中,单击下方事件页签可查看Pod的事件信息。
      出现OOM异常时,可在事件页签中看到包含pod was OOM killed信息的OOM事件。
  3. 查看报警信息。
    1. 在集群管理页左侧导航栏中,选择运维管理 > 报警配置,然后单击报警历史
      报警历史页签中可看到包含OOM killed关键字的报警记录。
    2. 查看报警短信或邮件。
      若您配置了报警联系人的电话及邮箱,可收到相应的报警短信和邮件;如您能成功接收报警信息,说明此次演练验证成功。
  4. 查看SOP处理手册处理对应的报警问题。
    关于Pod OOM报警的SOP处理方法,请参见Pod异常问题排查