Red Hat OpenShift Platform 4 ハンズオンワークショップ紹介 〜Dev Module2:デバッグ、モニタリング、継続的デリバリー〜

Red Hatのソリューションアーキテクトの井上たかひろです。

「Module1:既存アプリケーションの最適化」に続いて「Module2:デバッグ、モニタリング、継続的デリバリー」についてざっくり紹介いたします。

Module2では、OpenShift上でCodeReady Workspacesを使用したJavaアプリのデバッグやアプリのパフォーマンスモニタリング、 Jenkinsを使用したCI/CDパイプラインの作成を行います。

使うソフトウェア:JBoss, Jenkins, Prometheus, Grafanaなど

Module2:デバッグ、モニタリング、継続的デリバリー

ハンズオンで実施する項目

  • Jenkinsを使用してCI/CDパイプラインを作成し、マイクロサービスアプリケーションへのアップデートのデプロイを自動化
  • CodeReady Workspacesを使用したJavaアプリのデバッグ(ライブコーディング)
  • Jaegarm, Prometheus, Grafanaなどを使用してアプリケーションのパフォーマンスを計測し、モニタリング

Jenkinsを使用してCI/CDパイプラインを作成し、マイクロサービスアプリケーションへのアップデートのデプロイを自動化

OpenShift上で開発環境と本番環境のプロジェクトを作成し、OpenShiftのパイプラインビルドを使って、開発環境から本番環境にデプロイします。
下図が構成になります。開発環境がcoolstore-devで、本番環境がcoolstore-podになります。 f:id:tinoue0219:20210618220108p:plain

ガイドを見ながら、CodeReady Workspacesのターミナルウィンドウから「oc project coolstore-dev」等を叩いたりしながら、開発環境と本番環境を作っていきます。
開発環境は以下のようになります。

f:id:tinoue0219:20210618221119p:plain:w600

次に、Jenkinsを入れます。これはカタログからおじさんを選べば入ります。
f:id:tinoue0219:20210618221525p:plain:w600

ここから、Jenkins自動化エンジンで実行するための Jenkins pipelineを作っていきます。
OpenShiftではJenkins pipelines をプラットフォームに統合することでCI/CD Pipelinesの構築を簡素化してます。
また、OpenShift 4からはKubernetes向けのCI/CDの進化形である Tekton Pipelines も導入されています(Module4で実施します)

パイプラインを使って、開発環境イメージを本番環境へデプロイしてみます。 f:id:tinoue0219:20210618222623p:plain:w600

2分ぐらいで終わります。下図のようにパイプラインの進行状況を見ることができます。 f:id:tinoue0219:20210618222715p:plain:w600

アプリケーションがデプロイされて実行できることも確認できます。 f:id:tinoue0219:20210618222936p:plain:w600

次に、パイプラインへ承認ステップを追加してみます。(yamlを編集しています) f:id:tinoue0219:20210618223248p:plain:w600

ガイドを見ながら、Webアプリをちょこっと修正して、もう一度パイプラインを実行します。
黄色でパイプランが承認待ちになっているのがわかります。 f:id:tinoue0219:20210618223529p:plain:w600

上記の「Input Required 」のリンクを押すとJenkisの画面に移動します。
ログインすると、承認画面になり、承認すると本番環境へのデプロイが開始されます。 f:id:tinoue0219:20210618223743p:plain

このような流れでOpenShift上でCI/CDを体験できます。
JenkinsやTektonのパイプランがOpenShiftに統合されているので構築が容易です。

CodeReady Workspacesを使用したJavaアプリのデバッグ(ライブコーディング)

開発モードのQuarkusでは、バックグラウンドコンパイルで「ライブコーディング」ができます。
Javaファイルやリソースファイルを変更して更新すると、変更が自動で反映されます。(pom.xmlなども)
この機能を使うことで、デバックしながら修正をかけたりすることで、開発効率が向上します。
これは、体験して頂くのが一番いいかなと思います。

ここでは、CodeReady Workspacesのデバック画面をご紹介します。
ブラウザ上のIDEでも、デスクトップアプリと遜色がありません。 f:id:tinoue0219:20210618225103p:plain:w600

CodeReady Workspacesは、ブラウザベースの利用なので、開発者メンバへの配布が容易です。
ある程度の規模のプロジェクトでは、開発環境の準備、プロジェクトの共有設定などの手間がかかり、さらには環境差異でハマることもあるかと思います。
CodeReady Workspacesでは、そのような問題の解決策についても活用できます。

Jaegarm, Prometheus, Grafanaなどを使用してアプリケーションのパフォーマンスを計測し、モニタリング

クラウドネイティブ・アプリケーションもしくはマイクロサービスが増えてくると、アプリの数が増えるので、モニタリングが複雑になりがちです。
ここでは、JaegarやPrometheusなどを使って、アプリケーションの監視を実践します。 なお、Module3では、Service Meshを使っての可視化や監視を実践します。

ガイドを見ながら、Jaegarのデプロイ、Quarkusアプリにトレース拡張の設定などをやっていきます。
アプリを実行した際のトレースを見ていきます。

f:id:tinoue0219:20210618232031p:plain:w800

アプリが1つなので、効果があまり感じられないかも知れないですが、アプリが増えてくると、応答性能のボトルネックなどの把握が容易になります。 f:id:tinoue0219:20210618232101p:plain:w800

ガイドを見ながら、PrometheusとGrafanaのデプロイ、Quarkusアプリに quarkus-micrometer(メトリクス)の設定などをやっていきます。
Prometheusで何回アプリが実行されたかを表示しています。

f:id:tinoue0219:20210618232942p:plain:w800

Grafanaで何回アプリが実行されたかとJavaVMのメモリを表示するダッシュボードになります。 f:id:tinoue0219:20210618233213p:plain:w800

このような流れでアプリケーションのパフォーマンスを計測し、モニタリングを体験できます。
Module3では、Service Meshでサイドカーを使うことで、アプリに手を入れずにモニタリングを実現します。


手順の類はだいぶ端折っているので、短く感じるかもしれませんが、実際にハンズオンを行うとそこそこのボリュームです。
ガイドに従って進めればプロジェクト作成、ビルド&デプロイなどの一連の流れとOpenShiftでのアプリ開発やマイクロサービスのモニタリングの体験・理解ができると思います。
ワークショップにご興味があればご連絡ください。

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