修改 kubectl 命令中的自定义列输出

问题描述 投票:0回答:1

我正在尝试使用

kubectl get hpa
标志自定义命令
-o
的输出。如果我跑步

kubectl get hpa -o=custom-columns='MEMORY:.status.currentMetrics[1].resource.current.averageValue'

我明白了

MEMORY
22466478

这是当前的内存利用率(以字节为单位),不太可读。我想在命令输出中将其转换为兆字节,这样我就会得到类似的结果

MEMORY
22.47MB

是否可以在

kubectl
命令中执行此操作(即没有某种包装器)?

(注意:最终输出中会有比这更多的列。为了简单起见,我提供了一个最小版本)

kubernetes kubectl
1个回答
0
投票

MegaByte 表示 2^20 字节,2^20 给出 1048576。看来您使用 内存值%1000000(22466478%1000000) 将内存值 (22466478) 转换为兆字节,但您应该使用 内存值% 1048576(22466478%1048576) 获取准确的内存值(以兆字节为单位)。

Kubectl 不直接支持命令行中的算术运算。 所以你可以尝试使用“jq”命令,如下所示:

kubectl 获取 hpa-o json | jq -r ‘.items[] | [.metadata.name, (.status.currentMetrics[] | select(.resource.name==”内存”).resource.current.averageValue' | tonumber / (1024*1024) | tostring + “MB”)] | @tsv

kubectl get hpa-o json 它以 JSON 格式获取 Horizontal Pod Autoscaling (HPA) 资源。

Jq 处理 JSON 输出。 @tsv 用于制表符分隔值以获得更好的可见性。它位于小数位。如果您使用的是 Linux,通过使用 numfmt (它将数字从人类可读的格式转换为人类可读的格式)我们也可以获得。

kubectl get hpa-o custom-columms=”MEMORY:status.currentMetrics1.resource.current.averageValue” -- 无标题 | numfmt --to=iec

并参阅 SK 在 Numfmt 命令教程 上撰写的 Ostechnix 文章了解更多详细信息。它采用符合 IEC 标准的人类可读形式。

另一种方法是使用“awk”命令来获取十进制值,如下所示:

kubectl get hpa-o custom-columms=”MEMORY:status.currentMetrics1.resource.current.averageValue” -- 无标题 | awk ‘{printf “%.2f MB ”, $1 / (1024*1024)}’

这会将内存使用字节转换为十进制值的兆字节。

© www.soinside.com 2019 - 2024. All rights reserved.