5.2. 管理配额使用量
5.2.1. 配额强制
在项目中首次创建资源配额后,项目会限制您创建可能会违反配额约束的新资源,直到它计算了更新后的使用量统计。
在创建了配额并且更新了使用量统计后,项目会接受创建新的内容。当您创建或修改资源时,配额使用量会在请求创建或修改资源时立即递增。
在您删除资源时,配额使用量在下一次完整重新计算项目的配额统计时才会递减。
可配置的时间量决定了将配额使用量统计降低到其当前观察到的系统值所需的时间。
如果项目修改超过配额使用量限值,服务器会拒绝该操作,并将对应的错误消息返回给用户,解释违反了配额约束,并说明系统中目前观察到的使用量统计。
5.2.2. 与限值相比的请求
在分配计算资源时,每个容器可能会为 CPU、内存和临时存储各自指定请求和限制值。配额可以限制任何这些值。
如果配额具有为 requests.cpu
或 requests.memory
指定的值,那么它要求每个传入的容器都明确请求那些资源。如果配额具有为 limits.cpu
或 limits.memory
指定的值,那么它要求每个传入的容器为那些资源指定一个显性限值。
5.2.3. 资源配额定义示例
core-object-counts.yaml 示例
apiVersion: v1 kind: ResourceQuota metadata: name: core-object-counts spec: hard: configmaps: "10" 1 persistentvolumeclaims: "4" 2 replicationcontrollers: "20" 3 secrets: "10" 4 services: "10" 5
openshift-object-counts.yaml 示例
apiVersion: v1
kind: ResourceQuota
metadata:
name: openshift-object-counts
spec:
hard:
openshift.io/imagestreams: "10" 1
- 1
- 项目中可以存在的镜像流的总数。
compute-resources.yaml 示例
apiVersion: v1 kind: ResourceQuota metadata: name: compute-resources spec: hard: pods: "4" 1 requests.cpu: "1" 2 requests.memory: 1Gi 3 requests.ephemeral-storage: 2Gi 4 limits.cpu: "2" 5 limits.memory: 2Gi 6 limits.ephemeral-storage: 4Gi 7
besteffort.yaml 示例
apiVersion: v1 kind: ResourceQuota metadata: name: besteffort spec: hard: pods: "1" 1 scopes: - BestEffort 2
compute-resources-long-running.yaml 示例
apiVersion: v1 kind: ResourceQuota metadata: name: compute-resources-long-running spec: hard: pods: "4" 1 limits.cpu: "4" 2 limits.memory: "2Gi" 3 limits.ephemeral-storage: "4Gi" 4 scopes: - NotTerminating 5
compute-resources-time-bound.yaml 示例
apiVersion: v1 kind: ResourceQuota metadata: name: compute-resources-time-bound spec: hard: pods: "2" 1 limits.cpu: "1" 2 limits.memory: "1Gi" 3 limits.ephemeral-storage: "1Gi" 4 scopes: - Terminating 5
storage-consumption.yaml 示例
apiVersion: v1 kind: ResourceQuota metadata: name: storage-consumption spec: hard: persistentvolumeclaims: "10" 1 requests.storage: "50Gi" 2 gold.storageclass.storage.k8s.io/requests.storage: "10Gi" 3 silver.storageclass.storage.k8s.io/requests.storage: "20Gi" 4 silver.storageclass.storage.k8s.io/persistentvolumeclaims: "5" 5 bronze.storageclass.storage.k8s.io/requests.storage: "0" 6 bronze.storageclass.storage.k8s.io/persistentvolumeclaims: "0" 7
5.2.4. 创建配额
要创建配额,首先在一个文件中定义配额。然后,使用该文件将它应用到项目中。有关对其描述的链接,请参阅附加资源部分。
$ oc create -f <resource_quota_definition> [-n <project_name>]
以下是一个使用 core-object-counts.yaml
资源配额定义和 demoproject
项目名称的示例:
$ oc create -f core-object-counts.yaml -n demoproject
5.2.5. 创建对象数配额
您可以针对所有 OpenShift Container Platform 标准命名空间资源类型创建对象数配额,如 BuildConfig
和 DeploymentConfig
。对象配额数将定义的配额施加于所有标准命名空间资源类型。
在使用资源配额时,如果服务器存储中存在某一对象,则从其配额中扣减。这些类型的配额对防止耗尽存储资源很有用处。
要为资源配置对象数配额,请运行以下命令:
$ oc create quota <name> --hard=count/<resource>.<group>=<quota>,count/<resource>.<group>=<quota>
显示对象数配额示例:
$ oc create quota test --hard=count/deployments.extensions=2,count/replicasets.extensions=4,count/pods=3,count/secrets=4 resourcequota "test" created $ oc describe quota test Name: test Namespace: quota Resource Used Hard -------- ---- ---- count/deployments.extensions 0 2 count/pods 0 3 count/replicasets.extensions 0 4 count/secrets 0 4
本例将列出的资源限制为集群中各个项目的硬限值。
5.2.6. 查看配额
您可以在 Web 控制台导航到项目的 Quota
页面,查看与项目配额中定义的硬限值相关的使用量统计。
您还可以使用 CLI 查看配额详情:
首先,获取项目中定义的配额列表。例如,对于名为
demoproject
的项目:$ oc get quota -n demoproject NAME AGE besteffort 11m compute-resources 2m core-object-counts 29m
描述您关注的配额,如
core-object-counts
配额:$ 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
5.2.7. 配置配额同步周期
删除一组资源时,资源的同步时间帧由 /etc/origin/master/master-config.yaml
文件中的 resource-quota-sync-period
设置决定。
在恢复配额使用量前,用户在尝试重复使用资源时可能会遇到问题。您可以更改 resource-quota-sync-period
设置,使其在所需时间内重新生成一组资源,以便资源再次可用:
resource-quota-sync-period
设置示例
kubernetesMasterConfig: apiLevels: - v1beta3 - v1 apiServerArguments: null controllerArguments: resource-quota-sync-period: - "10s"
进行任何更改后,重启控制器服务以应用它们。
$ master-restart api $ master-restart controllers
在使用自动化时,调整重新生成时间对创建资源和决定资源使用量很有帮助。
resource-quota-sync-period
设置平衡系统性能。减少同步周期可能会导致控制器出现大量负载。
5.2.8. 消耗资源的明确配额
如果资源不受配额管理,用户可以消耗的资源量就不会有限制。例如,如果没有与金级存储类相关的存储配额,则项目可以创建的金级存储量没有限制。
对于高成本计算或存储资源,管理员可以授予显式配额来消耗资源。譬如,如果某个项目没有显式赋予与金级存储类有关的存储配额,则该项目的用户将无法创建该类型的存储。
为了要求显式配额消耗特定资源,应将以下小节添加到 master-config.yaml 中。
admissionConfig: pluginConfig: ResourceQuota: configuration: apiVersion: resourcequota.admission.k8s.io/v1alpha1 kind: Configuration limitedResources: - resource: persistentvolumeclaims 1 matchContains: - gold.storageclass.storage.k8s.io/requests.storage 2
在上例中,配额系统会拦截创建或更新 persistentVolumeClaim
的每个操作。它会检查要消耗的配额控制的资源。如果项目中没有涵盖这些资源的配额,则请求将被拒绝。在本例中,如果用户创建的 PersistentVolumeClaim
使用与金级存储类关联的存储,并且项目中没有匹配的配额,请求会被拒绝。
其他资源
有关如何创建设置配额所需的文件的示例,请参阅配额管理的资源。
如何分配由配额管理的计算资源的描述。
有关管理项目资源限制和配额的详情,请参阅使用项目。
如果为项目定义了配额,请参阅了解集群配置中的注意事项。