7.14.2. 配置 Application-Aware Quota (AAQ) Operator


您可以使用 Application-Aware Quota (AAQ) Operator 为 OpenShift Container Platform 集群中的单个组件自定义和管理资源配额。

7.14.2.1. 关于 AAQ Operator

与 OpenShift Container Platform 平台中的原生 ResourceQuota 对象相比,Application-Aware Quota (AAQ) Operator 提供了更灵活且可扩展的配额管理。

在多租户集群环境中,多个工作负载在共享基础架构和资源上运行,使用 Kubernetes 原生 ResourceQuota 对象来限制聚合 CPU 和内存消耗会导致 OpenShift Virtualization 工作负载的基础架构开销和实时迁移挑战。

OpenShift Virtualization 需要大量计算资源分配来处理虚拟机(VM)实时迁移并管理 VM 基础架构开销。在升级 OpenShift Virtualization 时,您必须迁移虚拟机来升级 virt-launcher pod。但是,在存在资源配额时迁移虚拟机可能会导致迁移,然后升级会失败。

使用 AAQ 时,您可以为虚拟机分配资源,而无需干扰集群级别的活动,如升级和节点维护。AAQ Operator 还支持非计算资源,从而消除了单独管理原生资源配额和 AAQ API 对象的需要。

7.14.2.1.1. AAQ Operator 控制器和自定义资源

AAQ Operator 引入了两个新的 API 对象,定义为自定义资源定义 (CRD),用于管理多个命名空间中的替代配额实施:

  • ApplicationAwareResourceQuota :设置每个命名空间的聚合配额限制。ApplicationAwareResourceQuota API 与原生 ResourceQuota 对象兼容,并共享相同的规格和状态定义。

    清单示例

    apiVersion: aaq.kubevirt.io/v1alpha1
    kind: ApplicationAwareResourceQuota
    metadata:
      name: example-resource-quota
    spec:
      hard:
        requests.memory: 1Gi
        limits.memory: 1Gi
        requests.cpu/vmi: "1"
        requests.memory/vmi: 1Gi
    # ...

    • spec.hard.requests.cpu/vmi 定义默认命名空间中虚拟机工作负载允许的最大 CPU 量。
    • spec.hard.requests.memory/vmi 定义默认命名空间中虚拟机工作负载允许的最大 RAM 量。
  • ApplicationAwareClusterResourceQuota:在集群范围内镜像 ApplicationAwareResourceQuota 对象。它与原生 ClusterResourceQuota API 对象兼容,并共享相同的规格和状态定义。在创建 AAQ 集群配额时,您可以通过编辑 spec.selector.labelsspec.selector.annotations 字段来选择多个命名空间。只有在 HyperConverged 自定义资源 (CR) 中的 spec.allowApplicationAwareClusterResourceQuota 字段被设置为 true 时,才能创建一个 ApplicationAwareClusterResourceQuota 对象。

    清单示例

    apiVersion: aaq.kubevirt.io/v1alpha1
    kind: ApplicationAwareClusterResourceQuota
    metadata:
      name: example-resource-quota
    spec:
      quota:
        hard:
          requests.memory: 1Gi
          limits.memory: 1Gi
          requests.cpu/vmi: "1"
          requests.memory/vmi: 1Gi
      selector:
        annotations: null
        labels:
          matchLabels:
            kubernetes.io/metadata.name: default
    # ...

    注意

    如果设置了 spec.selector.labelsspec.selector.annotations 字段,则会只选择与这两个字段匹配的命名空间。

AAQ 控制器使用调度授权机制来评估是否有足够资源可用于运行工作负载。如果是这样,则调度门会从 pod 中删除,并被视为可调度。配额用量状态已更新,以指示使用配额量。

如果工作负载的 CPU 和内存请求和限值超过强制的配额用量限制,则 pod 会保持在 SchedulingGated 状态,直到有足够的配额可用。AAQ 控制器会创建一个类型为 Warning 的事件,其中包含超过配额的原因。您可以使用 oc get events 命令查看事件详情。

重要

spec.nodeName 字段设置为特定节点的 Pod 无法使用与 HyperConverged CR 中定义的 spec.namespaceSelector 标签匹配的命名空间。

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部