2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Oracle Cloud InfrastructureAdvent Calendar 2021

Day 8

Verrazzanoを利用したサンプルアプリケーションデプロイ

Last updated at Posted at 2021-12-08

はじめに

この記事は、Oracle Cloud Infrastructure Advent Calendar 2021 その2 Day 8 の記事として書かれています。

前回の記事では、Oracle Container Engine for Kubernetes(OKE)上にマルチクラスタ環境を構築してみました。
この記事では、その環境に対してサンプルアプリケーションをデプロイしてみようと思います。

Verrazzanoで利用できるサンプルアプリケーション

Verrazzanoでは、インストール後に利用可能な様々なアプリケーションをデプロイすることができます。

サンプルアプリケーションは複数あり、こちらからインストールすることができます。

今回はマルチクラスタ環境なので、マルチクラスタ用のサンプルアプリケーションをデプロイしてみたいと思います。

ToDo Listアプリケーションのデプロイ

インストールはToDo Listを参考に実施します。

まずは、アプリケーションを管理するためのカスタムリソースであるVerrazzanoProjectリソースを作成します。
アプリケーションのデプロイについては、原則Adminクラスタが制御するので、Adminクラスタに対してデプロイを行います。

kubectl --context $KUBECONTEXT_ADMIN apply \
    -f https://raw.githubusercontent.com/verrazzano/verrazzano/v1.0.3/examples/multicluster/todo-list/verrazzano-project.yaml

次に、サンプルアプリケーションが格納されているOracle Container Registry 1 からコンテナイメージを取得してくるためのクレデンシャルを作成します。

wget https://raw.githubusercontent.com/verrazzano/verrazzano/v1.0.3/examples/multicluster/todo-list/mc-docker-registry-secret.yaml

ダウンロードしたファイルは以下のようになっています。
ここで、placementというフィールドにmanaged1というクラスタが定義されていることが分かります。
これが、このマルチクラスタ用Secretを利用するクラスタであるということを指しています。
今回は、それが管理対象クラスタということになります。

apiVersion: clusters.verrazzano.io/v1alpha1
kind: MultiClusterSecret
metadata:
  name: tododomain-repo-credentials
  namespace: mc-todo-list
spec:
  template:
    type: kubernetes.io/dockerconfigjson
    data:
      .dockerconfigjson: <BASE 64 ENCODED DOCKER CONFIG JSON>
  placement:
    clusters:
      - name: managed1

.dockerconfigjson: <BASE 64 ENCODED DOCKER CONFIG JSON>の部分を差し替えます。

kubectl --context $KUBECONTEXT_ADMIN create secret docker-registry temp \
    --dry-run=client \
    --docker-server=container-registry.oracle.com \
    --docker-username=takuya.niita@oracle.com \
    --docker-password=xxxxxxxxxx \
    --docker-email=xxx.xxxxx@oracle.com \
    -o jsonpath='{.data.\.dockerconfigjson}'; echo

以下のような結果が表示されます。(セキュリティのためマスクします)

eyJhdXRocyI6eyJjb250YWluZXI~~~~~~

出力された結果を<BASE 64 ENCODED DOCKER CONFIG JSON>に上書きします。

その後、Manifestを反映します。

kubectl --context $KUBECONTEXT_ADMIN apply -f mc-docker-registry-secret.yaml

次に、以下の2つのManifestをダウンロードします。

wget https://raw.githubusercontent.com/verrazzano/verrazzano/v1.0.3/examples/multicluster/todo-list/mc-weblogic-domain-secret.yaml
wget https://raw.githubusercontent.com/verrazzano/verrazzano/v1.0.3/examples/multicluster/todo-list/mc-tododb-secret.yaml

これら2つのManifestに定義されている以下の変数を好きな文字列に差し替えます。

  • username: THE_USERNAME
  • password: THE_PASSWORD

今回は以下のようにします。

  • username: admin
  • password: password12342

書き換えたのちに、Manifestを適用します。

kubectl --context $KUBECONTEXT_ADMIN apply -f mc-weblogic-domain-secret.yaml
kubectl --context $KUBECONTEXT_ADMIN apply -f mc-tododb-secret.yaml

次にComponentとApplication Configrationを適用します。
ComponentとApplication Configrationについては、Verrazzanoが利用しているOAMという考え方に基づいています。
OAMについては、概要資料でも少し解説しています。

これらのファイルは、結構大きいので、ここで中身の解説はしませんが、中を見てくと先ほどのMultiClusterSecretリソースと同じようにplacementというフィールドにmanaged1というクラスタが定義されていることが分かります。

how-it-works.png

kubectl --context $KUBECONTEXT_ADMIN apply \
    -f https://raw.githubusercontent.com/verrazzano/verrazzano/v1.0.3/examples/multicluster/todo-list/todo-list-components.yaml

kubectl --context $KUBECONTEXT_ADMIN apply \
    -f https://raw.githubusercontent.com/verrazzano/verrazzano/v1.0.3/examples/multicluster/todo-list/todo-list-application.yaml

Manifestをapplyしたら、Podが起動するまで待機します。
ManifestのapplyはAdminクラスタに対して実施しますが、実際にアプリケーションがデプロイされるのは管理対象クラスタです。

kubectl --context $KUBECONTEXT_MANAGED get pods -n mc-todo-list -w

以下のようになれば起動完了です。(数分かかります)

NAME                     READY   STATUS        RESTARTS   AGE
mysql-5c848cf68d-lhgbc   2/2     Terminating   0          31s
mysql-7844bdc6d9-nhhh2   2/2     Running       0          30s
mysql-5c848cf68d-lhgbc   0/2     Terminating   0          38s
mysql-5c848cf68d-lhgbc   0/2     Terminating   0          47s
mysql-5c848cf68d-lhgbc   0/2     Terminating   0          47s
tododomain-introspector-nczbl   0/1     Pending       0          0s
tododomain-introspector-nczbl   0/1     Pending       0          0s
tododomain-introspector-nczbl   0/1     ContainerCreating   0          0s
tododomain-introspector-nczbl   1/1     Running             0          1s
tododomain-introspector-nczbl   0/1     Completed           0          58s
tododomain-adminserver          0/4     Pending             0          0s
tododomain-adminserver          0/4     Pending             0          0s
tododomain-adminserver          0/4     Init:0/1            0          1s
tododomain-introspector-nczbl   0/1     Terminating         0          60s
tododomain-introspector-nczbl   0/1     Terminating         0          60s
tododomain-adminserver          0/4     PodInitializing     0          2s
tododomain-adminserver          2/4     Running             0          12s
tododomain-adminserver          3/4     Running             0          15s
tododomain-adminserver          4/4     Running             0          43s

アプリケーションの確認と各コンポーネントからの動作確認

ここでは、デプロイしたサンプルアプリケーションの動作確認をしてみます。

まずは、アプリケーションにアクセスします。

ホストを取得します。

HOST=$(kubectl --context $KUBECONTEXT_MANAGED get gateway -n mc-todo-list \
-o jsonpath={.items[0].spec.servers[0].hosts[0]})

echo $HOST

以下のように出力されます。

todo-appconf.mc-todo-list.xxx.xxx.xxx.xxx.nip.io

アプリケーションは以下のURLでアクセスできます。

https://todo-appconf.mc-todo-list.xxx.xxx.xxx.xxx.nip.io/todo

このような画面が表示されます。

スクリーンショット 2021-12-06 18.25.09.png

次に、Verrazzano Consoleから確認します。

前回の記事と同じようにコンソールにアクセスします。

以下のようにOAM Applicationtodo-appconfというApplication Configurationが表示されていることが確認できます。
ちなみにデプロイ先のクラスタは、管理対象クラスタであるmanaged1になっています。
スクリーンショット 2021-12-06 18.27.07.png

同じくOAM Componentsを見てみると、以下のように作成したComoponentsを確認できます。
ちなみにデプロイ先のクラスタは、管理対象クラスタであるmanaged1になっています。
スクリーンショット 2021-12-06 18.28.36.png

Projectsについて見てみると、本記事で作成したtodo-listというVerrazzanoProjectsがあることが確認できます。
スクリーンショット 2021-12-06 18.30.28.png

アプリケーションのメトリクス/ログの確認

最後にアプリケーションのメトリクス/ログの確認を実施します。

Verrazzanoでは、Oracleが提供する各種プロダクト(WebLogic/Coherence/Helidon)については、自動的にメトリクスとログを取得できるようになっています。

今回は、以下のコンポーネントにアクセスします。

  • Grafana
  • Kibana

各コンポーネントへはVerrazzano Consoleからアクセスできます。

スクリーンショット 2021-12-06 18.36.14.png

まずは、Grafanaからアクセスし、メトリクスの確認をします。
Grafanaでのダッシュボードは事前に構成済みなので、以下からアクセスできます。

スクリーンショット 2021-12-06 18.40.51.png

今回のサンプルアプリケーションは、WebLogic Serverを使っているので、以下のようにWebLogic Serverのメトリクスが自動的に取得できていることが確認できます。

スクリーンショット 2021-12-06 18.37.26.png

また、このようにホスト側のメトリクスも自動的に取得しています。

スクリーンショット 2021-12-06 18.39.42.png

次にKibanaでログの確認をします。

同じようにVerrazzano ConsoleからKibanaに遷移します。

以下の赤枠部分をクリックします。

スクリーンショット 2021-12-06 18.43.41.png

Index patternにverrazzano-namespace-mc-tool-listを入力します。

スクリーンショット 2021-12-06 18.46.00.png

Filter field nameに@timestampを選択します。

スクリーンショット 2021-12-06 18.46.13.png

Create index patternをクリックすると以下のように今回デプロイしたサンプルアプリケーションのログが出力されます。

スクリーンショット 2021-12-06 18.46.45.png

このように、Verrazzanoでは、特にWebLogic/Coherence/Helidonを利用したアプリケーションについては、メトリクス/ログの設定が自動的に実施されます。

まとめ

今回は、Verrazzanoで構築したマルチクラスタ環境にサンプルアプリケーションをデプロイしてみました。

Verrazzanoの特徴は、OAMを利用したアプリケーション本体(Components)、ロードバランサーやストレージなどの周辺部品(Application Configuration)、ハイブリッド/(将来的には)マルチクラウドのデプロイ環境(placement)をそれぞれ定義した上で、自由に組み合わせて環境を構築できる可搬性の高さにあります。
また、WebLogic/Coherence/Helidonについては、事前に構築済みの設定を利用して即座にメトリクスやログを各種コンソールから確認できました。

Oracleのプロダクトを利用してアプリケーションを構築していて、これからコンテナ化を進めようとしている皆様には非常に便利なプラットフォームになっているので、ぜひ試してみてください!

#参考記事

  1. Oracle Container Registry:エンタープライズで使用することができるOracleソフトウェア製品のDockerイメージが含まれたコンテナレジストリです。利用するにはOracle Profileが必要になります。

  2. パスワードは8文字以上かつ少なくとも数字1つもしくは特殊文字を含める必要があります

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?