K8的资源限制是否可以用 * 绝对单位 * 来表示?默认情况下,我们会得到一个人类可读的单位(如Mi,Gi,内存)和m表示CPU:
$ kubectl get pod ndbmysqld-1 -o yaml | grep -A 6 " resources:" | grep "limits:" -A 2
limits:
cpu: 500m
memory: 512Mi
--
limits:
cpu: 100m
memory: 256Mi
但我的Pod有所有不同的单位,看到这一个:
limits:
cpu: "1"
memory: 214748364800m
注:214748364800米显然是200米...
有没有办法让所有单位对齐?
谢谢你!
2条答案
按热度按时间eqqqjvef1#
您可以将
memory
**表示为*纯整数或定点数CPU的含义
CPU资源的限制和请求以CPU单位衡量。一个CPU(以Kubernetes为单位)相当于云提供商的1个vCPU/Core和裸机英特尔处理器上的1个超线程。
允许分数请求。一个容器的spec.containers[].resources.requests.cpu为0. 5时,其CPU保证为请求1 CPU的容器的一半。表达式0. 1等价于表达式100 m,可以读作“一百毫”。有些人说“一百毫”,这被理解为同一个意思。一个带有小数点的请求,如0.1,被API转换为100 m,不允许精度小于1 m。因此,100 m的形式可能是首选。
CPU总是作为绝对量而不是相对量来请求; 0.1是单核、双核或48核计算机上相同数量的CPU。
“记忆的意义"
内存的限制和要求是以字节为单位。您可以将
memory
表示为一般整数,或使用下列其中一个尾码来表示为定点数:E、P、T、G、M、K。您也可以使用相等的2次方:Ei、Pi、Ti、Gi、Mi、Ki。例如,以下表示大致相同的值:gpfsuwkq2#
有两种方法:使用numfmt。你可以用它来重新格式化数值列,如果你从kubectl中取出tsv数据,这真的很方便。这是我推荐的。
或者,您可以在普通的jq中近似它(如果您没有numfmt,或者您需要在jq中使用它以获得不同格式的输出):
突出显示我在其中定义的函数:
它的作用是捕获数字部分和后缀的第一个字符为'n'和'u',然后返回'n'乘以10^3*(“m_KMGTPE”中后缀的索引减1)。例如,对于'm',索引为0,因此它乘以10^-3,对于1,索引为2,因此它乘以10^3,依此类推。