当 docker 容器 pod 处于 Error 或 CarshLoopBackOff kubernetes 时发出警报
Posted
技术标签:
【中文标题】当 docker 容器 pod 处于 Error 或 CarshLoopBackOff kubernetes 时发出警报【英文标题】:Alert when docker container pod is in Error or CarshLoopBackOff kubernetes 【发布时间】:2018-09-03 11:18:40 【问题描述】:我在 AWS 上设置了我的 kubernetes 集群,我尝试使用 cAdvisor + Prometheus + Alert manager 监控多个 pod。如果容器/pod 出现故障或卡在 Error 或 CarshLoopBackOff 状态或 stcuk 处于运行之外的任何其他状态,我想要做的是启动电子邮件警报(带有服务/容器名称)。
【问题讨论】:
【参考方案1】:我正在使用这个:
- alert: PodCrashLooping
annotations:
description: Pod $labels.namespace / $labels.pod ( $labels.container ) is restarting printf "%.2f" $value times / 5 minutes.
summary: Pod is crash looping.
expr: rate(kube_pod_container_status_restarts_totaljob="kube-state-metrics",namespace=~".*"[5m]) * 60 * 5 > 0
for: 5m
labels:
severity: critical
【讨论】:
【参考方案2】:普罗米修斯收集a wide range of metrics。例如,您可以使用指标 kube_pod_container_status_restarts_total
来监控重启,这将反映您的问题。
它包含您可以在警报中使用的标签:
容器=container-name
命名空间=pod-namespace
吊舱=pod-name
因此,您需要做的就是通过添加正确的 SMTP 设置、接收器和类似的规则来配置您的 alertmanager.yaml
config:
global:
# The smarthost and SMTP sender used for mail notifications.
smtp_smarthost: 'localhost:25'
smtp_from: 'alertmanager@example.org'
smtp_auth_username: 'alertmanager'
smtp_auth_password: 'password'
receivers:
- name: 'team-X-mails'
email_configs:
- to: 'team-X+alerts@example.org'
# Only one default receiver
route:
receiver: team-X-mails
# Example group with one alert
groups:
- name: example-alert
rules:
# Alert about restarts
- alert: RestartAlerts
expr: count(kube_pod_container_status_restarts_total) by (pod-name) > 5
for: 10m
annotations:
summary: "More than 5 restarts in pod $labels.pod-name "
description: " $labels.container-name restarted (current value: $value s) times in pod $labels.pod-namespace / $labels.pod-name "
【讨论】:
您的意思是,如果一个 pod 卡在 Crashloopbackoff 中,这意味着它将重新启动多个以从“Crashloopbackoff”状态中恢复?还有如何监控 Prometheus pods(server,alertmanager) 本身是否卡在这个状态? 1.是的,这是该情况下的状态示例 -nfs-web-fdr9h 0/1 CrashLoopBackOff 8 16m
。因此,这里的 8 - 是重新启动的计数。 2. 是的,它会监控自己,因为它们也是 pod。但是,当然,Prometheus 和 Alertmanager 可以监视自己并在工作时发送警报。如果他们宕机了——谁会发送警报?:)
当我在 prometheus 数据库中运行 kube_pod_container_status_restarts_total 时,它给了我“没有数据”,但我已经杀死了 kube-dns pod 并重新创建了一个新的
不应该pod-name
而只是pod
? container-name
等也一样...?
难道“计数”不考虑重新启动 pod 的所有“EVER”事件吗? sum by (pod) (increase(kube_pod_container_status_restarts_total[5m])) > 2
会不会更好,因为它可能已经重新启动,但如果它恢复了 - 一切都很好。以上是关于当 docker 容器 pod 处于 Error 或 CarshLoopBackOff kubernetes 时发出警报的主要内容,如果未能解决你的问题,请参考以下文章
请教kubernetes部署问题,pod一直处于pending状态
Kubernetes pod 中的 Docker 容器无法通信
通过 Service 访问 Pod - 每天5分钟玩转 Docker 容器技术(136)