Spring Boot アプリケーションを Azure Kubernetes Service にデプロイする
手記
Spring Boot アプリケーションの場合は、Azure Spring Apps を使用することをお勧めします。 ただし、Azure Kubernetes Service を宛先として使用することもできます。 詳細については、「Java アプリケーションに適した Azure サービスを選択する」を参照してください。
このチュートリアルでは、Kubernetes と Docker を組み合わせて、Spring Boot アプリケーションを開発して Microsoft Azure にデプロイする方法について説明します。 具体的には、
Kubernetes と Docker は、開発者がコンテナーで実行されているアプリケーションのデプロイ、スケーリング、管理を自動化するのに役立つオープンソース ソリューションです。
前提 条件
- Azure サブスクリプション。Azure サブスクリプションをまだお持ちでない場合は、MSDN サブスクライバー特典 アクティブ化するか、無料の Azure アカウントにサインアップできます。
- Azure コマンド ライン インターフェイス (CLI)。
- サポートされている Java Development Kit (JDK)。 Azure での開発時に使用できる JDK の詳細については、Azure および Azure Stackでの Java サポート
参照してください。 - Apache の Maven ビルド ツール (バージョン 3)。
- Git クライアント。
- Docker クライアント。
- ACR Docker 資格情報ヘルパー。
手記
このチュートリアルの仮想化要件のため、仮想マシンでこの記事の手順に従うことはできません。仮想化機能が有効になっている物理コンピューターを使用する必要があります。
Docker Getting Started Web アプリで Spring Boot を作成する
次の手順では、Spring Boot Web アプリケーションをビルドし、ローカルでテストする手順について説明します。
コマンド プロンプトを開き、アプリケーションを保持するローカル ディレクトリを作成し、そのディレクトリに変更します。例えば:
mkdir C:\SpringBoot cd C:\SpringBoot
--又は--
mkdir /users/$USER/SpringBoot cd /users/$USER/SpringBoot
Docker Getting Started サンプル プロジェクトの
Spring Boot をディレクトリに複製します。 git clone https://github.com/spring-guides/gs-spring-boot-docker.git
完成したプロジェクトにディレクトリを変更します。
cd gs-spring-boot-docker cd complete
Maven を使用してサンプル アプリをビルドして実行します。
mvn package spring-boot:run
http://localhost:8080
を参照するか、次のcurl
コマンドを使用して、Web アプリをテストします。curl http://localhost:8080
次のメッセージが表示されます。 Hello Docker World
Azure CLI を使用して Azure Container Registry を作成する
コマンド プロンプトを開きます。
Azure アカウントにログインします。
az login
Azure サブスクリプションを選択します。
az account set -s <YourSubscriptionID>
このチュートリアルで使用する Azure リソースのリソース グループを作成します。
az group create --name=wingtiptoys-kubernetes --location=eastus
リソース グループにプライベート Azure コンテナー レジストリを作成します。 このチュートリアルでは、後の手順でサンプル アプリを Docker イメージとしてこのレジストリにプッシュします。
wingtiptoysregistry
をレジストリの一意の名前に置き換えます。az acr create --resource-group wingtiptoys-kubernetes --location eastus \ --name wingtiptoysregistry --sku Basic
Jib を使用してコンテナー レジストリにアプリをプッシュする
Azure CLI から Azure Container Registry にログインします。
# set the default name for Azure Container Registry, otherwise you need to specify the name in "az acr login" az config set defaults.acr=wingtiptoysregistry az acr login
テキストエディターを使用して pom.xml ファイルを開きます。たとえば、Visual Studio Code を使用します。
code pom.xml
pom.xml ファイル内の
<properties>
コレクションを、Azure Container Registry のレジストリ名と最新バージョンの jib-maven-pluginで更新します。<properties> <!-- Note: If your ACR name contains upper case characters, be sure to convert them to lower case characters. --> <docker.image.prefix>wingtiptoysregistry.azurecr.io</docker.image.prefix> <jib-maven-plugin.version>2.5.2</jib-maven-plugin.version> <java.version>1.8</java.version> </properties>
次の例に示すように、
<plugin>
要素にjib-maven-plugin
のエントリが含まれるように、pom.xml ファイル内の<plugins>
コレクションを更新します。 Microsoft Container Registry (MCR):mcr.microsoft.com/openjdk/jdk:11-ubuntu
の基本イメージを使用しています。このイメージには、Azure 用に公式にサポートされている JDK が含まれています。 正式にサポートされている JDK を含むその他の MCR 基本イメージについては、「Install the Microsoft Build of OpenJDK」を参照してください。.<plugin> <artifactId>jib-maven-plugin</artifactId> <groupId>com.google.cloud.tools</groupId> <version>${jib-maven-plugin.version}</version> <configuration> <from> <image>mcr.microsoft.com/openjdk/jdk:11-ubuntu</image> </from> <to> <image>${docker.image.prefix}/gs-spring-boot-docker</image> </to> </configuration> </plugin>
Spring Boot アプリケーションの完成したプロジェクト ディレクトリに移動し、次のコマンドを実行してイメージをビルドし、イメージをレジストリにプッシュします。
az acr login && mvn compile jib:build
手記
Azure Cli と Azure Container Registry のセキュリティ上の問題により、az acr login
によって作成された資格情報は 1 時間有効です。 401 Unauthorized
エラーが表示された場合は、az acr login --name <your registry name>
コマンドをもう一度実行して再認証できます。 Read timed out
エラーが発生した場合は、mvn -Djib.httpTimeout=7200000 jib:dockerBuild
でタイムアウトを増やすか、無限タイムアウトの -Djib.httpTimeout=0
を試すことができます。
Azure CLI を使用して AKS に Kubernetes クラスターを作成する
Azure Kubernetes Service で Kubernetes クラスターを作成します。 次のコマンドでは、
wingtiptoys-kubernetes
リソース グループに kubernetes クラスターが作成され、クラスター名としてwingtiptoys-akscluster
、Azure Container Registry (ACR)wingtiptoysregistry
がアタッチされ、DNS プレフィックスとしてwingtiptoys-kubernetes
されます。az aks create --resource-group=wingtiptoys-kubernetes --name=wingtiptoys-akscluster \ --attach-acr wingtiptoysregistry \ --dns-name-prefix=wingtiptoys-kubernetes --generate-ssh-keys
このコマンドが完了するまでに時間がかかる場合があります。
Azure CLI を使用して
kubectl
をインストールします。 Linux ユーザーは、Kubernetes CLI を/usr/local/bin
にデプロイするため、このコマンドの前にsudo
を付ける必要がある場合があります。az aks install-cli
Kubernetes Web インターフェイスと
kubectl
からクラスターを管理できるように、クラスター構成情報をダウンロードします。az aks get-credentials --resource-group=wingtiptoys-kubernetes --name=wingtiptoys-akscluster
Kubernetes クラスターにイメージをデプロイする
このチュートリアルでは、kubectl
を使用してアプリをデプロイし、Kubernetes Web インターフェイスを使用してデプロイを調べることができます。
kubectl を使用したデプロイ
コマンド プロンプトを開きます。
kubectl run
コマンドを使用して、Kubernetes クラスターでコンテナーを実行します。 Kubernetes でアプリのサービス名と完全なイメージ名を指定します。 例えば:kubectl run gs-spring-boot-docker --image=wingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest
このコマンドでは、次の操作を行います。
コンテナー名
gs-spring-boot-docker
は、run
コマンドの直後に指定されます。--image
パラメーターは、wingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest
というログインサーバーとイメージ名を指定します。
kubectl expose
コマンドを使用して、Kubernetes クラスターを外部に公開します。 サービス名、アプリへのアクセスに使用される公開 TCP ポート、アプリがリッスンする内部ターゲット ポートを指定します。 例えば:kubectl expose pod gs-spring-boot-docker --type=LoadBalancer --port=80 --target-port=8080
このコマンドでは、次の操作を行います。
コンテナー名
gs-spring-boot-docker
は、expose pod
コマンドの直後に指定されます。--type
パラメーターは、クラスターがロード バランサーを使用することを指定します。--port
パラメーターは、公開 TCP ポート 80 を指定します。 このポートでアプリにアクセスします。--target-port
パラメーターは、8080 の内部 TCP ポートを指定します。 ロード バランサーは、このポートで要求をアプリに転送します。
アプリがクラスターにデプロイされたら、外部 IP アドレスに対してクエリを実行し、Web ブラウザーで開きます。
kubectl get services -o=jsonpath='{.items[*].status.loadBalancer.ingress[0].ip}'
Azure でサンプル アプリを参照する
Kubernetes リソース ビューを使用したデプロイ
リソース ビュー (名前空間、ワークロード、サービスとイングレス、ストレージ、または構成) から [ の追加] を選択します。
Kubernetes リソースビュー
次の YAML を貼り付けます。
apiVersion: apps/v1 kind: Deployment metadata: name: gs-spring-boot-docker spec: replicas: 1 selector: matchLabels: app: gs-spring-boot-docker template: metadata: labels: app: gs-spring-boot-docker spec: containers: - name: gs-spring-boot-docker image: wingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest
YAML エディターの下部にある [ の追加] を選択して、アプリケーションをデプロイします。
Kubernetes リソース ビュー
上記と同様に、
Deployment
をデプロイした後、YAML エディターの下部にある [ の追加] を選択して、次の YAML を使用してService
をデプロイします。apiVersion: v1 kind: Service metadata: name: gs-spring-boot-docker spec: type: LoadBalancer ports: - port: 80 targetPort: 8080 selector: app: gs-spring-boot-docker
YAML ファイルが追加されると、リソース ビューアーに Spring Boot アプリケーションが表示されます。 外部サービスにはリンクされた外部 IP アドレスが含まれているため、ブラウザーでアプリケーションを簡単に表示できます。
外部 IPを選択します。 その後、Spring Boot アプリケーションが Azure で実行されていることがわかります。
Azure でサンプル アプリを参照する
次の手順
Spring と Azure の詳細については、Spring on Azure ドキュメント センターに進んでください。
関連項目
Azure での Spring Boot の使用の詳細については、次の記事を参照してください。
- Azure App Service で Spring Boot アプリケーションを Linux にデプロイする
Java での Azure の使用の詳細については、Java 開発者向け Azure
Visual Studio Code を使用して Kubernetes に Java アプリケーションをデプロイする方法の詳細については、「Visual Studio Code Java Tutorialsを参照してください。
Docker での Spring Boot サンプル プロジェクトの詳細については、「Docker での Spring Boot の概要」を参照してください。
次のリンクは、Spring Boot アプリケーションの作成に関する追加情報を提供します。
- 単純な Spring Boot アプリケーションの作成の詳細については、https://start.spring.io/の Spring Initializr を参照してください。
次のリンクは、Azure での Kubernetes の使用に関する追加情報を提供します。
- Azure Kubernetes Service で Kubernetes クラスターの使用を開始する
Kubernetes コマンド ライン インターフェイスの使用の詳細については、https://kubernetes.io/docs/reference/kubectl/の kubectl ユーザー ガイドを参照してください。
Kubernetes Web サイトには、プライベート レジストリでのイメージの使用について説明するいくつかの記事があります。
- ポッドのサービスアカウントの構成
- 名前空間
- プライベート レジストリ からイメージをプルする
Azure でカスタム Docker イメージを使用する方法のその他の例については、「Linux上の Azure Web App 用のカスタム Docker イメージを使用する」を参照してください。
Azure Dev Spaces を使用して Azure Kubernetes Service (AKS) でコンテナーを直接繰り返し実行およびデバッグする方法の詳細については、「Java を使用した Azure Dev Spaces の概要」を参照してください