设置配额

概述

ResourceQuota对象定义的资源配额,用于限制每个项目的资源消耗。。它可以通过类型限制项目中可以创建的对象的数量,以及项目中可能消耗的计算资源和存储的总量。

@提示:更多计算资源信息可参见开发者指南(Developer Guide

配额资源管理

以下描述可由配额管理的一组计算资源和对象类型。

@提示:如果status.phase in (Failed, Succeeded)为真,则pod处于终端状态。

表1.由quota管理的计算资源

资源名称 描述
cpu 非终端状态下所有pod的CPU请求总和不能超过此值。cpurequests.cpu值相同,并且可以互换使用。
memory 非终端状态下所有pod的内存请求总和不能超过此值。memoryrequests.memory值相同,并且可以互换使用。
requests.cpu 非终端状态下所有pod的CPU请求总和不能超过此值。cpurequests.cpu值相同,并且可以互换使用。
requests.memory 非终端状态下所有pod的内存请求总和不能超过此值。memory和requests.memory值相同,并且可以互换使用。
requests.storage 所有持久性卷声明中的存储请求的总和不能超过此值。storagerequests.storage值相同,并且可以互换使用
limits.cpu 非终端状态下所有端口的CPU限制的总和不能超过此值。
limits.memory 非终端状态下所有pod的内存限制之和不能超过此值。

表2.Quota管理的对象数量

资源名称 描述
pods 在的非终端状态的项目中可以存在的pod的总数
replicationcontrollers 项目中可存在的复制控制器的总数
resourcequotas 项目中可以存在的资源配额总数
services 项目中可以存在的服务总数
secrets 项目中可以存在的秘钥总数
configmaps 项目中可存在的ConfigMap对象总数
persistentvolumeclaims 项目中可能存在的持久性卷的总数。
openshift.io/imagestreams 项目中可以存在image stream的总数。

Quota 范围

每个配额可以有一组关联的范围。配额只能衡量资源的使用情况,如果它与枚举的范围相交。

将配额添加到配额限制可以应用该配额的资源集。指定允许的集合之外的资源会导致验证错误。

范围 描述
Terminating 匹配podsspec.activeDeadlineSeconds >= 0
NotTerminating 匹配podsspec.activeDeadlineSeconds为nil
BestEffort 匹配任一cpu或memory最佳服务质量的pods
NotBestEffort 匹配没有提供cpumemory最佳服务质量的pods

BestEffort限制资源的范围:

  • pods

Terminating,NotTerminatingNotBestEffort范围限制quota可跟踪以下资源:

  • pods

  • memory

  • requests.memory

  • limits.memory

  • cpu

  • requests.cpu

  • limits.cpu

Quota执行

在首次创建项目的资源配额后,该项目将限制创建任何可能违反配额约束的新资源的能力,直到计算更新的使用情况统计信息为止。

创建配额并更新使用统计信息后,项目将接受新内容的创建。当您创建或修改资源时,在创建或修改资源的请求时,您的配额使用将立即增加。

当您删除资源时,在下次完全重新计算项目的配额统计信息时,您的配额使用量会减少。可配置的时间量决定将配额使用统计信息减少到目前观察到的系统值所需的时间。

如果项目修改超过配额使用限制,则服务器将拒绝该操作,并向用户返回解释违反配额约束的相应错误消息,以及系统当前观察到的使用情况统计信息。

请求与限制

在分配计算资源时,每个容器指定请求和CPU和内存的限制值。配额可以限制任何这些值。

如果配额具有requests.cpurequests.memory,则要求每个传入容器对这些资源作出明确的请求。如果配额具有limits.cpulimits.memory,则要求每个传入容器为这些资源指定明确的限制。

资源配额定义例子

示例1.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】

【1】:在一个项目中可存在的ConfigMap对象总数

【2】:项目中可以存在的persistent volume claims(PVC)总数

【3】:项目中可存在的复制控制器总数

【4】:项目中可以存在的秘钥的总数

【5】:项目中可以存在的服务的总数

示例2.openshift-object-counts.yaml

apiVersion: v1

kind: ResourceQuota

metadata:

name: openshift-object-counts

spec:

hard:

openshift.io/imagestreams: "10"【1】

【1】项目中可存在的image streams的总数

示例3.compute-resources.yaml

apiVersion: v1

kind: ResourceQuota

metadata:

name: compute-resources

spec:

hard:

pods: "4" 【1】

requests.cpu: "1" 【2】

requests.memory: 1Gi 【3】

limits.cpu: "2" 【4】

limits.memory: 2Gi【5】

【1】在项目中可以存在的非终端状态中的pod的总数

【2】在非终端状态的所有pod中,CPU请求的总和不能超过1个核心

【3】在非终端状态的所有pod中,内存请求的总和不能超过1Gi

【4】在非终端状态的所有pod中,CPU限制的总和不能超过2个内核

【5】在非终端状态的所有pod中,内存限制的总和不能超过2Gi

Example 4.besteffort.yaml

apiVersion: v1

kind: ResourceQuota

metadata:

name: besteffort

spec:

hard:

pods: "1" 【1】

scopes:

  • BestEffort【2】

【1】在非终端状态下,可以存在于项目中的BestEffort服务质量的总数

【2】将配额限制为仅适用于内存或CPU的BestEffort服务质量的pod

创建配额

要创建配额,请首先在文件中定义您的规范的配额,例如“资源配额定义例子”中所示。然后,使用该文件创建应用到项目:

$ oc create -f <resource_quota_definition> [-n <project_name>]

例如:

$ oc create -f resource-quota.json -n demoproject

查看配额

您可以通过在Web控制台中导航到项目的“配额”页面来查看与项目配额中定义的任何硬限制相关的使用情况统计信息。

您还可以使用CLI查看配额详细信息:

  1. 首先,获取项目中定义的配额列表。例如,对于一个名为demoproject的项目:

    $ oc get quota -n demoproject
    NAME                AGE
    besteffort          11m
    compute-resources   2m
    core-object-counts  29m
    
  2. 然后,描述您感兴趣的配额,例如核心对象计数配额:

    $ 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
    

配置配额同步周期

当一组资源被删除时,资源的同步时间帧由/etc/origin/master/master-config.yaml文件中的resource-quota-sync-period设置决定。

配额使用恢复之前,用户在尝试重用资源时可能会遇到问题。您可以将resource-quota-sync-period设置更改为使资源集在所需的时间(以秒为单位)重新生成,资源将再次可用:

kubernetesMasterConfig:
  apiLevels:
  - v1beta3
  - v1
  apiServerArguments: null
  controllerArguments:
    resource-quota-sync-period:
      - "10s

进行任何更改后,重启master服务以应用它们。

调整再生时间有助于在使用自动化时创建资源并确定资源使用。

@提示:该resource-quota-sync-period设置旨在平衡系统性能。降低同步时间可能会导致主机负载过重。

在部署配置中计算配额

如果为您的项目定义了配额,请参阅部署资源以了解有关任何部署配置的注意事项。

results matching ""

    No results matching ""