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:设置每个命名空间的聚合配额限制。ApplicationAwareResourceQuotaAPI 与原生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对象。它与原生ClusterResourceQuotaAPI 对象兼容,并共享相同的规格和状态定义。在创建 AAQ 集群配额时,您可以通过编辑spec.selector.labels或spec.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.labels和spec.selector.annotations字段,则会只选择与这两个字段匹配的命名空间。
AAQ 控制器使用调度授权机制来评估是否有足够资源可用于运行工作负载。如果是这样,则调度门会从 pod 中删除,并被视为可调度。配额用量状态已更新,以指示使用配额量。
如果工作负载的 CPU 和内存请求和限值超过强制的配额用量限制,则 pod 会保持在 SchedulingGated 状态,直到有足够的配额可用。AAQ 控制器会创建一个类型为 Warning 的事件,其中包含超过配额的原因。您可以使用 oc get events 命令查看事件详情。
将 spec.nodeName 字段设置为特定节点的 Pod 无法使用与 HyperConverged CR 中定义的 spec.namespaceSelector 标签匹配的命名空间。