動的リソースのオーバーコミットシナリオでは、高優先度の保証アプリケーションまたはバースト可能アプリケーションの未使用リソースを低優先度のBestEffortタスクにオーバーコミットできます。 BestEffort (BE) ポッドのCPU使用率を妥当な範囲内に維持するために、Container Service for Kubernetes (ACK) にはCPU抑制機能が用意されています。これにより、ノード上のレイテンシに敏感な (LS) ポッドの安定した動作に優先順位を付けることができます。
この機能をよりよく理解して使用するために、Kubernetesの公式ドキュメントの次のトピックを最初に読むことをお勧めします: ポッドQoSクラスとコンテナーとポッドへのメモリリソースの割り当て。
この機能は、動的リソースのオーバーコミット機能と一緒に使用する必要があります。 詳細については、「動的リソースのオーバーコミットメントの有効化」をご参照ください。
CPU抑制を有効にする理由
クラスタリソースの使用を強化するために、動的リソースオーバーコミットモデルは、高優先度のLSタスク用のリソースバッファを予約して、アップストリームおよびダウンストリームリンクにおける負荷変動を管理する一方で、オーバーコミットされたリソースを低優先度のBEタスクに割り当てることを可能にする。 ノード上のLSポッドに十分なCPUリソースを確保するために、ack-koordinatorを使用して、ノード上のBEポッドのCPU使用率を制限できます。 CPU抑制機能は、ノードのリソース使用率を指定されたしきい値未満に維持し、beポッドで使用できるCPUリソースの量を制限できます。 これにより、ノード上のコンテナの安定性が保証されます。 CPU抑制機能は、ノードの全体的なリソース使用量がしきい値を下回った場合に、BEポッドによって使用されるCPUリソースの量を制限できます。 これにより、ノード上のコンテナが安定して実行するのに十分なリソースを確保できます。
次のリストは、図で使用される用語を説明しています。
CPUしきい値: ノードのCPU使用率しきい値。
ポッド (LS).Usage: LSポッドのCPU使用率。
BEのCPU制限: BEポッドのCPU使用率。
beポッドで使用できるCPUリソースの量は、LSポッドのCPU使用率の変動に基づいて調整されます。 動的リソースオーバーコミットメントモデルでは、CPUしきい値と予約済みCPU透かしに同じ値を使用することを推奨します。 これにより、CPUリソース使用率の一貫したレベルが保証されます。
前提条件
ACK Proクラスターが作成されました。 詳細については、「ACK Proクラスターの作成」をご参照ください。
ack-koordinator 0.4.0以降がインストールされます。 ack-koordinatorのインストール方法の詳細については、「ack-koordinator (ack-slo-manager) 」をご参照ください。
課金
ack-koordinatorコンポーネントをインストールまたは使用する場合、料金はかかりません。 ただし、次のシナリオでは料金が請求される場合があります。
ack-koordinatorは、インストール後にワーカーノードリソースを占有する管理対象外のコンポーネントです。 コンポーネントのインストール時に、各モジュールが要求するリソースの量を指定できます。
既定では、ack-koordinatorは、リソースプロファイリングや細粒度スケジューリングなどの機能のモニタリングメトリックをPrometheusメトリックとして公開します。 ack-koordinatorのPrometheusメトリクスを有効にし、PrometheusのManaged Serviceを使用する場合、これらのメトリクスはカスタムメトリクスと見なされ、料金が課金されます。 料金は、クラスターのサイズやアプリケーションの数などの要因によって異なります。 Prometheusメトリクスを有効にする前に、Prometheusのマネージドサービスの課金トピックを読んで、カスタムメトリクスの無料クォータと課金ルールについて確認することをお勧めします。 リソース使用量を監視および管理する方法の詳細については、「観察可能なデータ量と請求書の照会」をご参照ください。
手順
ConfigMapを使用して、クラスターレベルでCPU抑制機能を有効にできます。 さらに、CPU抑制を有効にしたノードのCPU使用率のしきい値 (cpuSuppressThresholdPercent
) などの関連パラメーターをConfigMapで設定して、きめ細かいリソース管理を実現できます。
次のconfigmapコンテンツに基づいて、ConfigMap. yamlという名前のファイルを作成します。
apiVersion: v1 kind: ConfigMap metadata: name: ack-slo-config namespace: kube-system data: # Enable CPU Suppress. resource-threshold-config: | { "clusterStrategy": { "enable": true } }
ack-slo-config
ConfigMapがkube-system
名前空間に存在するかどうかを確認します。ack-slo-config
ConfigMapが存在する場合は、PATCHメソッドを使用してConfigMapを更新することを推奨します。 この方法では、ConfigMapの他の設定は変更されません。kubectl patch cm -n kube-system ack-slo-config --patch "$(cat configmap.yaml)"
ack-slo-config
ConfigMapが存在しない場合は、次のコマンドを実行してack-slo-configという名前のConfigMapを作成します。kubectl apply -f configmap.yaml
次のコマンドを実行して、ノードのBEポッドに割り当てられているCPUコアを照会します。
cat /sys/fs/cgroup/cpuset/kubepods.slice/kubepods-besteffort.slice/cpuset.cpus
期待される出力:
10-25,35-51,62-77,87-103
予想される出力は、次のCPUコアがノードのBEポッドに割り当てられていることを示しています:
10-25,35-51,62-77,87-103
。 これは、現在のリソース使用量に基づいて、CPU Suppressを有効にした後、BEポッドの使用可能なCPUリソースが制限されることを示します。オプション: 次のConfigMapコンテンツに基づいて詳細パラメーターを設定します。
CPU Suppressを使用すると、CPU使用率のしきい値をさらに設定できます。
apiVersion: v1 kind: ConfigMap metadata: name: ack-slo-config namespace: kube-system data: resource-threshold-config: | { "clusterStrategy": { "enable": true, "cpuSuppressThresholdPercent": 65 } }
次の表に、主要なパラメーターを示します。
パラメーター
タイプ
値の範囲
説明
enable
Boolean
true
false
true
: CPU Suppressを有効にします。false
: CPU Suppressを無効にします。
cpuSuppressThresholdPercent
Integer
[0, 100]
ノードのCPU使用率のしきい値。 デフォルト値:
65
単位: % 。