通过开启容器服务报警管理功能,可以统一管理容器的报警,包括容器服务异常事件报警、集群相关基础资源的关键指标报警、集群核心组件及集群中应用的指标报警等。还可以通过CRD方式修改集群中默认创建的报警规则,及时感知集群中异常变化。
计费说明
报警功能的数据来源是通过日志服务SLS、可观测监控 Prometheus 版和云监控,触发报警后发送的短信、电话等通知会产生额外费用。在开启报警功能之前,可根据默认报警规则模板确认每个报警项的来源,并开通所需的服务。
发送报警源 | 配置要求 | 计费详情 |
日志服务SLS | 开启事件监控;启用报警管理功能时,事件监控会默认开启。 | |
可观测监控 Prometheus 版 | 为集群配置使用阿里云Prometheus监控。 | |
云监控 |
开启报警管理功能
开启报警管理功能后,可以为集群内指定的资源设置指标报警,并在异常情况发生时自动接收告警通知,以便更高效地管理和维护集群,确保服务的稳定运行。相关资源报警详情请参见默认报警规则模板。
ACK托管集群
选择已有集群开启报警配置,或创建新集群时启用报警配置。
已有集群中开启
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在报警配置页面,按照页面指引进行组件的安装或升级。
安装升级完成后,进入报警配置页面配置报警信息。
页签
说明
报警规则管理
启动状态:用于打开或关闭目标报警规则集。
编辑通知对象:设置报警通知的联系人分组。
设置前,需先创建联系人和分组,并将联系人加入分组。通知对象仅支持联系人分组,如需通知单人,可将该联系人单独建组后选择该分组。
报警历史
目前可查看最近1天内发送的最新100条历史记录。
单击报警规则列下的链接,可以跳转到对应监控系统中查看详细规则配置。
单击排查现场,可以快速定位到异常发生的资源页面(异常事件、指标异常的资源)。
单击智能分析,可通过计算 AI 助手协助分析问题并提供处理指导。
联系人管理
对联系人进行管理,可创建、编辑或删除联系人。
联系方式:
电话/短信:设置联系人的手机号码后,可以通过电话和短信的方式接收告警通知。
仅验证过的手机号码可以在通知策略中使用电话的通知方式,验证手机号的操作,请参见验证手机号。
邮箱:设置联系人的邮箱地址后,可以通过邮箱接收告警通知。
钉钉机器人需要追加安全关键字: 报警、分派。
邮箱和机器人设置前,可以先在云监控控制台中 验证,以便接收报警信息。
联系人分组管理
对联系人分组进行管理,可创建、编辑或删除联系人分组。编辑通知对象仅支持选择联系人分组。
当无联系人分组时,控制台会在阿里云账号注册信息中同步创建一个默认联系人分组。
创建集群时开启
在创建集群的组件配置页面,勾选报警配置右侧使用默认报警模板配置报警,并选择报警通知联系人分组。具体操作,请参见创建ACK托管集群。
创建集群时开启报警配置后,系统将会开启默认报警规则,并默认发送报警通知到默认的联系人分组,也可自定义修改报警联系人或报警联系组。
ACK专有集群
ACK专有集群需要先为Worker RAM角色授权,再开启默认报警规则。
为Worker RAM角色授权
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择集群信息。
在集群信息页面,在集群资源区域,复制Worker RAM角色右侧的名称,并单击链接进入RAM访问控制控制台为该Worker RAM角色授权。
创建如下自定义权限策略。请参见通过脚本编辑模式创建自定义权限策略。
{ "Action": [ "log:*", "arms:*", "cms:*", "cs:UpdateContactGroup" ], "Resource": [ "*" ], "Effect": "Allow" }
在角色页面,搜索定位该Worker RAM角色,为其授予以上创建的自定义权限策略。具体操作,请参见方式一:在RAM角色页面为RAM角色授权。
说明:为简化操作,本文档授予了较宽泛的权限。在生产环境中,建议您遵循最小权限原则,仅授予必要的权限。
在角色页面,搜索定位该Worker RAM角色,为其授予以上创建的自定义权限策略。具体操作,请参见方式一:在RAM角色页面为RAM角色授权。
通过日志查看报警功能访问权限是否已配置。
在目标集群管理页左侧导航栏,选择 。
选择命名空间为kube-system,单击无状态应用列表中alicloud-monitor-controller的名称链接。
单击日志页签,可看到授权成功的Pod日志。
开启默认报警配置规则
在目标集群页左侧导航栏,选择运维管理 > 报警配置。
在报警配置页面,配置如下报警信息。
页签
说明
报警规则管理
启动状态:用于打开或关闭目标报警规则集。
编辑通知对象:设置报警通知的联系人分组。
设置前,需先创建联系人和分组,并将联系人加入分组。通知对象仅支持联系人分组,如需通知单人,可将该联系人单独建组后选择该分组。
报警历史
目前可查看最近1天内发送的最新100条历史记录。
单击报警规则列下的链接,可以跳转到对应监控系统中查看详细规则配置。
单击排查现场,可以快速定位到异常发生的资源页面(异常事件、指标异常的资源)。
单击智能分析,可通过计算 AI 助手协助分析问题并提供处理指导。
联系人管理
对联系人进行管理,可创建、编辑或删除联系人。
联系方式:
电话/短信:设置联系人的手机号码后,可以通过电话和短信的方式接收告警通知。
仅验证过的手机号码可以在通知策略中使用电话的通知方式,验证手机号的操作,请参见验证手机号。
邮箱:设置联系人的邮箱地址后,可以通过邮箱接收告警通知。
钉钉机器人需要追加安全关键字: 报警、分派。
邮箱和机器人设置前,可以先在云监控控制台中 验证,以便接收报警信息。
联系人分组管理
对联系人分组进行管理,可创建、编辑或删除联系人分组。编辑通知对象仅支持选择联系人分组。
当无联系人分组时,控制台会在阿里云账号注册信息中同步创建一个默认联系人分组。
配置报警规则
报警配置功能开启后,默认会在kube-system命名空间下创建一个名为AckAlertRule类型的CRD资源配置,包含默认报警规则模板。可通过修改此CRD资源来修改默认报警规则,以配置符合要求的容器服务报警规则。
控制台
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在报警规则管理页签,单击右上角编辑报警配置,然后单击目标规则列右侧操作列下的YAML,即可查看当前集群中的AckAlertRule资源配置。
可参考默认报警规则模板说明,根据实际需求修改 YAML 文件内容。
报警规则配置 YAML 示例如下:
rules.thresholds
(参数见下表)可自定义报警阈值。例如上述示例配置:当集群节点 CPU 使用率超过 85%,连续 3 次达到阈值,且距离上一次报警已超过 900 秒时,将触发报警通知。参数名
是否必选
说明
默认值
CMS_ESCALATIONS_CRITICAL_Threshold
必选
报警配置阈值。未配置时规则将同步失败并关闭。
unit
:表示单位,可配置为percent、count或qps。value
:阈值。
根据默认报警模板配置而定。
CMS_ESCALATIONS_CRITICAL_Times
可选
云监控规则重试判断次数。未配置时取默认值。
3
CMS_RULE_SILENCE_SEC
可选
云监控持续发送异常触发规则时,初次上报报警后静默期时长(单位:秒),防止过于频繁报警。未配置时取默认值。
900
kubectl
使用以下命令编辑报警规则的 YAML 文件。
kubectl edit ackalertrules default -n kube-system
可参考默认报警规则模板说明,根据实际需求修改 YAML 文件内容,编辑完成后保存并退出即可。
通过
rules.thresholds
,可灵活自定义报警阈值。例如上述示例配置:当集群节点 CPU 使用率超过 85%,连续 3 次达到阈值,且距离上一次报警已超过 900 秒时,将触发报警通知。参数名
是否必选
说明
默认值
CMS_ESCALATIONS_CRITICAL_Threshold
必选
报警配置阈值。未配置时规则将同步失败并关闭。
unit
:表示单位,可配置为percent、count或qps。value
:阈值。
根据默认报警模板配置而定。
CMS_ESCALATIONS_CRITICAL_Times
可选
云监控规则重试判断次数。未配置时取默认值。
3
CMS_RULE_SILENCE_SEC
可选
云监控持续发送异常触发规则时,初次上报报警后静默期时长(单位:秒),防止过于频繁报警。未配置时取默认值。
900
默认报警规则模板
以下报警项同步自日志服务 SLS、阿里云 Prometheus 和云监控,可在报警配置页面,目标报警项的报警管理列下的高级设置查看各自的报警规则配置。
报警处理指导
节点磁盘达到阈值触发 Pod 驱逐(Evicted)
报警信息
(combined from similar events): Failed to garbage collect required amount of images. Attempted to free XXXX bytes, but only found 0 bytes eligible to free
问题现象
Pod 状态显示为 Evicted。Node 节点出现磁盘压力(The node had condition: [DiskPressure].
)
报警原因
节点磁盘空间使用达到驱逐阈值(默认 85%),默认kubelet会进行压力驱逐,GC回收一些无用的镜像文件,导致 Pod 被驱逐(Evicted)。可以登录目标节点,通过df -h
命令查看磁盘使用情况。
解决方案
登录目标节点(containerd runtime环境),使用如下命令清理无用容器镜像,释放磁盘空间。k
crictl rmi --prune
清理日志或扩容节点磁盘
对目标节点数据盘/云盘进行快照备份,备份完成后,结合业务情况判断,删除不再需要的文件或目录。详情请参见解决Linux实例磁盘空间满问题。
对目标节点在线扩容系统盘或数据盘以提升存储能力。具体操作参考扩容节点系统盘或数据盘。
调整相关阈值。
根据实际业务需求调整 kubelet 的镜像回收(garbage collection)阈值,以减少节点因磁盘占用过高导致的 Pod 驱逐。具体操作请参见自定义节点池kubelet配置。
节点磁盘使用率达到或超过 85% 时,将收到相关报警。可根据实际业务需求,通过配置报警规则,在 YAML 配置中的
node_disk_util_high
报警规则项修改告警阈值。
建议与预防措施
对于频繁出现该类问题的节点,建议评估应用实际存储需求,合理规划资源申请和节点磁盘容量。
建议定期关注存储使用监控,及时发现并处理潜在风险。详情请参见节点存储监控大盘。
Pod OOMKilling
报警信息
pod was OOM killed. node:xxx pod:xxx namespace:xxx uuid:xxx
问题现象
Pod状态异常,且事件内容中出现PodOOMKilling
。
解决方案
OOM 触发位置分为节点级和容器CGroup级。
原因说明:
容器CGroup级OOM:Pod实际内存使用超过为其设置的memory limits,被 Kubernetes cgroup 限制强制终止。
节点级OOM:通常发生在节点上运行了过多未设置资源限制(requests/limits)的Pod,或者某些进程(可能是非Kubernetes管理的进程)消耗了大量内存。
判断方法:登录目标节点,执行命令
dmesg -T | grep -i "memory"
,输出内容中出现类似out_of_memory
即表示发生过OOM,如日志输出伴随出现Memory cgroup
即为容器CGroup级OOM,否则为节点级OOM。处理建议:
容器CGroup级OOM:
根据业务需求适当提升 Pod 的memory limits,建议实际用量不超过 limits 的 80%。相关操作,请参见管理容器组(Pod)、升降配节点资源。
启用资源画像,获得容器requests/limits的推荐配置。
节点级OOM:
更多OOM现象出现的原因及解决方案,请参见出现OOM Killer的原因及解决方案。
Pod状态为CrashLoopBackOff
当Pod内进程非预期退出,ACK会尝试重启此Pod,多次重启后均无法达到终态即会表示为 CrashLoopBackOff状态。排查路径如下: