SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

クラウドネイティブ時代の実践カオスエンジニアリング

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>

次のページ
Chaos Toolkitによるカオス挿入

この記事は参考になりましたか?

クラウドネイティブ時代の実践カオスエンジニアリング連載記事一覧

もっと読む

この記事の著者

阿佐 志保(アサ シホ)

金融系シンクタンクなどで銀行/証券向けインフラエンジニア、製造業向けインフラエンジニアとして従事。都市銀行情報系基盤システム構築やシステム統廃合、証券会社向けバックオフィスシステムの共通基盤開発プロジェクトを経験。結婚・出産を経て現在は、日本マイクロソフトで法人向けにクラウド導入支援やプリセールスな...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/14861 2021/11/10 11:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー