Spring Bootによるコンテナアプリケーションの開発
サンプルアプリの構成
今回使うサンプルアプリの構成を説明します。frontendアプリからbackendアプリに呼び出しを行い、データを取得します。frontendアプリは取得したデータをクライアントに返します。
ソースコードはこちらにあります。手元で試したい方は、次のコマンドを実行しリポジトリをCloneしてください。
git clone https://github.com/asashiho/chaostoolkit-sample
ここで、「chaos-frontend」「chaos-backend」という名前のコンテナイメージを作成し、Docker HubなどKubernetesクラスタからアクセスできるコンテナレジストリで共有します。
アプリのイメージ作成とレジストリ共有
まず、コンテナレジストリの名前を環境変数ACR_NAMEに設定します。<your container registry name>はご自身のレジストリ名に変更してください。
ACR_NAME=<your container registry name>
次のコマンドでbackendアプリのコンテナイメージを作成し、レジストリにプッシュします。
cd apps/backend ./mvnw spring-boot:build-image -Dspring-boot.build-image.imageName=$ACR_NAME/chaos-backend:v1 docker push $ACR_NAME/chaos-backend:v1
次に、frontendのv1アプリのコンテナイメージを作成し、レジストリにプッシュします。
cd apps/frontend.before ./mvnw spring-boot:build-image -Dspring-boot.build-image.imageName=$ACR_NAME/chaos-frontend:v1 docker push $ACR_NAME/chaos-frontend:v1
最後に、frontendのv2アプリのコンテナイメージを作成し、レジストリにPushします。v2はResilience4jを利用してサーキットブレーカーを実装しています。
cd apps/frontend.after ./mvnw spring-boot:build-image -Dspring-boot.build-image.imageName=$ACR_NAME/chaos-frontend:v2 docker push $ACR_NAME/chaos-frontend:v2
Kubernetesクラスタへのデプロイ
Kubernetesを使いたい時はクラウドベンダが提供しているKubernetesマネージドサービスを使うと便利です。
ここではAzureが提供するAzure Kubernetes Service(以降AKS)を使います。Visual Studio Code ExtentionはじめHelm/KEDAなどオープンソースとの親和性や、Azure Active DirectoryとKubernetesロールベースアクセス制御(RBAC)との連携をはじめ豊富なセキュリティ機能が特徴です。
Azureを初めて利用する場合は、30日間使用できる200ドルのクレジットがついた無償アカウントを使って検証ができます。公式サイトにアクセスして、手順にしたがってアカウントを作成してください。
次のコマンドでAKSクラスタを作成します。
RG_NAME=aks-sample
AKS_NAME=aks-sample
az group create \
--name $RG_NAME \
--location japaneast
az aks create \
--resource-group $RG_NAME \
--name $AKS_NAME \
--node-count 2 \
--enable-addons monitoring \
--generate-ssh-keys
クラスタが作成できたら、次のコマンドでクラスタの接続に必要なクレデンシャルを取得します。
az aks get-credentials \
--resource-group $RG_NAME \
--name $AKS_NAME
kubectlは、Kubernetesのリソースを操作するためのCLIです。次のコマンドを実行してkubectlをインストールし、クラスタのノード一覧を表示します。
az aks install-cli kubectl get node
ただし、クラスタにはまだアプリケーションが何もデプロイされていない状態です。
kubectl get svc,deployment,pod
アプリのデプロイ
次のコマンドで、Kubernetesマニフェストからbackendアプリをクラスタにデプロイします。
cd manifest/backend kubectl apply -f service.yaml -f deployment.yaml
DeploymentとServiceを確認します。
kubectl get deploy,service
次にfrontendアプリをクラスタにデプロイします。ここではv1のイメージを使います。
cd manifest/frontend kubectl apply -f service.yaml -f deployment.yaml
spec:
containers:
- image: <your container registry name>/chaos-frontend:v1
imagePullPolicy: Always
name: front
DeploymentとServiceを確認します。
kubectl get deploy,service
動作確認
PodがすべてRunningになっているのが確認できたら、frontendアプリのエンドポイントを確認します。
kubectl get svc
Webブラウザから次のURLにアクセスします。
http://<your frontend External IP>/
動いているアプリケーションのログを確認したい時は、次のコマンドを実行します。
kubectl logs -f <pod name>
