我正在使用此YAML片段在Google Kubernetes Engine中部署一个容器:
spec:
containers:
- name: service
image: registry/service-go:latest
resources:
requests:
memory: "20Mi"
cpu: "20m"
limits:
memory: "100Mi"
cpu: "50m"
但是它持续消耗120m。 为什么“ limits”属性会被忽略?其他所有功能均正常运行。如果我要求200m,则保留200m,但限制一直被忽略。
我的Kubernetes版本是1.10.7-gke.1
我只有默认的名称空间,并且在执行时
kubectl描述默认名称空间
Name: default
Labels: <none>
Annotations: <none>
Status: Active
No resource quota.
Resource Limits
Type Resource Min Max Default Request Default Limit Max Limit/Request Ratio
---- -------- --- --- --------------- ------------- -----------------------
Container cpu - - 100m - -
答案 0 :(得分:2)
google cloud控制台运行良好,我认为您的pod中有多个容器,这就是原因。上面显示的值是在截断的YAML文件中声明的资源请求的总和。您可以使用kubectl
轻松地进行验证。
首先验证您的广告连播中的容器数。
kubectl describe pod service-85cc4df46d-t6wc9
然后,通过kubectl查看节点的描述,您应该具有与控制台所说的相同的信息。
kubectl describe node gke-default-pool-abcdefgh...
您可以将群集想象为一个大方框。这是您可分配资源的总数。当您将Pod放入大盒子中时,Kubernetes会检查是否存在用于请求的Pod资源的空白空间(小盒子适合大盒子吗?)。如果有足够的可用空间,它将在您选择的节点上安排您的工作量。
调度程序不考虑资源限制。所有这些都在CGroups的内核级别完成。目的是限制工作负载,使其占用计划的节点上的所有CPU或内存。
如果您的资源请求==资源限制,那么工作负载将无法逃避它们的“负担”,并且将无法使用它们旁边的可用CPU /内存。换句话说,可以保证您的资源可用于广告连播。
但是,如果限制大于您的请求,这称为过量使用资源。您打赌,同一节点上的所有工作负载不会同时完全加载(通常是这种情况)。
我建议不要过度使用内存资源,不要让Pod在内存方面逃脱“盒子”,这会导致OOMKilling。