You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JQ筛选特定容器CPU值问题:如何仅获取mysql容器的CPU限制值

精准筛选指定Pod中特定容器的CPU限制值

你的语法误区

你当前命令中对容器数组的筛选逻辑错误:

.spec.containers | select(.[].name=="sidecar" | not )

.[].name会遍历所有容器的名称,返回一个布尔值数组(示例中会返回[true, false]),| not会将整个数组的结果取反得到[false, true],但select()是对整个容器数组进行判断,只要数组存在满足条件的元素,就会保留完整数组。因此最终你还是拿到了包含sidecar和mysql的全部容器,后续遍历数组时,sidecar容器因无resources.limits.cpu字段输出null,mysql容器输出目标值2100m。

正确命令及解释

方法一:遍历容器时直接筛选

jq -r --arg _NAME "mysql-innodb-cluster-0" '.items[] | select(.metadata.name == $_NAME) | .spec.containers[] | select(.name == "mysql") | .resources.limits.cpu' /tmp/test.json

每一步作用:

  • .items[]:遍历List中的所有Pod条目
  • select(.metadata.name == $_NAME):筛选出名称匹配的目标Pod
  • .spec.containers[]:遍历该Pod下的所有容器
  • select(.name == "mysql"):精准筛选出名为mysql的容器
  • .resources.limits.cpu:提取该容器的CPU限制值

方法二:先过滤容器数组再取值

也可以用map()先过滤容器数组,再提取目标值:

jq -r --arg _NAME "mysql-innodb-cluster-0" '.items[] | select(.metadata.name == $_NAME) | .spec.containers | map(select(.name == "mysql"))[0].resources.limits.cpu' /tmp/test.json
  • map(select(.name == "mysql")):将容器数组过滤为仅包含mysql容器的数组
  • [0]:取过滤后数组的第一个(也是唯一一个)元素
  • .resources.limits.cpu:提取CPU限制值

两种方法执行后都会输出预期结果:2100m

内容的提问来源于stack exchange,提问作者user3008410

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 23:17:21