配额和限制范围
概述
使用配额和限制范围,集群管理员可以设置约束以限制对象数量或项目中使用的计算资源量。这有助于集群管理员更好地管理和分配所有项目的资源,并确保没有任何项目的使用超过适用于集群大小的项目。
作为开发人员,您还可以在pod和容器级别设置计算资源的请求和限制。
以下部分将帮助您了解如何检查配额和设置限制范围,可以限制哪些内容,以及如何在自己的pod和容器中请求或限制计算资源。
配额
定义了配额资源
ResourceQuota
定义了配额,限制每个项目的资源消耗。它可以通过类型限制项目中可以创建的对象的数量,以及项目中资源可能消耗的计算资源和存储的总量。
@提示:配额由集群管理员设置,范围限定在给定的项目
查看配额
您可以通过在Web控制台中导航到项目的“配额”页面来查看与项目配额中定义的任何硬限制相关的使用情况统计信息。
您还可以使用CLI查看配额详细信息:
First, get the list of quotas defined in the project. For example, for a project calleddemoproject:
$ oc get quota -n demoproject NAME AGE besteffort 11m compute-resources 2m core-object-counts 29m
Then, describe the quota you are interested in, for example thecore-object-countsquota:
$ oc describe quota core-object-counts -n demoproject Name: core-object-counts Namespace: demoproject Resource Used Hard -------- ---- ---- configmaps 3 10 persistentvolumeclaims 0 4 replicationcontrollers 3 20 secrets 9 10 services 2 10
极限范围
LimitRange
定义的限制范围,列举计算资源约束在pod,容器,image,image streams和persistent volum,并声明计算资源约束的消耗。
所有资源创建和修改请求都针对LimitRange
项目中的每个对象进行评估。如果资源请求违反约束,则资源被拒绝。如果资源未设置任何明确的值,并且如果该约束支持默认值,则将默认值应用于资源。
查看限制范围
您可以通过在Web控制台中导航到项目的“配额”页面来查看项目中定义的任何限制范围。
您还可以使用CLI查看限制范围详细信息:
首先,获取项目中定义的限制范围列表。例如,对于一个名为demoproject的项目:
$ oc get limits -n demoproject NAME AGE resource-limits 6d
然后,描述您感兴趣的限制范围,例如资源限制范围:
$ oc describe limits resource-limits -n demoproject Name: resource-limits Namespace: demoproject Type Resource Min Max Default Request Default Limit Max Limit/Request Ratio ---- -------- --- --- --------------- ------------- ----------------------- Pod cpu 200m 2 - - - Pod memory 6Mi 1Gi - - - Container cpu 100m 2 200m 300m 10 Container memory 4Mi 1Gi 100Mi 200Mi - openshift.io/Image storage - 1Gi - - - openshift.io/ImageStream openshift.io/image - 12 - - - openshift.io/ImageStream openshift.io/image-tags - 10 - - - Full limit range definitions can be viewed by running oc export on the object.
可以通过oc export
在对象上运行来查看完全限制范围定义。下面显示了一个示例限制范围定义:
示例8.限制范围对象定义
apiVersion: "v1"
kind: "LimitRange"
metadata:
name: "core-resource-limits" 【1】
spec:
limits:
type: "Pod"
max:
cpu: "2" 【2】
memory: "1Gi" 【3】
min:
cpu: "200m" 【4】
memory: "6Mi" 【5】
type: "Container"
max:
cpu: "2" 【6】
memory: "1Gi" 【7】
min:
cpu: "100m" 【8】
memory: "4Mi" 【9】
default:
cpu: "300m" 【10】
memory: "200Mi" 【11】
defaultRequest:
cpu: "200m" 【12】
memory: "100Mi" 【13】
maxLimitRequestRatio:
cpu: "10"【14】
【1】限制范围对象的名称。 |
---|
【2】pod可以在所有容器上的节点上请求的最大CPU数量。 |
【3】pod可以在所有容器上的节点上请求的最大内存量。 |
【4】pod可以在所有容器上的节点上请求的最小CPU数量。 |
【5】pod可以在所有容器上的节点上请求的最小内存量。 |
【6】一个pod中单个容器可以请求的最大CPU数量。 |
【7】容器中单个容器可以请求的最大内存量。 |
【8】一个pod中单个容器可以请求的最小CPU数量。 |
【9】pod中单个容器可以请求的最小内存量。 |
【10】如果未指定容器将被限制使用的CPU的默认量。 |
【11】如果未指定,容器将被限制使用的默认内存量。 |
【12】如果未指定容器将要求使用的CPU的默认量。 |
【13】如果未指定容器将要求使用的默认内存量。 |
【14】容器可以做出的最大CPU突发数量,作为其对请求的限制的比例。 |
容器限制
支持的资源:
CPU
Memory
支持的约束条件:
每个容器,如果指定,以下内容必须成立:
约束条件 | 行为 |
---|---|
Min |
Min[resource] (必需)小于或等于container.resources.requests[resource] 小于或等于container/resources.limits[resource] (可选)如果配置定义了min CPU,则请求值必须大于CPU值。不需要指定极限值。 |
Max |
container.resources.limits[resource] (必需)小于或等于Max[resource] 如果配置定义了一个max CPU,那么您不需要定义一个请求值,但是需要设置一个满足最大CPU限制的极限值。 |
MaxLimitRequestRatio |
MaxLimitRequestRatio[resource] 小于或等于(container.resources.limits[resource] /container.resources.requests[resource] )如果配置定义了一个maxLimitRequestRatio 值,那么任何新的容器都必须同时具有请求和限制值。此外,OpenShift Origin通过将请求除以限制来计算请求比率的限制。例如,如果一个容器中有cpu: 500 一个limit 值,而cpu: 100 在该request 值中,则它的请求比例的限制cpu 是5 。该比率必须小于或等于maxLimitRequestRatio 。 |
支持的默认值:
Default[resource]
container.resources.limit[resource]
如果没有,默认为指定值。
Default Requests[resource]
container.resources.requests[resource]
如果没有,默认为指定值。
Pod限制
支持的资源:
CPU
Memory
支持的约束条件:
在pod中的所有容器中,以下内容必须成立:
约束条件 | 强制行为 |
---|---|
Min |
Min[resource] (必需)小于或等于container.resources.requests[resource] 小于或等于container.resources.limits[resource] (可选) |
Max |
container.resources.limits[resource] (必需)小于或等于Max[resource] |
MaxLimitRequestRatio |
MaxLimitRequestRatio[resource] 小于或等于(container.resources.limits[resource] /container.resources.requests[resource] ) |
计算资源
运行在节点上的每个容器都会消耗计算资源,这些可用量可以被请求,分配和使用。
在创建pod配置文件时,您可以选择指定每个容器需要多少CPU和内存(RAM),以便更好地安排群集中的pod,并确保令人满意的性能。
CPU以millicores为单位测量。集群中的每个节点检查操作系统以确定节点上的CPU内核的数量,然后将该值乘以1000,以表示其总容量。例如,如果一个节点有2个核心,节点的CPU容量将被表示为2000m。如果您想使用单个核心的1/10,它将被表示为100m。
内存以字节为单位。另外,可以使用SI足够(E,P,T,G,M,K)或它们的二等幂(Ei,Pi,Ti,Gi,Mi,Ki)。
CPU请求
pod中的每个容器可以指定在节点上请求的CPU数量。调度程序使用CPU请求找到适合于容器的节点。
CPU请求代表您的容器可能占用的最小CPU数量,但是如果CPU没有争用,则可以使用节点上的所有可用CPU。如果节点上存在CPU争用,则CPU请求会在系统上的所有容器之间提供相对权重,以便容器可能使用多少CPU时间。
在节点上,CPU请求映射到内核CFS共享以强制执行此行为。
查看计算资源
$ oc describe pod nginx-tfjxt
Name: nginx-tfjxt
Namespace: default
Image(s): nginx
Node: /
Labels: run=nginx
Status: Pending
Reason:
Message:
IP:
Replication Controllers: nginx (1/1 replicas created)
Containers:
nginx:
Container ID:
Image: nginx
Image ID:
QoS Tier:
cpu: Burstable
memory: Burstable
Limits:
cpu: 200m
memory: 400Mi
Requests:
cpu: 100m
memory: 200Mi
State: Waiting
Ready: False
Restart Count: 0
Environment Variables:
CPU限制
pod中的每个容器都可以指定限制在node上使用的CPU数量。CPU限制控制您的容器可以独立于节点上的争用的最大CPU数量。如果容器试图超过指定的限制,系统将会限制容器的使用。这允许容器具有一致的服务级别,而与安排到该节点的pod的数量无关。
内存请求
默认情况下,容器能够尽可能多地消耗节点上的内存。为了改善群集中的pod的位置,请指定容器运行所需的内存量。然后,在将pod绑定到节点之前,调度程序将考虑可用的节点内存容量。即使在指定请求时,容器仍然能够尽可能多地消耗节点上的内存。
内存限制
如果指定内存限制,则可以限制容器可以使用的内存量。例如,如果指定的限制为200Mi,则容器将被限制为在该节点上使用该量的内存。如果容器超过指定的内存限制,则将根据容器重新启动策略终止并可能重新启动。
服务质量级别
计算资源根据指定的请求和限制值按照服务质量(QoS)进行分类。
服务质量 | 描述 |
---|---|
BestEffort | 没有指定请求和限制时提供 |
Burstable | 当指定的请求小于可选指定的限制时提供 |
Guarantee | 当指定等于可选指定请求的限制时提供 |