tl; dr 根本的问题似乎是当resources.requests.cpu
精确设置为1000m
时。
我编写了一个简单的Java应用程序,该应用程序转储了可用数量的处理器:
public class CpuTest {
public static void main(String[] args) {
System.out.println("Number of CPUs = " + Runtime.getRuntime().availableProcessors());
}
}
我打包到一个Dockerfile中并创建了一个简单的部署:
apiVersion: apps/v1
kind: Deployment
metadata:
name: cputest
labels:
app: cputest
spec:
replicas: 1
selector:
matchLabels:
app: cputest
template:
metadata:
labels:
app: cputest
spec:
containers:
- name: cputest
image: dev/cputest:latest
imagePullPolicy: Never
我在具有24个核心的本地RedHat 7机器上运行了该程序。预期输出:
Number of CPUs = 24
然后我将各种CPU资源请求应用于部署:
resources:
requests:
cpu: 1000m
,然后重新部署。结果很有趣:
- CPU请求设置为500m:该应用报告1个CPU
- CPU请求设置为1000m:该应用报告24个CPU
- CPU请求设置为1001m:该应用报告2个CPU
- CPU请求设置为2000m:该应用报告2个CPU
- CPU请求设置为4000m:该应用报告4个CPU
因此,仅当将CPU请求设置为1000m
(也尝试1
并获得相同的结果(认为它具有全部24个CPU))时,才会出现此问题。
我回头查看了我们所有的应用程序。当然,我们将CPU请求设置为完全1000m
的地方就是有问题的地方。任何其他值都可以正常工作。
最重要的是,当我还将CPU限制设置为1000m
时,问题就消失了,JVM报告了1个CPU。
这很可能是预料之中的,我不完全了解Kubernetes如何使用CPU资源和限制,或者我们使用的版本(1.12.7)可能存在问题。
无论哪种方式,我至少都有一个答案,为什么我们的某些吊舱会看到不同的CPU。
,
确实很奇怪。它们在同一个名称空间中吗?掌舵表是否有quota
或Limit range
或您已设置?
还可以通过运行kubectl get nodes -o custom-columns='NAME:metadata.name,CPU:status.capacity.cpu'
来验证cpu的限制吗?
本文链接:https://www.f2er.com/3156255.html