はじめに
この記事は、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
というクラスタが定義されていることが分かります。
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
このような画面が表示されます。
次に、Verrazzano Consoleから確認します。
前回の記事と同じようにコンソールにアクセスします。
以下のようにOAM Application
にtodo-appconf
というApplication Configurationが表示されていることが確認できます。
ちなみにデプロイ先のクラスタは、管理対象クラスタであるmanaged1
になっています。
同じくOAM Components
を見てみると、以下のように作成したComoponentsを確認できます。
ちなみにデプロイ先のクラスタは、管理対象クラスタであるmanaged1
になっています。
Projects
について見てみると、本記事で作成したtodo-list
というVerrazzanoProjects
があることが確認できます。
アプリケーションのメトリクス/ログの確認
最後にアプリケーションのメトリクス/ログの確認を実施します。
Verrazzanoでは、Oracleが提供する各種プロダクト(WebLogic/Coherence/Helidon)については、自動的にメトリクスとログを取得できるようになっています。
今回は、以下のコンポーネントにアクセスします。
- Grafana
- Kibana
各コンポーネントへはVerrazzano Consoleからアクセスできます。
まずは、Grafanaからアクセスし、メトリクスの確認をします。
Grafanaでのダッシュボードは事前に構成済みなので、以下からアクセスできます。
今回のサンプルアプリケーションは、WebLogic Serverを使っているので、以下のようにWebLogic Serverのメトリクスが自動的に取得できていることが確認できます。
また、このようにホスト側のメトリクスも自動的に取得しています。
次にKibanaでログの確認をします。
同じようにVerrazzano ConsoleからKibanaに遷移します。
以下の赤枠部分をクリックします。
Index patternにverrazzano-namespace-mc-tool-list
を入力します。
Filter field nameに@timestamp
を選択します。
Create index pattern
をクリックすると以下のように今回デプロイしたサンプルアプリケーションのログが出力されます。
このように、Verrazzanoでは、特にWebLogic/Coherence/Helidonを利用したアプリケーションについては、メトリクス/ログの設定が自動的に実施されます。
まとめ
今回は、Verrazzanoで構築したマルチクラスタ環境にサンプルアプリケーションをデプロイしてみました。
Verrazzanoの特徴は、OAMを利用したアプリケーション本体(Components
)、ロードバランサーやストレージなどの周辺部品(Application Configuration
)、ハイブリッド/(将来的には)マルチクラウドのデプロイ環境(placement
)をそれぞれ定義した上で、自由に組み合わせて環境を構築できる可搬性の高さにあります。
また、WebLogic/Coherence/Helidonについては、事前に構築済みの設定を利用して即座にメトリクスやログを各種コンソールから確認できました。
Oracleのプロダクトを利用してアプリケーションを構築していて、これからコンテナ化を進めようとしている皆様には非常に便利なプラットフォームになっているので、ぜひ試してみてください!
#参考記事