共享容器中容器的CPU限制

时间:2019-02-04 17:32:57

标签: kubernetes resources openshift throttling cgroups

在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受项目/命名空间限制,有没有办法以更细的粒度(仅适用于某些吊舱)实现相同目的?

2 个答案:

答案 0 :(得分:2)

根据documentation:资源限制仅适用于容器级别。但是,您可以定义不同的requestslimits,以使容器爆发超出请求中定义的数量。但这带来了其他含义,请参见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:

enter image description here

* 绿色-表示Pod的整体内存使用情况, 红色-使用ResourceQuota设置的固定/硬资源限制

我猜您选择减少行之间的间隔以避免系统不足,同时避免像这样的Pod故障:

  status:
    message: 'Pod Node didn''t have enough resource: cpu, requested: 400, used: 893,
      capacity: 940'
    phase: Failed
    reason: OutOfcpu

当然,理想的情况是将这种内存使用趋势与您感兴趣的其他自定义/性能监控指标一起存储在座舱图表上。

相关问题