Cryostat 2.1のサイドカーレポートによるリソース消費量の削減

Red Hat で Java Platform Advocate として OpenJDK を担当している伊藤ちひろ(@chiroito)です。

この記事は、Red Hat Developerのブログ記事、Eat up fewer resources in Cryostat 2.1 with sidecar reports | Red Hat Developer の翻訳記事です。


https://developers.redhat.com/sites/default/files/styles/article_feature/public/2020_Java_ContainerJFR_Featured_Article__A-01.png?itok=K_g-UdJY

Cryostatは、Kubernetes上でJDK Flight Recorderのデータを管理するためのツールです。Cryostatのバージョン2.1では、JDKフライトレコーディングの自動分析レポートを生成するために、サイドカーレポートコンテナを使用するオプションが導入されています。以前は、メインのCryostatコンテナがレポート生成を処理していました。レポート生成はリソース集約的な操作であり、その結果、ユーザーはピーク時のリソース要求を満たすためにCryostatコンテナを過剰に割り当てていることに気づくかもしれません。レポート生成をしていない場合、それらのリソースは逆に使用されずに終わるかもしれません。

レポート生成をサイドカーコンテナに委ねるこの新しいオプションにより、ユーザはより効率的にリソースを準備しやすくなりました。レポート作成が重要でない場合、メインの Cryostat コンテナは、Web サーバーや HTTP および JMX を介したさまざまな軽量操作を含めて、小さなリソースしか必要としません。ユーザは、レポート生成の一連の作業に基づいて、サイドカー・レポート・コンテナに適宜リソースを割り当て、そのコンテナのレプリカを任意の数だけ起動させることができます。

本記事では、Red Hat OpenShift上でCryostatを使用して分析レポート自動生成のためのサイドカーレポートコンテナレプリカを設定するプロセスについて説明します。

サイドカーコンテナを使用するための前提条件

開始するには、Cryostat Operator がインストールされた稼働中の OpenShift または Kubernetes クラスタを使用します。OpenShift または Kubernetes クラスタにまだアクセスできない場合は、Red Hat OpenShift Local を試してみてください。この記事では、Cryostat Operator と対話するために OpenShift UI を利用します。

次に、Java Management Extensions (JMX) を有効にし、Cryostat Operator と同じ名前空間で動作するように公開した、コンテナ化した Java アプリケーションをデプロイします。サンプルQuarkusアプリケーションを作成してこの要件を満たす方法の詳細については、赤帽エンジニアブログの記事『Cryostatを使用するためのJavaアプリケーションの設定 - 赤帽エンジニアブログ』を参照してください。

サイドカー・レポート・コンテナを有効にして、Cryostatリソースを作成

Cryostat Operator がインストールされると、サイドカー・レポート・コンテナのセットアップは簡単な作業になります。OpenShift Web コンソールの Installed Operators タブにある Cryostat Operator に移動し、Cryostat リソースのインスタンスを作成します (図 1 を参照)。

https://developers.redhat.com/sites/default/files/Image%201.jpg

図1:Cryostatリソースを作成するためにCreate instanceを選択

図2に示すように、様々な設定項目がある Create Cryostat ページが表示されます。

https://developers.redhat.com/sites/default/files/Image%202_0.png

図2:Cryostatリソースの設定オプション

下に移動して Report Options を選択し、次に Resources を選択します (図 3 を参照)。

https://developers.redhat.com/sites/default/files/Image%203.png

図3:レポート生成の設定オプションを選択

次に、デプロイするレポート・サイドカー・コンテナのレプリカ数を選択し、各レプリカの Limits および Requests リソースを設定します。デフォルトのレプリカ数は0であり、メインのCryostatコンテナがサブプロセスを通じてレポート生成を処理することを意味します。このサブプロセスのデフォルトの最大ヒープサイズは200MiBですが、必要に応じてユーザが上限を調整できます。少なくとも 1 つのレポートサイドカーコンテナレプリカを要求すると、Sub Process Max Heap Size フィールドは無視されます。

この例では、図 4 に示すレポートオプションの設定を使用して Cryostat インスタンスを作成する必要があります。

https://developers.redhat.com/sites/default/files/Image%204.png

図4:Replicas、Limits、Requestsフィールドをこのように設定し、下に移動してCreateを選択

自動解析レポートを作成するには、Cryostat Web クライアントに移動します。Cryostat Operatorページの Installed Operators から、Cryostat タブを選択し、cryostat-sampleリソースを選択します。表示されたページで、WebクライアントのURLを確認できます(図5)。

https://developers.redhat.com/sites/default/files/cryostat-application-url.jpg

図5:アプリケーションのURLに従って、Cryostat Webクライアントにアクセス

プロンプトが表示され、Webクライアントで認証するためのクラスタの認証情報が要求されます。ログインしたら、ターゲットアプリケーションを選択し(自作でも、上記のリンク先のサンプルQuarkusアプリケーションでも)、Recordingsタブに移動します(図6)。一定時間のカスタムフライト レコーディングを作成します。記録終了後、記録の自動分析レポートを要求します。これらのステップの詳細な手順については、Cryostatの使用に関するガイドを参照してください。

https://developers.redhat.com/sites/default/files/Image%206.png

図6:自動分析レポートをリクエストすると、サイドカーコンテナでのレポート作成が開始

サイドカー・レポート・コンテナがレポート生成を処理したことを再確認するには、OpenShift コンソールに戻り、Workloads タブの下の Pods に移動します。ここで、sidecar レポートコンテナが含まれるポッドを見つけられます (図 7 を参照)。

https://developers.redhat.com/sites/default/files/Image%207.jpg

図7:cryostat-sample-reportsポッドを選択します。ポッド名には、ランダムに生成された英数字の文字列も付加

次に、図 8 に示す Logs タブに移動し、ログストリームを一時停止します。次に、繰り返される HTTP GET /health リクエストを下に移動し、サイドカー・レポート・コンテナが Cryostat メイン・コンテナからの HTTP リクエストを受信し、実行したことを確認するログ・メッセージを探します。

https://developers.redhat.com/sites/default/files/Image%208.jpg

図8:サイドカーレポートコンテナは、生成されたレポートに対するメインのCryostatコンテナからの要求を受信し、応答

まとめ

解析レポートの自動生成にサイドカーレポートコンテナを使用することで、ユーザーはCryostat用のリソースを効率的に用意できます。Cryostatの詳細については、cryostat.ioを参照してください。質問、コメント、フィードバックは、GitHubで私たちとつながるか、私たちのメーリングリストに参加してください。

赤帽エンジニアブログでCryostatのチュートリアルをもっと見る。

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。