在Openshift / Kubernetes中,我想测试由2个容器组成的应用程序(pod)在具有不同内核数的计算机上的性能。我手头的机器有32个核心,但我想将其限制为4、8、16 ...
一种方法是对容器使用资源限制,但这将迫使我设置每个容器的比例;相反,我想为整个Pod设置资源限制,并让容器在CPU上竞争。我的感觉是这应该可行,因为这些容器可以属于同一cgroup,因此可以共享调度程序POV的限制。
pod上的def get_country(row):
if #decide if it's a country name:
return row[0]
df['country'] = df.apply(get_country, axis=1).fillna(method='ffill')
是否可以满足我的需求? LimitRange受项目/命名空间限制,有没有办法以更细的粒度(仅适用于某些吊舱)实现相同目的?
答案 0 :(得分:2)
根据documentation:资源限制仅适用于容器级别。但是,您可以定义不同的requests
和limits
,以使容器爆发超出请求中定义的数量。但这带来了其他含义,请参见Quality of Service。
这样做的原因是某些资源(例如内存)无法竞争,因为它适用于CPU。内存不足或不足。 Kubernetes中没有共享RAM这样的东西。 (如果您未明确调用相关的系统调用)
请问,Pod内部CPU竞争的用例是什么?
答案 1 :(得分:0)
如何通过资源配额控制K8S集群内部的资源使用情况。这应该使您能够通过kube_resourcequota监视指标,在通过LimitRange设置的不同条件下,或者直接通过Container的资源限制和请求,在专用命名空间中对pod的cpu /内存使用进行基准测试。
我的意思是准确设置资源配额,类似于this:
apiVersion: v1
kind: ResourceQuota
metadata:
name: mem-cpu-demo
spec:
hard:
requests.cpu: "1"
requests.memory: 1Gi
limits.cpu: "2"
limits.memory: 2Gi
pods: "1"
运行具有资源限制和请求的豆荚:
...
containers:
- image: gcr.io/google-samples/hello-app:1.0
imagePullPolicy: IfNotPresent
name: hello-app
ports:
- containerPort: 8080
protocol: TCP
resources:
limits:
cpu: "1"
memory: 800Mi
requests:
cpu: 900m
memory: 600Mi
...
并仅在监视控制台中观察Pod的性能*,例如使用Prometheus:
* 绿色-表示Pod的整体内存使用情况, 红色-使用ResourceQuota设置的固定/硬资源限制
我猜您选择减少行之间的间隔以避免系统不足,同时避免像这样的Pod故障:
status:
message: 'Pod Node didn''t have enough resource: cpu, requested: 400, used: 893,
capacity: 940'
phase: Failed
reason: OutOfcpu
当然,理想的情况是将这种内存使用趋势与您感兴趣的其他自定义/性能监控指标一起存储在座舱图表上。