首页 > 解决方案 > 为什么没有应用 K8 pod 限制?

问题描述

我基本上是在尝试在我的集群上应用 pod CPU 限制。我在那里对我的deployment.yaml(添加的请求,限制)进行了编辑并应用了yaml。以下是观察结果:

  1. 应用文件时我没有收到任何错误(我现有的应用程序 pod 已终止,新的应用程序 pod 已启动)
  2. 当我对我的 pod 进行描述时,我可以看到正在应用的 QoS 类(Qos:Burstable)
  3. 问题是没有遵守限制,正如我在指标服务器中看到的那样,pod CPU > 300(而限制设置为 200m)
  4. 我有一个附加到 pod 的 istio sidecar 容器(但我只想将限制应用于我的应用程序而不是 Istio)

yaml 文件片段:

resources:
    limits:
        cpu: 200m
        memory: 100Mi
    requests:
        cpu: 50m
        memory: 50Mi

任何想法我还需要在这里检查什么,我检查了所有文档并且没有收到任何错误,但没有应用限制。提前致谢!

标签: kubernetes

解决方案


Pod CPU 包括 pod 中的所有容器,而您指定的限制仅适用于应用程序容器。
如果您单独查询容器的指标,您可能会发现它遵守了您对其施加的限制。
这是一个示例 prometheus 查询,如果您在集群上运行它,您可以使用它,这将让您了解每个容器实际 CPU 使用率与其 CPU 请求之间的比率 -

max(sum(irate(container_cpu_usage_seconds_total{container=~"<container_name>", image !="",namespace="<namespace>", pod=~"<Deployment_name>"}[5m])) by (pod, namespace)) 
/ 
max(sum(kube_pod_container_resource_requests_cpu_cores{namespace="<namespace>", container=~"<container_name>", pod=~"<deployment_name>"}) by (pod,namespace))

推荐阅读