列出 Kubernetes 节点的内存和 CPU。

3

我想要列出kubernetes中所有节点的CPU和内存使用情况,并在内存或CPU限制超过某个数值时输出“负载超限”。我可以使用以下命令列出CPU和内存,但如何应用逻辑来输出load exceeded

kubectl describe nodes | grep -A 3 "Resource .*Requests .*Limits"

输出:

Resource                    Requests      Limits
  --------                    --------      ------
  cpu                         360m (18%)    13 (673%)
  memory                      2800Mi (84%)  9Gi (276%)
--
  Resource                    Requests          Limits
  --------                    --------          ------
  cpu                         1430m (74%)       22300m (1155%)
  memory                      2037758592 (58%)  15426805504 (441%)
--
  Resource                    Requests     Limits
  --------                    --------     ------
  cpu                         240m (12%)   5 (259%)
  memory                      692Mi (20%)  3Gi (92%)
--
  Resource                    Requests      Limits
  --------                    --------      ------
  cpu                         930m (48%)    3100m (160%)
  memory                      1971Mi (59%)  3412Mi (102%)
--
  Resource                    Requests     Limits
  --------                    --------     ------
  cpu                         270m (13%)   7 (362%)
  memory                      922Mi (27%)  4Gi (122%)
--
  Resource                    Requests      Limits
  --------                    --------      ------
  cpu                         530m (27%)    5 (259%)
  memory                      1360Mi (40%)  3Gi (92%)
--
  Resource                    Requests      Limits
  --------                    --------      ------
  cpu                         440m (22%)    5250m (272%)
  memory                      1020Mi (30%)  3884Mi (116%)


1
如果您能添加 kubectl 输出示例,那将非常好,因为并非每个人都有运行中的 k8s 集群来检查输出的确切外观。 - Pubudu Sitinamaluwa
是的,请添加一个输入和期望的输出。 - Jetchisel
嗨,我已经添加了命令的输出。 - user16133873
我建议你阅读关于Kubernetes资源的文档,因为我认为你对它们的本质有一些误解:https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ - BeWu
如果您想监控当前的资源消耗,请首先查看此页面获取信息:https://kubernetes.io/docs/tasks/debug-application-cluster/resource-usage-monitoring/ - BeWu
显示剩余4条评论
2个回答

5

尝试使用正则表达式模式匹配来提取您想要的属性

kubectl describe nodes | grep -E -A 3 "Resource|Requests|Limits"

您可以像这样扩展它来提取 CPUMEMORY 的值。
grep -E -A 3 "Resource|Requests|Limits" | awk '/cpu/{print $2}'

编辑 要打印是否超出限制(例如 CPU 超过1),

grep -E -A 3 "Limits" | awk '/cpu/{if($2 > 1) print "Limit Exceeded"; else print "Within Limits";}'

你将需要进行以下操作

| awk '/memory/{print $2}' | awk -vFS="" '{print $1}'

在应用条件之前,从内存中提取数字可以获得指标G

编辑2

这可以根据您的grep命令提供的输出给出比率。

CPU

| awk '/cpu/{print $1,$2,$4}' | awk '{if($3 ~ /[0-9]$/) {print $1,$2/($3*1000)} else {print $1,$2/$3}}'

输出

cpu 0.0276923
cpu 0.0641256
cpu 0.048
cpu 0.3
cpu 0.0385714
cpu 0.106
cpu 0.0838095

内存

| awk '/memory/{print $1,$2,$4}' | awk '{if($3 ~ /Gi$/) {print $1,$2/($3*1024)} else {print $1,$2/$3}}'

输出

memory 0.303819
memory 0.132092
memory 0.22526
memory 0.577667
memory 0.225098
memory 0.442708
memory 0.262616

有没有办法一次性检查所有的内存、请求和 CPU,并将每个限制与其进行比较? - user16133873
@user16133873 我已经更新了答案。请检查一下是否适用于您。 - Pubudu Sitinamaluwa
有没有办法列出CPU的请求和限制?以及内存的请求和限制? - user16133873
我刚刚计算了比率。请尝试删除最后的 awk 部分以获得更好的理解。 - Pubudu Sitinamaluwa

1
如评论所述,根据资源类型,Kubernetes 的行为会有所不同,您可以使用 kube-prometheus 堆栈来进行 CPU 和内存超限警报。
  • 如果您想要监控当前的资源消耗,请查看此页面

  • 我想澄清一下,您的解决方案概念已经不正确了,因为在Kubernetes术语中,资源请求永远不会超过限制

  • 另一种选择是使用类似于指标服务器或Prometheus的东西,例如kube-prometheus-stack。通过后者,您可以轻松添加规则,以在应用程序超出请求时发出警报。

  • 限制的问题有点更加复杂,因为根据资源类型,Kubernetes的行为会有所不同。如果实际内存消耗超过配置的限制,Kubernetes将自动终止相应的Pod。另一方面,如果实际CPU消耗超过配置的CPU限制,它将导致限制,这基本上意味着CPU时间将被限制在配置的限制之内。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接