最初のアプリケーションをVerrazzanoにデプロイ (2021/11/30)
最初のアプリケーションをVerrazzanoにデプロイ (2021/11/30)
https://blogs.oracle.com/developers/post/deploying-your-first-application-to-verrazzano
投稿者:Rafael Benevides | Principal Product Manager
Verrazzanoに関するこのブログシリーズの最初の投稿では、Verrazzanoをローカルにインストールして、アプリケーションのデプロイを開始する方法を紹介しました。今回は、Verrazzanoのインストールが完了したので、最初のマイクロサービスをVerrazzanoにデプロイする方法を紹介します。
アプリケーションをCloud Nativeアーキテクチャに移行するといえば、2つのアプローチがあります。
- ブラウンフィールド - レガシーコードの上にある既存のアプリケーションをモダナイズします。
- グリーンフィールド - ゼロからの新しいアプリケーション。レガシーコードは含まれない。
そこで、2つのMicroservicesで構成されるアプリケーションを作成し、Verrazzanoがどのように両方のアプローチに対応できるかを紹介します。1つはMicroProfile Helidonを使って書かれ、グリーンフィールドアプローチを示します。もう1つは、Weblogic Application Server上にデプロイされたJakarta EEを使って記述し、ブラウンフィールド・アプローチのデモを行う予定です。
このブログでは、ゼロからサンプルHelidonアプリケーションを作成し、Verrazzano上にデプロイします。その後、このサンプルアプリケーションでVerrazzanoが提供するいくつかの機能を見ていきます。
Mavenがインストールされていれば、以下のコマンドを実行するだけでプロジェクトが生成されます。
mvn -U archetype:generate -DinteractiveMode=false \
-DarchetypeGroupId=io.helidon.archetypes \
-DarchetypeArtifactId=helidon-quickstart-mp \
-DarchetypeVersion=2.4.0 \
-DgroupId=com.rafabene.verrazzano \
-DartifactId=helidon-ms \
-Dpackage=com.rafabene.verrazzano.demo
これでプロジェクトが生成できたので、Verrazzanoに公開する前に試しに作ってみましょう。以下のコマンドでプロジェクトをコンパイル、パッケージ化、実行しましょう。
cd helidon-ms/
mvn package
java -jar target/helidon-ms.jar
1つのターミナルでアプリケーションを実行したまま、もう1つのターミナルを開いて、このアプリケーションを試してみてください。Helidonアーキタイプは、呼び出すことのできる「hello world」サービスのサンプルを提供します。これは、後でWeblogicを使ってデプロイする2番目のjavaサービスに「Greetingサービス」を提供するために使用される予定です。とりあえず、このHelidonのjavaサービスを以下のコマンドで試してみましょう。
curl -X GET http://localhost:8080/greet/Rafael%20Benevides
結果が {"message": "Hello Rafael Benevides!"} のように表示されれば、アプリケーションは正常に動作しています。さて、いよいよVerrazzanoにデプロイしてみましょう。
1 - OAM (Open Application Model)について簡単に紹介
Verrazzanoが他のKubernetes Platformと大きく異なる点は、OAM (Open Application Model) を利用することでアプリケーションとサービスの配線を自動化することです。OAMとは、CNCFが主催するランタイムに依存しないクラウドネイティブアプリケーションを定義するための仕様です。
Kubernetesを使い始めるには、KubernetesユーザーはLabel、Deployments、Services、Ingress、ConfigMaps、PersistentVolumesなど、いくつかのKubernetesコンセプトに精通している必要があります。これらの概念はVerrazzanoにアプリケーションをデプロイする上で重要ですが、新規ユーザーはOpen Application Modelにも精通していれば、Verrazzanoからより多くのものを引き出すことができます。このため、今回構築したHelidonアプリケーションをデプロイする前に、OAMの5つのコアコンセプトについて理解しておきましょう。
- コンポーネントは、実行可能なユニットとその説明を表す。
- ワークロードの種類は、コンポーネントが実行可能なさまざまなワークロードを識別します。VerrazzanoはHelidon、Weblogic、Coherenceのワークロードを提供
- Traitsは、コンポーネントに運用に特化した機能を追加するオーバーレイである。Traitsは、開発者/ソフトウェア所有者の関心事ではなく、オペレータの関心事を表す。VerrazzanoはIngressとMetricsのTraitを提供
- アプリケーションスコープは、共通のプロパティや依存関係を持つコンポーネントをグループ化し、アプリケーションの境界を表す。
- アプリケーション構成は、コンポーネントインスタンスのセット、それらの特性、それらが配置されるアプリケーションスコープ、構成パラメータとメタデータを組み合わせたものである。
したがって、アプリケーションは、一連の動作特性を持ち、1つまたは複数のアプリケーション境界に一緒にスコープされたコンポーネントの集合体です。
Open Application Modelで指定されたパーツがどのようなものであるかがわかったところで、作成したアプリケーションをVerrazzanoにデプロイしてみます。
2 - Verrazzanoにコンポーネントをデプロイ
Verrazzanoにコンポーネントをデプロイする前に、コンテナイメージを利用できるようにする必要があります。そこで、このHelidonアプリケーションのコンテナイメージを構築し、以下のコマンドでKindにロードしてみましょう。
docker build -t myrepo/myuser/helidon:1.0 .
kind load docker-image myrepo/myuser/helidon:1.0
もう一つ必要なのは、このアプリケーションのためのkubernetesの名前空間です。以下のコマンドを使用して、ネームスペースを作成してみましょう。2番目のコマンドは、Verrazzanoによって管理され、Istioに対して有効なネームスペースであることを示すラベルを追加します。
kubectl create namespace demo-application
kubectl label namespace demo-application verrazzano-managed=true istio-injection=enabled
名前空間を作成した状態で、component.yamlというファイルを以下の内容で作成します。
apiVersion: core.oam.dev/v1alpha2
kind: Component
metadata:
name: hello-helidon-component
spec:
workload:
apiVersion: oam.verrazzano.io/v1alpha1
kind: VerrazzanoHelidonWorkload
metadata:
name: hello-helidon-workload
labels:
app: hello-helidon
spec:
deploymentTemplate:
metadata:
name: hello-helidon-deployment
podSpec:
containers:
- name: hello-helidon-container
image: "myrepo/myuser/helidon:1.0"
ports:
- containerPort: 8080
name: http
そして、先ほど作成したネームスペース `demo-application` に、以下のコマンドで適用します。
kubectl apply -n demo-application -f component.yaml
このステップでは、Componentリソースの検証および作成を行います。その結果、他のリソースやオブジェクトが作成されることはありません。将来適用されるアプリケーションの構成は、このComponentリソースを参照する可能性があります。つまり、このコンポーネントのデプロイを完了するために、OAM Application Configuration を使用してアプリケーションを構成する必要があります。このステップでは、application-config.yaml というファイルを、以下の内容で作成します。
apiVersion: core.oam.dev/v1alpha2
kind: ApplicationConfiguration
metadata:
name: hello-helidon-appconf
annotations:
version: v1.0.0
description: "Hello Helidon application"
spec:
components:
- componentName: hello-helidon-component
traits:
- trait:
apiVersion: oam.verrazzano.io/v1alpha1
kind: MetricsTrait
spec:
scraper: verrazzano-system/vmi-system-prometheus-0
- trait:
apiVersion: oam.verrazzano.io/v1alpha1
kind: IngressTrait
metadata:
name: hello-helidon-ingress
spec:
rules:
- paths:
- path: "/greet"
pathType: Prefix
OAM コンポーネントで行ったのと同様に、名前空間 `demo-application` に適用します。
kubectl apply -n demo-application -f application-config.yaml
この操作は、多くのVerrazzanoオペレーターの起動の引き金となります。これらのオペレータは、集合的にアプリケーションを提供しサポートする他のKubernetesオブジェクト(例えば、Deployments、ReplicaSets、Pods、Services、Ingresses)を作成します。
3 - デプロイされたコンポーネントを探索
デプロイされたComponentにアクセスする前に、VerrazzanoがKubernetesクラスタに自動的に作成してくれたものを理解しましょう。この探索のために、Verrazzanoのコンソールを開いてみましょう。Verrazzanoコンソールのアクセス方法、verrazzanoのユーザー認証情報の取得方法については、前回のブログ記事で詳しく説明しています。
しかし、簡単にするために、以下のコマンドを使ってコンソールのURLを表示し、verrazzanoのユーザークレデンシャルを取得しましょう。
kubectl get vz -o jsonpath="{.items[].status.instance}" | jq .
kubectl get secret \
--namespace verrazzano-system verrazzano \
-o jsonpath={.data.password} | base64 \
--decode; echo
Verrazzanoコンソールにログインすると、他のすべてのコンソールのURLだけでなく、デプロイされたApplicationとComponentへのリンクが表示されるはずです。
VerrazzanoHelidonWorkloadを開くと(hello-helidon-appconf -> hello-helidon-component -> VerrazzanoHelidonWorkloadを参照)、Kubernetes DeploymentとServiceが自動的に作成されていることが確認できると思います。
デプロイされたComponentのTraitを開くと、Certificate、Istio Gateway、Istio VirtualServiceも自動的に作成されていることがわかります。
3.1 - Verrazzano Metrics トライット
Application ConfigurationでMetrics traitsを有効にしたため、VerrazzanoもHelidonからメトリクスを収集し、PrometheusとGrafanaに送信を開始することになります。なお、このコンポーネントのメトリクスがどこにあるのかを通知する必要はありませんでした。単純にWorkloadの種類に基づいて動作します。
Prometheusのコンソールを開くと、以下のクエリを追加して、アプリケーションへのリクエスト数を確認することができます。試しに開いたままにしておくと、アプリケーションにアクセスするたびにリクエストの数が増えていくのがわかります。
base_REST_request_total{method="getDefaultMessage"}
また、Grafanaを開いてHelidon Monitoring Dashboardを選択すると、デプロイされたコンポーネントの詳細情報を確認することが可能です。
4 - アプリケーションにアクセス
このブログの前のセクションで見たように、IngressTraitがデプロイされたので、Verrazzanoは他のリソースとともに、Istio Gatewayを作成しました。アプリケーションにアクセスするには、このアプリケーションの DNS ホスト名を見つける必要があります。
通常、それは以下のパターンになります。
ApplicationConfigurationName.Namespace.VerrazzanoDomain
このコンポーネントのIstio Gatewayに問い合わせることでホスト名を取得し、アプリケーションにアクセスしてみましょう。
HOST=$(kubectl get gateway -n demo-application \
demo-application-hello-helidon-appconf-gw \
-o jsonpath='{.spec.servers[0].hosts[0]}')
echo $HOST
curl -sk \
-X GET \
"https://${HOST}/greet/Rafael"
メッセージが表示されるはずです。{メッセージは次のように表示されます。}
Prometheusコンソールに戻って、リクエスト数の更新を確認するのを忘れないでください。
5 - まとめ
このブログ記事では、HelidonとVerrazzanoを使ったグリーンフィールドアプローチで、マイクロサービスアプリケーションの開発をいかに簡単に始められるかを見ていただきました。Verrazzanoはアプリケーション開発の生産性とイノベーションを加速させ、ロックインすることなくいくつかのクラウドネイティブの利点をもたらしてくれます。これは、オンプレミス、Oracle Cloud Infrastructure、またはその他のパブリッククラウドにかかわらず、同じ観測性とライフサイクルの利点を実現するクラウドニュートラルなアプローチによって実現されています。
Verrazzanoの詳細については、同社のWebページ(https://verrazzano.io)および(https://www.oracle.com/java/verrazzano/)をご覧ください。また、VerrazzanoのYoutubeチャンネルでは、Verrazzanoのツアービデオなどを見ることができます。このプロジェクトに関するニュースは、VerrazzanoのTwitterプロフィールで共有されています。Verrazzanoは、急速に進化するオープンソースプロジェクトです。Githubのプロジェクトページでフォローしたり、この素晴らしいプロジェクトに貢献することができる。このブログ記事シリーズにお付き合いください。次回のブログでは、既存のWeblogic Javaアプリケーションを強化するためにVerrazzanoを使用する方法について説明します。
コメント
コメントを投稿