9.15.2. Application-Aware Quota (AAQ) Operator の設定
Application-Aware Quota (AAQ) Operator を使用して、OpenShift Container Platform クラスター内の各コンポーネントのリソースクォータをカスタマイズおよび管理できます。
9.15.2.1. AAQ Operator について リンクのコピーリンクがクリップボードにコピーされました!
Application-Aware Quota (AAQ) Operator は、OpenShift Container Platform プラットフォームのネイティブ ResourceQuota オブジェクトよりも、さらに柔軟で拡張可能なクォータ管理を提供します。
複数のワークロードが共有のインフラストラクチャーおよびリソース上で動作するマルチテナントクラスター環境では、Kubernetes ネイティブの ResourceQuota オブジェクトを使用して CPU とメモリーの総消費量を制限すると、OpenShift Virtualization ワークロードのインフラストラクチャーオーバーヘッドとライブマイグレーションの課題が発生します。
OpenShift Virtualization では、仮想マシンのライブマイグレーションを処理し、仮想マシンのインフラストラクチャーオーバーヘッドを管理するために、大量のコンピューティングリソースを割り当てる必要があります。OpenShift Virtualization をアップグレードする場合は、仮想マシンを移行して virt-launcher Pod をアップグレードする必要があります。ただし、リソースクォータが存在する状態で仮想マシンを移行すると、移行と、その後のアップグレードが失敗する可能性があります。
AAQ を使用すると、アップグレードやノードのメンテナンスをはじめとするクラスターレベルのアクティビティーを妨げることなく、仮想マシンにリソースを割り当てることができます。AAQ Operator はコンピュートリソース以外のリソースもサポートするため、ネイティブリソースクォータと AAQ API オブジェクトを個別に管理する必要がなくなります。
9.15.2.1.1. AAQ Operator Controller とカスタムリソース リンクのコピーリンクがクリップボードにコピーされました!
AAQ Operator は、複数の namespace をまたぐ代替クォータ実装を管理するためのカスタムリソース定義 (CRD) として定義された 2 つの新しい API オブジェクトを導入します。
ApplicationAwareResourceQuota: namespace ごとに適用される総クォータ制限を設定します。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は、デフォルトの namespace における仮想マシンワークロードに許可される最大 CPU 量を定義します。 -
spec.hard.requests.memory/vmiは、デフォルトの namespace における仮想マシンワークロードに許可される最大 RAM 量を定義します。
-
ApplicationAwareClusterResourceQuota:ApplicationAwareResourceQuotaオブジェクトをクラスタースコープでミラーリングします。これはネイティブのClusterResourceQuotaAPI オブジェクトと互換性があり、同じ仕様とステータス定義を共有します。AAQ クラスタークォータの作成時に、spec.selector.labelsまたはspec.selector.annotationsフィールドを編集して、選択したアノテーションかラベル、もしくはその両方に基づいて複数の namespace を選択できます。ApplicationAwareClusterResourceQuotaオブジェクトは、HyperConvergedカスタムリソース (CR) のspec.allowApplicationAwareClusterResourceQuotaフィールドがtrueに設定されている場合に限り作成できます。マニフェストの例
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フィールドの両方が設定されている場合は、両方に一致する namespace のみが選択されます。
AAQ コントローラーは、スケジューリングゲートメカニズムを使用して、ワークロードを実行するために使用できるリソースが十分にあるか評価します。そうである場合、スケジューリングゲートは Pod から削除され、スケジューリングの準備が整ったと見なされます。クォータ使用状況ステータスが更新され、使用されているクォータの量が表示されます。
ワークロードの CPU およびメモリー requests と limits が強制されたクォータ使用量制限を超える場合、十分なクォータが利用可能になるまで Pod は SchedulingGated ステータスのままになります。AAQ コントローラーは、詳しいクォータ超過理由を含む Warning タイプのイベントを作成します。oc get events コマンドを使用してイベントの詳細を表示できます。
spec.nodeName フィールドが特定のノードに設定されている Pod は、HyperConverged CR で定義されている spec.namespaceSelector ラベルと一致する namespace を使用できません。