Kubernetesでカオスエンジニアリング ~サーキットブレーカーパターンで回復性の高いシステムを構築する
クラウドネイティブ時代の実践カオスエンジニアリング 第6回
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>
この記事は参考になりましたか?
- クラウドネイティブ時代の実践カオスエンジニアリング連載記事一覧
-
- Kubernetesでカオスエンジニアリング ~サーキットブレーカーパターンで回復性の高い...
- Kubernetesクラスターのノードにカオス挿入してみよう~Azure Kubernet...
- PaaSでカオスエンジニアリング~Azure Web Appsにカオス挿入してみよう
- この記事の著者
-
阿佐 志保(アサ シホ)
金融系シンクタンクなどで銀行/証券向けインフラエンジニア、製造業向けインフラエンジニアとして従事。都市銀行情報系基盤システム構築やシステム統廃合、証券会社向けバックオフィスシステムの共通基盤開発プロジェクトを経験。結婚・出産を経て現在は、日本マイクロソフトで法人向けにクラウド導入支援やプリセールスな...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
