如何将 CPU 和内存请求和限制值表达在一个一致的单位中?
How to express the CPU and memory request and limit values in one consistent unit?
当执行 kubectl describe nodes
命令时,它们 CPU 和内存请求和限制值可以以不同的单位出现,听起来令人难以置信。
在下面的例子中:
example example-85cdb9b4cc-xvpn2 500m (2%) 2 (8%) 256Mi (0%) 512Mi (0%) 2d
example example-zk-0 1 (4%) 2 (8%) 2Gi (3%) 4Gi (7%) 7d8h
example example-6f54cd4967-jzhxp 2 (8%) 0 (0%) 1500M (2%) 1500M (2%) 2d
我们可以看到 CPU 值有 2 个不同的单位:
500m
1 which translates as 1000m
内存值有 3 个不同的单位:
M
Gi
Mi
这使得在这些值上编写脚本变得不必要的麻烦。
有没有什么办法可以用一个一致的单位来表示这些值?
无法让 kubectl describe
执行此操作,这是有道理的,因为 describe 是供人类使用的,但我也无法通过 kubectl get -o json 找到执行此操作的方法,这很烦人。 k8s Go 库有一个 resource 包,它可以操纵资源值,这可能是可靠地编写涉及 k8s 的任何脚本的最佳选择 API.
如果您对使用 Go(或其他带有 k8s API 库的语言)不感兴趣,我 运行 通过一个名为 kube-resource-unit-converter which uses that package to normalize units. It doesn't work so well for millicore values, so I opened a PR 的小工具来添加一个 -m
用于打印资源的毫值的标志。将它与 jq 混合,你可以很容易地在脚本中使用它:
# for a container with a 600m cpu limit
$ kubectl get pods -o json | jq -r '.items[0].spec.containers[0].resources.limits.cpu' | ./kube-resource-unit-converter -m
600
或者,我在 DataDog 中看到的一种方法是使用一个 case 语句来解析单元并相应地乘以值。有点笨拙,但不太可能失败或需要更改。
当执行 kubectl describe nodes
命令时,它们 CPU 和内存请求和限制值可以以不同的单位出现,听起来令人难以置信。
在下面的例子中:
example example-85cdb9b4cc-xvpn2 500m (2%) 2 (8%) 256Mi (0%) 512Mi (0%) 2d
example example-zk-0 1 (4%) 2 (8%) 2Gi (3%) 4Gi (7%) 7d8h
example example-6f54cd4967-jzhxp 2 (8%) 0 (0%) 1500M (2%) 1500M (2%) 2d
我们可以看到 CPU 值有 2 个不同的单位:
500m
1 which translates as 1000m
内存值有 3 个不同的单位:
M
Gi
Mi
这使得在这些值上编写脚本变得不必要的麻烦。
有没有什么办法可以用一个一致的单位来表示这些值?
无法让 kubectl describe
执行此操作,这是有道理的,因为 describe 是供人类使用的,但我也无法通过 kubectl get -o json 找到执行此操作的方法,这很烦人。 k8s Go 库有一个 resource 包,它可以操纵资源值,这可能是可靠地编写涉及 k8s 的任何脚本的最佳选择 API.
如果您对使用 Go(或其他带有 k8s API 库的语言)不感兴趣,我 运行 通过一个名为 kube-resource-unit-converter which uses that package to normalize units. It doesn't work so well for millicore values, so I opened a PR 的小工具来添加一个 -m
用于打印资源的毫值的标志。将它与 jq 混合,你可以很容易地在脚本中使用它:
# for a container with a 600m cpu limit
$ kubectl get pods -o json | jq -r '.items[0].spec.containers[0].resources.limits.cpu' | ./kube-resource-unit-converter -m
600
或者,我在 DataDog 中看到的一种方法是使用一个 case 语句来解析单元并相应地乘以值。有点笨拙,但不太可能失败或需要更改。