使用 Google Container Engine (GKE) 和 Stackdriver 监控和提醒 Pod 状态或重启

Posted

技术标签:

【中文标题】使用 Google Container Engine (GKE) 和 Stackdriver 监控和提醒 Pod 状态或重启【英文标题】:Monitoring and alerting on pod status or restart with Google Container Engine (GKE) and Stackdriver 【发布时间】:2017-10-03 00:15:15 【问题描述】:

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

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

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

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

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

【问题讨论】:

我也在研究一个类似的解决方案.. 目前我没有找到很多关于你的要求和其他可能有趣的类似指标.. 如果我有一些更新,我会告诉你的! 同意这是 GKE / Stackdriver 堆栈中的一个明显漏洞。非常惊讶的是,我找不到一种方法来设置关于 pod 何时重新启动或被驱逐,或者何时添加部署等的警报。可能最终会编写我自己的基于 python 的守护程序来执行此操作。 (使用这个:github.com/kubernetes-client/python) 【参考方案1】:

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

Metric: kubernetes.io/container/restart_count
Resource type: k8s_container

【讨论】:

现在应该是这个方法! 自发表此评论以来发生了一些变化。现在,警报通常会针对正在终止的 pod 触发。通过state=ACTIVE 添加过滤器以避免这种情况,并且仅在活动的 pod 中重新启动容器时收到警报。【参考方案2】:

您可以通过以下方式手动实现此目的:

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

    resource.labels.project_id="<PROJECT_ID>"
    resource.labels.cluster_name="<CLUSTER_NAME>"
    resource.labels.namespace_name="<NAMESPACE, or default>"
    jsonPayload.message:"failed liveness probe"
    

    通过单击过滤器输入上方的“创建指标”按钮并填写详细信息来创建指标。

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

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

【讨论】:

对于您可能想要的有效负载(“Killing container”和“Container failed liveness probe”),否则您将在负载减少时匹配自动缩放器终止 pod。 你知道如何根据这种方法自动解决警报吗? 现在好像是“Container product failed liveness probe, will be restarted” 您也应该过滤资源,否则您的指标将扫描集群命名空间resource.type="k8s_pod"上的每条日志消息@ 我还发现在容器名称上添加度量标签很有用,因为按临时 pod 名称分组并不是那么有用。字段:jsonPayload.message 正则表达式:容器 ([^\s\]*)【参考方案3】:

请记住,如果可用选项不够,您可以随时提出feature request。

【讨论】:

【参考方案4】:

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

【讨论】:

我刚刚在我的开发集群上安装了 kube-state-metrics,但缺少此统计信息。实际上,似乎没有其他有用的关于 Pod 状态的统计信息可用。在返回的 12k 指标中看不到“restart”、“terminate”、“evict”、“image”或“backoff”这些词。 :facepalm: 奇怪,我可以在 repo 中看到重启指标。 github.com/kubernetes/kube-state-metrics/blob/…

以上是关于使用 Google Container Engine (GKE) 和 Stackdriver 监控和提醒 Pod 状态或重启的主要内容,如果未能解决你的问题,请参考以下文章

使用 Go 在 Google Container/Compute Engine 中登录到 Google Cloud

地形 | GCP | google_container_node_pool |节点计数

ImportError:没有名为 google_compute_engine 的模块

如何将 Google Cloud Run Container 连接到 Open***?

使用 Google Container Engine (GKE) 和 Stackdriver 监控和提醒 Pod 状态或重启

Google的Container OS可以与Compute Engine上的gRPC一起使用吗?