23

有没有办法使用 Stackdriver 监控 GKE 集群中运行的 pod 状态和重启次数?

虽然我可以在 Stackdriver 中查看所有 pod 的 CPU、内存和磁盘使用指标,但似乎无法获取有关崩溃 pod 或副本集中的 pod 因崩溃而重新启动的指标。

我正在使用 Kubernetes 副本集来管理 pod,因此它们在崩溃时会重新生成并使用新名称创建。据我所知,Stackdriver 中的指标由 pod-name 显示(这在 pod 的生命周期中是唯一的),这听起来并不明智。

对 pod 故障发出警报听起来是一件很自然的事情,以至于听起来很难相信目前不支持此功能。我从 Stackdriver for Google Container Engine 获得的监控和警报功能似乎没什么用,因为它们都绑定到生命周期可能非常短的 Pod。

因此,如果这不能开箱即用,是否有已知的解决方法或最佳实践来监控持续崩溃的 pod?

4

5 回答 5

6

现在有一个内置指标,因此无需设置自定义指标即可轻松控制仪表板和/或发出警报

Metric: kubernetes.io/container/restart_count
Resource type: k8s_container
于 2020-12-01T22:23:16.450 回答
5

您可以使用以下方法手动实现此目的:

  1. 在日志查看器中,创建以下过滤器:

    resource.labels.project_id="<PROJECT_ID>"
    resource.labels.cluster_name="<CLUSTER_NAME>"
    resource.labels.namespace_name="<NAMESPACE, or default>"
    jsonPayload.message:"failed liveness probe"
    
  2. 通过单击过滤器输入上方的创建指标按钮并填写详细信息来创建指标。

  3. 您现在可以在 Stackdriver 中跟踪此指标。

很高兴被告知内置指标而不是这个。

于 2019-01-04T06:31:15.327 回答
4

在我的集群(一个裸机 k8s 集群)中,我使用 kube-state-metrics https://github.com/kubernetes/kube-state-metrics来做你想做的事。这个项目属于 kubernetes repo,非常好用。部署后,您可以使用 kube_pod_container_status_restarts 这个指标来了解容器是否重新启动

于 2017-07-11T03:57:46.467 回答
0

其他人评论了如何使用指标来做到这一点,如果您有大量崩溃的 pod,这是正确的解决方案。

另一种方法是将崩溃的 pod 视为离散事件甚至日志行。您可以使用 YAML 使用Robusta(免责声明,我写了这个)来做到这一点,如下所示:

triggers:
  - on_pod_update: {}
actions:
  - restart_loop_reporter:
      restart_reason: CrashLoopBackOff
  - image_pull_backoff_reporter:
      rate_limit: 3600
sinks:
  - slack

在这里,我们将触发一个名为restart_loop_reporter每当 pod 更新时的操作。数据流来自 APIServer。

restart_loop_reporter是一个过滤掉非崩溃 pod 的动作。上面它被配置为仅报告,CrashLoopBackOffs但您可以删除它以报告所有崩溃。

这样做的好处是您可以自动收集有关崩溃的额外数据。例如,上面将获取 pod 的日志并将它们与崩溃报告一起转发。

我将结果发送到 Slack,但您也可以将其发送到结构化输出,如 Kafka(已内置)或 Stackdriver(尚不支持,但如果您愿意,我可以修复)。

于 2021-12-30T00:48:10.347 回答
-1

请记住,如果可用选项不够,您可以随时提出功能请求。

于 2020-07-29T01:28:00.630 回答