检查库伯内特豆荚 CPU 和内存

我试图看看有多少内存和 CPU 是利用库伯内特豆荚。我为此运行了以下命令:

kubectl top pod podname --namespace=default

我得到了以下错误:

W0205 15:14:47.248366    2767 top_pod.go:190] Metrics not available for pod default/podname, age: 190h57m1.248339485s
error: Metrics not available for pod default/podname, age: 190h57m1.248339485s
  1. 我该如何处理这个错误?有没有其他方法可以得到吊舱的 CPU 和内存使用情况?
  2. 我看到这个命令的样例输出显示 CPU 为250m。这是如何解释的?

  3. 如果我们进入 pod 并运行 linux top命令,是否会得到相同的输出?

391722 次浏览

您需要部署堆服务器或公制服务器来查看 pods 的 CPU 和内存使用情况

由于堆已被弃用,并且将不会发布任何未来版本,因此您应该安装指标服务器

您可以按照以下方式安装度量服务器:

  1. 克隆指标-服务器 github repo: git clone https://github.com/kubernetes-incubator/metrics-server.git

编辑 deploy/1.8+/metrics-server-deployment.yaml文件并在 command节之后添加以下部分:

- command:
- /metrics-server
- --metric-resolution=30s
- --kubelet-insecure-tls
- --kubelet-preferred-address-types=InternalIP
  1. 运行以下命令: kubectl apply -f deploy/1.8+

它将安装度量服务器所需的所有需求。

欲了解更多信息,请看下面我的回答:

如何为 HPA 自动缩放度量启用 KubeAPI 服务器

  1. 医生中所述,您应该安装 服务器

  2. 在 Kubernetes,以中央处理器单位计算,中央处理器的资源是 量过了,相等于:

    • 1 AWS vCPU
    • 1个 GCP 核心
    • 1 Azure vCore
    • 在一个裸金属 Intel 处理器上使用超线程实现1个超线程

    允许小数值。请求0.5 CPU 的容器是 保证只有一个容器需要一个 CPU 的一半 可以使用后缀 m 表示毫米。例如100m CPU,100 MilCPU 和0.1 CPU 都是相同的。精度小于1m 则不是 允许。

    CPU 总是被要求作为一个绝对数量,从来没有作为一个相对 数量; 0.1是单核、双核、, 或者48核的机器。

  3. 不,kubectl top pod podname显示给定 pod 的指标,Linux topfree在 Container 中运行,并根据存储在 虚拟档案系统 /proc/中的信息报告基于 Linux 系统的指标,它们不知道运行的 cgroup。

    以下连结提供更多详情:

kubectl top pod <pod-name> -n <fed-name> --containers

仅供参考,这是1.16.2版本

检查没有公制服务器或任何第三方工具


如果你想在不安装任何第三方工具的情况下检查 pod 的 cpu/memory 使用情况,那么你可以从 cgroup 获得 pod 的内存和 cpu 使用情况。

  1. 转到逃生舱执行模式 kubectl exec -it pod_name -n namespace -- /bin/bash
  2. 为 CPU 使用运行 cat /sys/fs/cgroup/cpu/cpuacct.usage
  3. 运行 cat /sys/fs/cgroup/memory/memory.usage_in_bytes查看内存使用情况

确保您已经将资源部分(请求和限制)添加到部署中,以便它能够基于 cgroup 计算使用量,并且容器将遵守在 pod 级别设置的限制

注意: 这种使用方式是以字节为单位的。这种使用方式会随着吊舱的使用而改变,这些值经常变化。

如果您正在使用 Minikube,可以使用 启用指标服务器插件; 这将在仪表板中显示信息。

使用 K9可以非常简单地检查所有资源的 CPU 和内存使用情况。

enter image description here

如果你执行到您的吊舱,使用 sh 或 bash,你可以运行 top命令,这将给你一些资源利用率的统计数据,每隔几分钟更新。

enter image description here

您需要运行公制服务器,以使以下命令使用正确的数据:

  1. Kubectl 得了 HPA
  2. Kubectl 顶部节点
  3. Kubectl 顶部豆荚

没有公制服务器: 通过以下命令进入逃生舱:

  1. Kubectl exec-it pods/{ pod _ name } sh
  2. Cat/sys/fs/cgroup/memory/memy.using _ in _ bytes

您将得到 pod 的内存使用情况(以字节为单位)。

要检查个别吊舱在 Kubernetes 的使用情况,请在终端机输入以下命令

$ docker ps | grep < pod _ name >

这将给出您在 Kubernetes 运行的集装箱清单 使用以下命令检查 CPU 和内存利用率

$ docker stats < Container _ id >

CONTAINER_ID  NAME   CPU%   MEM   USAGE/LIMIT   MEM%   NET_I/O   BLOCK_I/O   PIDS

不必安装度量服务器的替代方法。

它要求您当前将 好吧安装到安装了吊舱的工作节点中。在 官方文件中定义了库伯内特任务。

一旦你正确地安装了它,你可以使用下面的命令。(在我的示例中,我必须使用 sudo,但是,可能不需要,这取决于您的 Kubernetes 集群安装)

  1. 找到您的集装箱编号的分离舱 sudo crictl ps
  2. 使用统计数据获得 CPU 和内存 sudo crictl stats <CONTAINERID>

参考样本输出 :

CONTAINER           CPU %               MEM                 DISK                INODES
873f04b6cef94       0.50                54.16MB             28.67kB             8

您可以使用定义为 给你的 API:

例如:

kubectl -n default get --raw /apis/metrics.k8s.io/v1beta1/namespaces/default/pods/nginx-7fb5bc5df-b6pzh | jq


{
"kind": "PodMetrics",
"apiVersion": "metrics.k8s.io/v1beta1",
"metadata": {
"name": "nginx-7fb5bc5df-b6pzh",
"namespace": "default",
"selfLink": "/apis/metrics.k8s.io/v1beta1/namespaces/default/pods/nginx-7fb5bc5df-b6pzh",
"creationTimestamp": "2021-06-14T07:54:31Z"
},
"timestamp": "2021-06-14T07:53:54Z",
"window": "30s",
"containers": [
{
"name": "nginx",
"usage": {
"cpu": "33239n",
"memory": "13148Ki"
}
},
{
"name": "git-repo-syncer",
"usage": {
"cpu": "0",
"memory": "6204Ki"
}
}
]
}

其中 Nginx-7fb5bc5df-b6pzh是豆荚的名字。

请注意,CPU 是在 nanCPU 中度量的,其中1x10E9 nanCPU = 1 CPU

检查 CPU/Memory 的一种快速方法是使用以下 kubectl 命令。

kubectl describe PodMetrics <pod_name>

用您使用的 pod 名称替换 < pod _ name >

kubectl get pod

不知道为什么不在这里

  1. 看到所有活着的时间豆荚 -kubectl get pods --all-namespaces
  2. 查看内存和 CPU-kubectl top pods --all-namespaces

如果使用 普罗米修斯操作员维多利亚公制运算符监视 Kubernetes,那么可以使用以下 PromQL 查询来确定每个容器、每个 pod 和每个节点的资源使用情况:

  • 每个容器的内存使用量(以字节为单位) :
sum(container_memory_usage_bytes{container!~"POD|"}) by (namespace,pod,container)
  • 中央处理器核心的每容器 CPU 使用率:
sum(rate(container_cpu_usage_seconds_total{container!~"POD|"}[5m])) by (namespace,pod,container)
  • 每个 pod 的内存使用量(以字节为单位) :
sum(container_memory_usage_bytes{container!=""}) by (namespace,pod)
  • 每个吊舱 CPU 在 CPU 内核中的使用率:
sum(rate(container_cpu_usage_seconds_total{container!=""}[5m])) by (namespace,pod)
  • 每个节点的内存使用量(以字节为单位) :
sum(container_memory_usage_bytes{container!=""}) by (node)
  • 中央处理器核心的每节点 CPU 使用率:
sum(rate(container_cpu_usage_seconds_total{container!=""}[5m])) by (node)
  • 每节点内存使用百分比:
100 * (
sum(container_memory_usage_bytes{container!=""}) by (node)
/ on(node)
kube_node_status_capacity{resource="memory"}
)
  • 每节点 CPU 使用率:
100 * (
sum(rate(container_cpu_usage_seconds_total{container!=""}[5m])) by (node)
/ on(node)
kube_node_status_capacity{resource="cpu"}
)

我知道这是一个老线程,但我刚刚发现它试图做类似的东西。最后,我发现我可以直接使用 Visual Studio Code Kubernetes 插件。我就是这么做的:

  • 选择集群并打开 Workload/Pods 部分,找到您想要监视的 pod (您可以通过 Workload 部分中的任何其他分组访问 pod)
  • 右键点击吊舱,选择“终端”
  • 现在,您可以对上面描述的文件执行 cat 命令,或者使用“ top”命令实时监视 CPU 和内存。

希望能有帮助