この記事は、Huawei Cloud Community「CCEクラウドネイティブ混合展開シナリオにおけるオンラインタスクのプリエンプティング、オフラインタスクのCPUリソースの抑制、およびオンラインタスクのサービス品質の確保の効果に関するテスト」から共有されています。著者:友達を作ることができます。 。
背景
エンタープライズ IT 環境では通常、2 つの主要なタイプのプロセスが実行されます。1 つはオンライン サービスで、もう 1 つはオフライン操作です。
オンライン タスク: 長い実行時間、サービス トラフィックおよびリソース使用率には潮汐特性があり、遅延の影響を受けやすく、電子商取引トランザクション サービスなどの高いサービス SLA 要件があります。
オフラインタスク: 実行時間は複数の間隔に分割され、動作中のリソース使用率は高く、遅延は影響を受けず、フォールトトレランス率は高く、ビッグデータ処理などの中断は一般に再実行が可能です。
コロケーションの主な形式は、オンライン タスクとオフライン タスクを同じノードにデプロイすることでリソースの使用率を向上させることです。たとえば、以前は高サービス SLA で 3 つのオンライン タスクをデプロイしていたノードが、現在は 3 つのオンライン タスクと 3 つのオフライン タスクをデプロイしています。オフライン サービスは、オンライン サービスのサービス品質に影響を与えることなく、さまざまな期間のオンライン サービスのアイドル リソースを利用します。
コンテナ コロケーション レベルでは、主に次のことが関係します。1) スケジューリング レベルで、ノード スケジューリング リソースが過剰にスケジュールされ、オンライン タスクとオフライン タスクが混在して同じノードにスケジュールされます。2) CPU レベルで、オンライン タスクがスケジュールされます。 3) メモリ レベルはこの記事では紹介されていません。共存テクノロジーの CPU の能力により、システムは操作プロセス中に、オンラインとオフラインのタスク リソースの使用状況に応じて、オフライン タスク リソースのオンライン「プリエンプション」と「抑制」を自動的に完了することが実現できます。オンライン リソースのリソース需要を確保するため。 4 コア マシンを例に挙げます。
- オンライン タスクが 3 コアの CPU リソースを必要とする場合、システムはオフライン タスクを「抑制」して最大 1 コアの CPU リソースを使用する必要があります。
- 当時、オンライン タスクはビジネスのピーク時に 1 コアの CPU リソースしか使用していませんでしたが、オンライン タスクのビジネスが増加すると、システムは残りの CPU リソースを短期間で使用できるようになりました。オフラインのビジネス CPU リソースを「プリエンプト」する可能性があります。
環境整備
環境要件
クラスターのバージョン:
- v1.19 クラスター: v1.19.16-r4 以降
- v1.21 クラスター: v1.21.7-r0 以降
- v1.23 クラスター: v1.23.5-r0 以降
- v1.25以降
クラスタ タイプ: CCE 標準クラスタまたは CCE ターボ クラスタ。
ノードOS : EulerOS 2.9 (kernel-4.18.0-147.5.1.6.h729.6.eulerosv2r9.x86_64) または Huawei Cloud EulerOS 2.0
ノード タイプ: エラスティック仮想マシン。
Volcano プラグインのバージョン: 1.7.0 以降。
環境情報
CCE クラスターは kube-prometheus-stack、grafana、volcano プラグインをデプロイします
CPU 抑制とプリエンプションのデモンストレーション
ストレステストのベースライン
デモに必要なワークロードを作成し、2 つのワークロードが同じノードにスケジュールされていることを確認します (ダッシュボード内の一般的な式はポッド名に関連付けられているため、ワークロード名を使用しないことをお勧めします。そうしないと、ダッシュボードの通常の表示)
種類:展開 APIバージョン: アプリ/v1 metadata: 名前: レディス 仕様: レプリカ: 1 セレクタ: マッチラベル: アプリ:リディス テンプレート: metadata: 作成タイムスタンプ: null ラベル: アプリ:リディス 注釈: prometheus.io/パス: /metrics prometheus.io/ポート: '9121' prometheus.io/scrape: 'true' 仕様: コンテナ: - 名前: コンテナ-1 画像: swr.cn-north-4.myhuaweicloud.com/testapp/redis:v6 リソース: 制限: CPU: '1' リクエスト: CPU: 250m - 名前: コンテナ-2 画像: bitnami/redis-exporter:最新 リソース: 制限: CPU: 250m メモリ: 512Mi リクエスト: CPU: 250m メモリ: 512Mi imagePullの秘密: - 名前: デフォルトの秘密 スケジューラ名: 火山 --- 種類:展開 APIバージョン: アプリ/v1 metadata: 名前:ストレス 仕様: レプリカ: 1 セレクタ: マッチラベル: アプリ:ストレス テンプレート: metadata: ラベル: アプリ:ストレス 仕様: コンテナ: - 名前: コンテナ-1 画像: swr.cn-north-4.myhuaweicloud.com/testapp/centos-stress:v1 指示: - /bin/bash 引数: -「-c」 - 真実である一方で、 hello をエコーします。 10寝ます。終わり リソース: 制限: CPU: '4' メモリ: 4Gi リクエスト: CPU: 2500m メモリ: 1Gi imagePullの秘密: - 名前: デフォルトの秘密 スケジューラ名: 火山 アフィニティ: ポッドアフィニティ: 必須スケジュール中無視実行中: - ラベルセレクター: 一致式: - キー: アプリ 演算子: で 値: - レディス 名前空間: - デフォルト トポロジーキー: kubernetes.io/ホスト名
redis-benchmark コマンドを使用して、redis192.168.1.159
のポッド IP のストレス テストを行います。
./redis-benchmark -h 192.168.1.159 -p 6379 -n 3000000 -c 100 –q -t SET、INCR、LPUSH、LPOP、RPOP、SADD、HSET、SPOP、ZADD、ZPOPMIN
grafana ページで Redis インジケーターと CPU 使用率を観察します。これらは、干渉することなくベースライン参照データとして使用できます。
非混合シーン
ハイブリッド デプロイメント用のノード プールを作成し、上記のワークロードを新しいノードに再デプロイします
redis-benchmark コマンドを再度使用して、redis192.168.1.172
のポッド IP のストレス テストを行います。
./redis-benchmark -h 192.168.1.172 -p 6379 -n 3000000 -c 100 –q -t SET、INCR、LPUSH、LPOP、RPOP、SADD、HSET、SPOP、ZADD、ZPOPMIN
ストレス コンテナーに入ります。redis インジケーターがベースラインに達して安定したら、コマンドを実行して CPU 使用率を増やします。
-c 4 -t 3600 の応力
grafana ページで Redis インジケーターと CPU 使用率を観察すると、ストレス コンテナーのストレス テスト中に Redis のパフォーマンス データが急速に低下していることがわかります。
混合シーン
ノード プールを更新し、詳細構成でノードのハイブリッド ラベルを構成します。volcano.sh/colocation="true"
ノードプールの構成管理をクリックします - kubeletコンポーネント構成 - ノードコロケーション機能を有効にします

ストレス テスト中に CPU 使用率がしきい値を超えた場合の直接のエビクションを回避するには、ノードのエビクションしきい値を 100 に変更します。
kubectl アノテーション ノード 192.168.0.209 volcano.sh/evicting-cpu-high-watermark=100
ストレス ワークロードのアノテーションを変更し、ストレスをオフライン ビジネスとしてマークします。Redis ワークロードを変更する必要はありません。
種類:展開 APIバージョン: アプリ/v1 metadata: 名前:ストレス 仕様: レプリカ: 1 セレクタ: マッチラベル: アプリ:ストレス テンプレート: metadata: ラベル: アプリ:ストレス 注釈: volcano.sh/qos-level: "-1" # オフライン ジョブの注釈 仕様: コンテナ: - 名前: コンテナ-1 画像: swr.cn-north-4.myhuaweicloud.com/testapp/centos-stress:v1 指示: - /bin/bash 引数: -「-c」 - 真実である一方で、 hello をエコーします。 10寝ます。終わり リソース: 制限: CPU: '4' メモリ: 4Gi リクエスト: CPU: 2500m メモリ: 1Gi imagePullの秘密: - 名前: デフォルトの秘密 スケジューラ名: 火山 アフィニティ: ポッドアフィニティ: 必須スケジュール中無視実行中: - ラベルセレクター: 一致式: - キー: アプリ 演算子: で 値: - レディス 名前空間: - デフォルト トポロジーキー: kubernetes.io/ホスト名redis-benchmark コマンドを使用して、redis
192.168.1.172
のポッド IP の ストレス テストを行います。
./redis-benchmark -h 192.168.1.172 -p 6379 -n 3000000 -c 100 –q -t SET、INCR、LPUSH、LPOP、RPOP、SADD、HSET、SPOP、ZADD、ZPOPMINストレス コンテナーに入ります。redis インジケーターがベースラインに達して安定したら、コマンドを実行して CPU 使用率を増やします。
-c 4 -t 3600 の応力
grafana ページで Redis インジケーターと CPU 使用率を確認します。混合シナリオでは、オフライン タスクがノードの CPU を使い果たそうとする場合でも、オペレーティング システムはオンライン タスクの CPU 要求を維持し、オンライン タスクのサービス品質を確保します。 。

1990 年代生まれのプログラマーがビデオ移植ソフトウェアを開発し、1 年足らずで 700 万以上の利益を上げました。結末は非常に罰的でした。 高校生が成人式にオープンソースプログラミング言語を自作―ネチズンの鋭いコメント: 詐欺横行でRustDesk依存、国内サービスの タオバオ(taobao.com)は国内サービスを一時停止、ウェブ版の最適化作業を再開 Java最も一般的に使用されている Java LTS バージョンは 17 、Windows 11 は減少し続ける Open Source Daily | Google がオープンソースの Rabbit R1 を支持、Microsoft の不安と野心; Electricがオープンプラットフォームを閉鎖 AppleがM4チップをリリース GoogleがAndroidユニバーサルカーネル(ACK)を削除 RISC-Vアーキテクチャのサポート Yunfengがアリババを辞任し、将来的にはWindowsプラットフォームで独立したゲームを制作する予定