kubernetes的Limits和Requests

128 阅读2分钟

Kubernetes通过Requests定义一个容器保留的最小资源,通过Limits定义为一个容器使用的最大资源,这意味着容器的消耗量永远不能超过所显示的内存或CPU。

Limits和Requests


       resources:
          limits:
            memory: 300Mi
            cpu: 500m
          requests:
            memory: 100Mi
            cpu: 100m

  • requests

当有Pod被调度时,kube-scheduler会检查Kubernetes的请求,以便将其分配给一个特定的节点:该节点至少要满足Pod中所有容器的request数量。如果请求的数量高于可用的资源,那么这个Pod将保持在Pending状态。

  • limits

当把Pod分配给一个节点时,如果没有设置requests,默认情况下,Kubernetes将requests=limits。 在运行时,Kubernetes将检查Pod中的容器所消耗的资源量是否高于limits,一般内存达到limits值就会出现OOM。

Namespace ResourceQuata

如果某个命名空间中的特定资源设置了ResourceQuota,那么需要为该命名空间中的每个Pod指定相应的限制或请求。否则,Kubernetes将返回一个 "failed quota"的错误。


apiVersion: v1
kind: ResourceQuota
metadata:
  name: mem-cpu-quota
  namespace: demo-quota
spec:
  hard:
    requests.cpu: 2
    requests.memory: 4Gi
    limits.cpu: 4
    limits.memory: 8Gi
  • requests.cpu:这个命名空间中所有请求的最大CPU数量。
  • requests.memory:这个命名空间中所有请求的最大内存总量。
  • limits.cpu:这个命名空间中所有限制的最大CPU数量。
  • limits.memory:这个命名空间中所有限制的最大内存总量。

Namespace LimitRange

LimitRanges是一种Kubernetes策略,它限制了命名空间中每个实体的资源设置。


apiVersion: v1
kind: LimitRange
metadata:
  name: cpu-resource-limit
  namespace: demo-quota
spec:
  limits:
  - default:
      cpu: 500m
    defaultRequest:
      cpu: 500m
    min:
      cpu: 100m
    max:
      cpu: "1"
    type: Container
  • default: 如果没有指定,创建的容器将有这个值。
  • min: 创建的容器不能有比这更小的限制或请求。
  • max: 创建的容器不能有大于此值的限制或请求。