Spring Boot アプリケーションを Azure Kubernetes Service にデプロイする
Note
Spring Boot アプリケーションの場合は、Azure Spring Apps を使うことをお勧めします。 ただし、Azure Kubernetes Service を宛先として使用することもできます。 詳細については、「Java アプリケーションをデプロイするために適切な Azure サービスを選択する」を参照してください 。
このチュートリアルでは、Kubernetes と Docker を組み合わせて Spring Boot アプリケーションを開発し、Microsoft Azure にデプロイする方法について説明します。 具体的には、アプリケーション開発に Spring Boot を、コンテナーのデプロイに Kubernetes を、アプリケーションのホストとして Azure Kubernetes Service (AKS) をそれぞれ使用します。
Kubernetes と Docker は、開発者が、コンテナーで実行されるアプリケーションのデプロイ、スケーリング、管理を自動化することを支援するオープン ソース ソリューションです。
前提条件
- Azure サブスクリプション。Azure サブスクリプションをまだお持ちでない場合は、MSDN サブスクライバーの特典を有効にするか、または無料の Azure アカウントにサインアップできます。
- Azure コマンド ライン インターフェイス (CLI)。
- サポートされている Java Development Kit (JDK)。 Azure での開発時に使用可能な JDK の詳細については、「Java の Azure および Azure Stack に関するサポート」 を参照してください。
- Apache の Maven 構築ツール (バージョン 3)。
- Git クライアント。
- Docker クライアント。
- ACR Docker 資格情報ヘルパー。
Note
このチュートリアルには仮想化要件があるため、仮想マシンでこの記事の手順を実行することはできません。仮想化機能を有効にした物理コンピューターを使用する必要があります。
Spring Boot on Docker Getting Started Web アプリを作成する
次の手順で、Spring Boot Web アプリケーションをビルドしてローカルでテストします。
コマンド プロンプトを開き、アプリケーションを保持するためのローカル ディレクトリを作成して、そのディレクトリに変更します。次に例を示します。
mkdir C:\SpringBoot cd C:\SpringBoot
-- または --
mkdir /users/$USER/SpringBoot cd /users/$USER/SpringBoot
Docker での 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
Web アプリをテストするには、
http://localhost:8080
を参照するか、次のcurl
コマンドを使用します。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
テキストエディタ(Visual Studio Codeなど)でpom.xmlファイルを開きます。
code pom.xml
<properties>
pom.xml ファイル内の コレクションを、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>
以下の例に示すように
<plugins>
pom.xml ファイルの コレクションを更新し、<plugin>
要素にjib-maven-plugin
のエントリが含まれるようにします。 ここでは、Microsoft Container Registry (MCR) の基本イメージ (mcr.microsoft.com/openjdk/jdk:11-ubuntu
) が使用されていることに注目してください。このイメージには、公式にサポートされた Azure 用の JDK が含まれています。 公式にサポートされているJDKを使用したその他の MCRベースイメージについては、「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
Note
Azure Cli および Azure Container Registry のセキュリティ上の懸念のため、az acr login
によって作成された資格情報の有効期間は 1 時間です。 "401 未承認" エラーが発生した場合は、もう一度 az acr login --name <your registry name>
コマンドを実行すれば、再認証を行うことができます。 "読み取りがタイムアウトしました" エラーが表示された場合は、mvn -Djib.httpTimeout=7200000 jib:dockerBuild
でタイムアウトを増やすか、無限タイムアウト用の -Djib.httpTimeout=0
を試すことができます。
Azure CLI を使用して AKS で Kubernetes クラスターを作成する
Azure Kubernetes Service で Kubernetes クラスターを作成します。 次のコマンドでは、kubernetes クラスターを wingtiptoys-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
をインストールします。 Kubernetes CLI はsudo
にデプロイされるため、Linux ユーザーはこのコマンドの前に/usr/local/bin
を付けなければならない場合があります。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
パラメーターは、内部 TCP ポートとして 8080 を指定します。 ロード バランサーは、このポートでアプリに要求を転送します。
クラスターにアプリがデプロイされたら、外部 IP アドレスを照会し、そのアドレスを Web ブラウザーで開きます。
kubectl get services -o=jsonpath='{.items[*].status.loadBalancer.ingress[0].ip}'
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 エディターの下部にある [追加] を選択してアプリケーションをデプロイします。
上記と同様に、
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上で実行されているのが表示されます。
次のステップ
Spring および Azure の詳細については、Azure ドキュメント センターで引き続き Spring に関するドキュメントをご確認ください。
関連項目
Azure での Spring Boot の使用の詳細については、次の記事を参照してください。
Java での Azure の使用の詳細については、「Java 開発者向けの Azure」および「Azure DevOps と Java の操作」を参照してください。
Visual Studio Code を使用して Java アプリケーションを Kubernetes にデプロイする方法の詳細については、Visual Studio Code Java チュートリアルを参照してください。
Docker サンプル プロジェクトでの Spring Boot の詳細については、Docker での Spring Boot の使用開始に関するページを参照してください。
次のリンクは、Spring Boot アプリケーションの作成に関する追加情報を提供します。
- 単純な Spring Boot アプリケーションの作成の詳細については、Spring Initializr (https://start.spring.io/) を参照してください。
次のリンクは、Azure での Kubernetes の使用に関する追加情報を提供します。
Kubernetes コマンド ライン インターフェイスの使用方法の詳細については、kubectl ユーザー ガイド (https://kubernetes.io/docs/reference/kubectl/) を参照してください。
Kubernetes web サイトには、プライベート レジストリでのイメージの使用に関するさまざまな記事があります。
Azure でカスタム Docker イメージを使用する方法に関するその他の例については、「Azure Web App on Linux 向けのカスタム Docker イメージを使用する」を参照してください。
Azure Kubernetes Service (AKS) で直接 Azure Dev Spaces を使用してコンテナーの実行とデバッグを繰り返す場合の詳細については、「Azure Dev Spaces での Java の使用」を参照してください。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示