本页面介绍了如何解决 Google Kubernetes Engine (GKE) 集群上的系统指标相关问题。
如果您需要其他帮助,请与 Cloud Customer Care 联系。集群中的指标未显示在 Cloud Monitoring 中
确保您已在项目中启用 Monitoring API 和 Logging API。您还应确认自己能够在 Google Cloud 控制台中的 Cloud Monitoring 概览中查看项目。
如果问题仍然存在,请检查是否有以下现象:
您是否已在集群上启用监控?
对于从 Google Cloud 控制台以及从 Google Cloud CLI 创建的集群,默认启用监控,但您可以运行以下命令或点击 Google Cloud 控制台中的集群详细信息进行验证:
gcloud container clusters describe CLUSTER_NAME
此命令的输出应包含
monitoringConfig
部分的enableComponents
列表中的SYSTEM_COMPONENTS
,类似于以下示例:monitoringConfig: componentConfig: enableComponents: - SYSTEM_COMPONENTS
如果未启用监控,请运行以下命令启用:
gcloud container clusters update CLUSTER_NAME --monitoring=SYSTEM
自创建集群或启用其监控功能以来已经有多长时间了?
新集群的指标最多可能需要一个小时才能开始显示在 Cloud Monitoring 中。
heapster
或gke-metrics-agent
(OpenTelemetry 收集器)是否正在kube-system
命名空间中的集群中运行?此 Pod 可能无法调度工作负载,因为您的集群没有足够资源。通过运行
kubectl get pods --namespace=kube-system
并检查名称中带有heapster
或gke-metrics-agent
的 Pod,检查 Heapster 或 OpenTelemetry 是否正在运行。集群的控制层面是否能够与节点通信?
Cloud Monitoring 依赖于这种通信。您可以通过运行以下命令来检查控制平面是否正在与节点通信:
kubectl logs POD_NAME
如果此命令返回错误,则问题可能是 SSH 隧道导致的。如需查看问题排查步骤,请参阅排查 SSH 问题。
确认指标代理具有足够的内存
如果您已尝试上述问题排查步骤,但指标仍未显示,则表示指标代理的内存不足。
在大多数情况下,默认向 GKE 指标代理分配的资源是足够的。但是,如果 DaemonSet 反复崩溃,您可以按照以下说明检查终止原因:
获取 GKE 指标代理 Pod 的名称:
kubectl get pods -n kube-system -l component=gke-metrics-agent
查找状态为
CrashLoopBackOff
的 Pod。输出类似于以下内容:
NAME READY STATUS RESTARTS AGE gke-metrics-agent-5857x 0/1 CrashLoopBackOff 6 12m
描述状态为
CrashLoopBackOff
的 Pod:kubectl describe pod POD_NAME -n kube-system
将
POD_NAME
替换为上一步中 Pod 的名称。如果 Pod 的终止原因为
OOMKilled
,则代理需要额外的内存。输出类似于以下内容:
containerStatuses: ... lastState: terminated: ... exitCode: 1 finishedAt: "2021-11-22T23:36:32Z" reason: OOMKilled startedAt: "2021-11-22T23:35:54Z"
向具有失败指标代理的节点添加节点标签。您可以使用永久性节点标签,也可以使用临时节点标签。 我们建议您尝试再增加 20 MB。如果代理不断崩溃,您可以再次运行此命令,注意将节点标签替换为请求更多内存的标签。
如需使用永久性标签更新节点池,请运行以下命令:
gcloud container node-pools update NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --node-labels=ADDITIONAL_MEMORY_NODE_LABEL \ --location=COMPUTE_LOCATION
请替换以下内容:
NODEPOOL_NAME
:节点池的名称。CLUSTER_NAME
:现有集群的名称。ADDITIONAL_MEMORY_NODE_LABEL
:其中一个额外内存节点标签;请使用以下任一项:- 添加 10 MB:
cloud.google.com/gke-metrics-agent-scaling-level=10
- 添加 20 MB:
cloud.google.com/gke-metrics-agent-scaling-level=20
- 添加 50 MB:
cloud.google.com/gke-metrics-agent-scaling-level=50
- 添加 100 MB:
cloud.google.com/gke-metrics-agent-scaling-level=100
- 添加 200 MB:
cloud.google.com/gke-metrics-agent-scaling-level=200
- 添加 500 MB:
cloud.google.com/gke-metrics-agent-scaling-level=500
- 添加 10 MB:
COMPUTE_LOCATION
:集群的 Compute Engine 位置。
或者,您也可以使用以下命令添加升级后不会保留的临时节点标签:
kubectl label node/NODE_NAME \ ADDITIONAL_MEMORY_NODE_LABEL --overwrite
替换以下内容:
NODE_NAME
:受影响的指标代理的节点名称。ADDITIONAL_MEMORY_NODE_LABEL
:其中一个额外内存节点标签;请使用上述示例中的一个值。
后续步骤
如果您遇到与 Cloud Logging 代理相关的问题,请参阅其问题排查文档。
- 如果您需要其他帮助,请与 Cloud Customer Care 联系。