【问题标题】:Checking kubernetes pod CPU and memory without using third party tool在不使用第三方工具的情况下检查 kubernetes pod CPU 和内存
【发布时间】:2021-07-02 22:55:29
【问题描述】:

我遵循了此页面中的第一个可能的解决方案:Checking kubernetes pod CPU and memory

我试过命令:

kubectl exec pod_name -- /bin/bash

但它不起作用,因此我尝试了命令:

kubectl exec -n [namespace] [pod_name] -- cat test.log

我知道这一点,因为当我运行命令时:

kubectl 获取 pod --all-namespaces | grep [pod_name]

这是我看到的:

POD_NAME

但我收到此错误消息:

OCI runtime exec failed: exec failed: container_linux.go:349: starting container process caused "exec: \"cat\": executable file not found in $PATH": unknown
command terminated with exit code 126

请告诉我如何解决这个问题?

##更新 用k9s工具也看不到CPU, MEM 完成的Pod,看不到CPU, MEM 完成的Pod正常吗?

k9s

【问题讨论】:

  • 你可以使用 kubectl 命令 - kubectl top pods -n %namespace%
  • @shuti 你用的是什么容器镜像?
  • 非常感谢您的回复@matt_j 事实上,我们的 kubernetes pod 托管了我们自己的应用程序平台,该平台在这个 pod 上运行模拟。我不确定我是否正确回答了你的问题。我们想检查通过此命令行完成运行的 pod 的 CPU 和 MEM,但出现错误。我看到了文档,它说选项container_name 是可选的? kubernetes.io/docs/tasks/debug-application-cluster/…
  • 感谢@Amit Baranes 的回复。您的命令有效,但它只显示仍在运行的 pod,对于那些已完成运行(已完成状态)的 pod,我再也看不到它们了。

标签: kubernetes memory cpu


【解决方案1】:

您似乎想要检查 Completed 的 Pod 的内存和 CPU 使用情况。

我尝试了k9s工具,也看不到成品pod的CPU、MEM,看不到成品pod的CPU、MEM正常吗?

我注意到它已经在运行,但是使用这个命令 kubectl top pods -n %namespace% 我确实看到了 CPU 和 Running pod 的 MEM,但不是已经完成的那个。

标记为 Completed 的 Pod 不再运行(已终止),我们无法使用 kubectl exec 命令连接到它:

$ kubectl exec -it -n cronjob hello-1618235100-xwxkc -- bash
error: cannot exec into a container in a completed pod; current phase is Succeeded 

我们可以使用kubectl get -ojson 命令看到Pod phase

$ kubectl get pod hello-1618235100-xwxkc -n cronjob
NAME                     READY   STATUS      RESTARTS   AGE
hello-1618235100-xwxkc   0/1     Completed   0          6m11s

$ kubectl get pod hello-1618235100-xwxkc -n cronjob -ojson | grep -i phase
        "phase": "Succeeded",
   

可以在Pod phase 文档中找到:

Succeeded - Pod 中的所有容器都已成功终止,不会重新启动。

无法使用kubectl top 命令显示 Pod,因为指标服务器不存储指标历史记录(请参阅:Metrics Server documentation 文档):

只会记住每个指标的最新值。如果用户需要访问历史数据,他们应该使用 3rd 方监控解决方案或自行存档指标

例如,我使用 Prometheus + Grafana 并可以访问我的 Pod 的历史数据:

【讨论】:

  • 非常感谢@matt_j,这对我来说现在更清楚了。这就是为什么我也尝试在我身边配置 Prometheus/grafana,但因为我是 Prometheus 的新手。我必须先了解如何正确配置它。我现在通过 docker-compose 成功设置了它,并且能够制作小型 golang 应用程序来打印出 prometheus 理解的指标。现在,困难的部分是将其连接到 Kubernetes REST API 以获取 Kubernetes 指标。
  • 我现在正在看这篇文章:medium.com/kubernetes-tutorials/…prometheus.io/docs/prometheus/latest/configuration/… 但是,如果你已经这样做了,可以和我分享你的 github/gitlab 项目吗?
  • 我已经使用 Prometheus Operator 安装了 Prometheus。您可以使用 helm 安装它,请参阅 kube-prometheus-stack。如果您对 Prometheus/Grafana 有任何疑问,请考虑创建一个新的 Stack 问题,它将对社区的其他人更加可见。
  • 谢谢@matt_j 事实上,我通过 Terraform/Helm 配置的 Prometheus 似乎已经可以工作了,它似乎连接到了我的 Kubernetes 集群,但我还有其他问题,因此我在这里发布了一个新问题: stackoverflow.com/questions/67076100/…
【解决方案2】:

查看 pod 的 cpu 和内存使用情况最直接的方法是安装metrics server,然后使用kubectl top podskubectl top pod <pod-name>

metrics 服务器对集群的影响很小,它将帮助您监控集群。

您链接的 SO 帖子中的答案对我来说似乎是一个 hack,绝对不是监控 pod 资源使用情况的常用方法。

【讨论】:

  • 谢谢,我从您提供的链接中的自述文件中安装了指标服务器,但它并没有真正解释如何运行它。你知道我该如何运行它吗?
  • “运行它”是什么意思?如果您已经在集群中安装了指标服务器,那么它已经在运行。如果kubectl top pods 显示 pod 的资源使用情况,则指标服务器工作正常。
  • 您好,是的,我注意到它已经在运行,但是使用此命令kubectl top pods -n %namespace% 我确实看到了Running pod 的 CPU 和 MEM,但不是已经完成的那个。事实上,我现在可以看到正在运行的 Pod 的 CPU 和 MEM,但是对于已经完成的 Pod,我看不到 CPU 和 MEM 的消耗。我还尝试了另一个名为 k9s (github.com/derailed/k9s) 的工具,它非常好,易于安装和使用,但是有了这个,我也没有在上面的截图中看到已完成 pod 的 CPU/MEM,我将帖子编辑为添加此屏幕截图。
猜你喜欢
  • 2019-06-29
  • 2019-08-04
  • 2020-06-25
  • 2021-01-05
  • 1970-01-01
  • 2021-06-29
  • 2022-01-15
  • 2010-09-09
  • 2016-09-26
相关资源
最近更新 更多