当 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 而只是podcontainer-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)

Spring Boot 控制器跨 docker pod 重定向

技术干货 | Docker 容器逃逸案例汇集

添加现有 PVC 后,Grafana Pod 处于 Init Error 状态