Azure Kubernetes Service で Spring Boot アプリケーションを Kubernetes クラスターにデプロイするDeploy a Spring Boot Application on a Kubernetes Cluster in the Azure Kubernetes Service

KubernetesDocker は、開発者が、コンテナーで実行されるアプリケーションのデプロイ、スケーリング、管理を自動化することを支援するオープン ソース ソリューションです。Kubernetes and Docker are open-source solutions that help developers automate the deployment, scaling, and management of their applications running in containers.

このチュートリアルでは、この 2 つの一般的なオープンソース テクノロジを組み合わせて Spring Boot アプリケーションを開発し、Microsoft Azure にデプロイする方法について説明します。This tutorial walks you through combining these two popular, open-source technologies to develop and deploy a Spring Boot application to Microsoft Azure. 具体的には、アプリケーション開発に Spring Boot を、コンテナーのデプロイに Kubernetes を、アプリケーションのホストとして Azure Kubernetes Service (AKS) をそれぞれ使用します。More specifically, you use Spring Boot for application development, Kubernetes for container deployment, and the Azure Kubernetes Service (AKS) to host your application.

前提条件Prerequisites

注意

このチュートリアルには仮想化要件があるため、仮想マシンでこの記事の手順を実行することはできません。仮想化機能を有効にした物理コンピューターを使用する必要があります。Due to the virtualization requirements of this tutorial, you cannot follow the steps in this article on a virtual machine; you must use a physical computer with virtualization features enabled.

Spring Boot on Docker Getting Started Web アプリを作成するCreate the Spring Boot on Docker Getting Started web app

次の手順で、Spring Boot Web アプリケーションをビルドしてローカルでテストします。The following steps walk you through building a Spring Boot web application and testing it locally.

  1. コマンド プロンプトを開き、アプリケーションを保持するためのローカル ディレクトリを作成し、そのディレクトリに変更します。次に例を示します。Open a command-prompt and create a local directory to hold your application, and change to that directory; for example:

    md C:\SpringBoot
    cd C:\SpringBoot
    

    -- または ---- or --

    md /users/robert/SpringBoot
    cd /users/robert/SpringBoot
    
  2. Docker での Spring Boot の使用開始 サンプル プロジェクトを、ディレクトリに複製します。Clone the Spring Boot on Docker Getting Started sample project into the directory.

    git clone https://github.com/spring-guides/gs-spring-boot-docker.git
    
  3. 完成したプロジェクトにディレクトリを変更します。Change directory to the completed project.

    cd gs-spring-boot-docker
    cd complete
    
  4. Maven を使用してサンプル アプリをビルドして実行します。Use Maven to build and run the sample app.

    mvn package spring-boot:run
    
  5. Web アプリをテストするには、 http://localhost:8080 を参照するか、次の curl コマンドを使用します。Test the web app by browsing to http://localhost:8080, or with the following curl command:

    curl http://localhost:8080
    
  6. 次のメッセージが表示されます。Hello Docker WorldYou should see the following message displayed: Hello Docker World

    サンプル アプリをローカルに参照する

Azure CLI を使用して Azure Container Registry を作成するCreate an Azure Container Registry using the Azure CLI

  1. コマンド プロンプトを開きます。Open a command prompt.

  2. Azure アカウントにログインします。Log in to your Azure account:

    az login
    
  3. Azure サブスクリプションを選択します。Choose your Azure Subscription:

    az account set -s <YourSubscriptionID>
    
  4. このチュートリアルで使用する Azure リソースのリソース グループを作成します。Create a resource group for the Azure resources used in this tutorial.

    az group create --name=wingtiptoys-kubernetes --location=eastus
    
  5. リソース グループ内に、プライベートな Azure コンテナー レジストリを作成します。Create a private Azure container registry in the resource group. このチュートリアルでは、後の手順で、このレジストリに Docker イメージとしてサンプル アプリをプッシュします。The tutorial pushes the sample app as a Docker image to this registry in later steps. wingtiptoysregistry を、レジストリの一意の名前に置き換えます。Replace wingtiptoysregistry with a unique name for your registry.

    az acr create --resource-group wingtiptoys-kubernetes --location eastus \
     --name wingtiptoysregistry --sku Basic
    

Jib を使用してアプリをコンテナー レジストリにプッシュするPush your app to the container registry via Jib

  1. Azure CLI から Azure Container Registry にログインします。Log in to your Azure Container Registry from the Azure CLI.

    # set the default name for Azure Container Registry, otherwise you will need to specify the name in "az acr login"
    az configure --defaults acr=wingtiptoysregistry
    az acr login
    
  2. Spring Boot アプリケーションの完了プロジェクト ディレクトリ ("C:\SpringBoot\gs-spring-boot-docker\complete" や " /users/robert/SpringBoot/gs-spring-boot-docker/complete" など) に移動し、pom.xml ファイルをテキスト エディターで開きます。Navigate to the completed project directory for your Spring Boot application (for example, "C:\SpringBoot\gs-spring-boot-docker\complete" or "/users/robert/SpringBoot/gs-spring-boot-docker/complete"), and open the pom.xml file with a text editor.

  3. pom.xml ファイル内の <properties> コレクションを、Azure Container Registry のレジストリ名と jib-maven-plugin の最新バージョンで更新します。Update the <properties> collection in the pom.xml file with the registry name for your Azure Container Registry and the latest version of jib-maven-plugin.

    <properties>
       <docker.image.prefix>wingtiptoysregistry.azurecr.io</docker.image.prefix>
       <jib-maven-plugin.version>1.7.0</jib-maven-plugin.version>
       <java.version>1.8</java.version>
    </properties>
    
  4. pom.xml ファイルの <plugins> コレクションを、jib-maven-plugin<plugin> が含まれるように更新します。Update the <plugins> collection in the pom.xml file so that the <plugin> contains the jib-maven-plugin.

    <plugin>
      <artifactId>jib-maven-plugin</artifactId>
      <groupId>com.google.cloud.tools</groupId>
      <version>${jib-maven-plugin.version}</version>
      <configuration>
         <from>
             <image>openjdk:8-jre-alpine</image>
         </from>
         <to>
             <image>${docker.image.prefix}/${project.artifactId}</image>
         </to>
      </configuration>
    </plugin>
    
  5. Spring Boot アプリケーション用の完了プロジェクト ディレクトリに移動し、次のコマンドを実行してイメージを作成し、そのイメージをレジストリにプッシュします。Navigate to the completed project directory for your Spring Boot application and run the following command to build the image and push the image to the registry:

    mvn compile jib:build
    

注意

Azure Cli と Azure Container Registry のセキュリティ上の懸念により、az acr login によって作成された資格情報は 1 時間有効であり、"401 権限がありません" エラーが発生した場合は、もう一度 az acr login -n <your registry name> コマンドを実行して再認証できます。Due to the security concern of Azure Cli and Azure Container Registry, the credential created by az acr login is valid for 1 hour, if you meet 401 Unauthorized error, you can run the az acr login -n <your registry name> command again to reauthenticate.

Azure CLI を使用して AKS で Kubernetes クラスターを作成するCreate a Kubernetes Cluster on AKS using the Azure CLI

  1. Azure Kubernetes Service で Kubernetes クラスターを作成します。Create a Kubernetes cluster in Azure Kubernetes Service. 次のコマンドでは、kubernetes クラスターを wingtiptoys-kubernetes リソース グループに作成します。クラスター名として wingtiptoys-akscluster を、DNS プレフィックスとして wingtiptoys-kubernetes を使用します。The following command creates a kubernetes cluster in the wingtiptoys-kubernetes resource group, with wingtiptoys-akscluster as the cluster name, and wingtiptoys-kubernetes as the DNS prefix:

    az aks create --resource-group=wingtiptoys-kubernetes --name=wingtiptoys-akscluster \ 
     --dns-name-prefix=wingtiptoys-kubernetes --generate-ssh-keys
    

    このコマンドは、完了するまで時間がかかる場合があります。This command may take a while to complete.

  2. Azure Kubernetes Service (AKS) で Azure Container Registry (ACR) を使用する場合は、Azure Kubernetes Service に Azure Container Registry へのプル アクセス権を付与する必要があります。When you're using Azure Container Registry (ACR) with Azure Kubernetes Service (AKS), you need to grant Azure Kubernetes Service pull access to Azure Container Registry. Azure Kubernetes Service の作成時に、既定のサービス プリンシパルが作成されます。Azure creates a default service principal when you are creating Azure Kubernetes Service. Bash または PowerShell で次のスクリプトを使用して、ACR へのアクセス権を AKS に付与します。詳細については、「Azure Kubernetes Service から Azure Container Registry の認証を受ける」を参照してください。Please run the following scripts in bash or Powershell to grant AKS access to ACR, see more details at Authenticate with Azure Container Registry from Azure Kubernetes Service.

   # Get the id of the service principal configured for AKS
   CLIENT_ID=$(az aks show -g wingtiptoys-kubernetes -n wingtiptoys-akscluster --query "servicePrincipalProfile.clientId" --output tsv)
   
   # Get the ACR registry resource id
   ACR_ID=$(az acr show -g wingtiptoys-kubernetes -n wingtiptoysregistry --query "id" --output tsv)
   
   # Create role assignment
   az role assignment create --assignee $CLIENT_ID --role acrpull --scope $ACR_ID

-- または ---- or --

   # Get the id of the service principal configured for AKS
   $CLIENT_ID = az aks show -g wingtiptoys-kubernetes -n wingtiptoys-akscluster --query "servicePrincipalProfile.clientId" --output tsv
   
   # Get the ACR registry resource id
   $ACR_ID = az acr show -g wingtiptoys-kubernetes -n wingtiptoysregistry --query "id" --output tsv
   
   # Create role assignment
   az role assignment create --assignee $CLIENT_ID --role acrpull --scope $ACR_ID
  1. Azure CLI を使用して kubectl をインストールします。Install kubectl using the Azure CLI. Kubernetes CLI は /usr/local/bin にデプロイされるため、Linux ユーザーはこのコマンドの前に sudo を付けなければならない場合があります。Linux users may have to prefix this command with sudo since it deploys the Kubernetes CLI to /usr/local/bin.

    az aks install-cli
    
  2. クラスター構成情報をダウンロードして、Kubernetes Web インターフェイスと kubectl からクラスターを管理できるようにします。Download the cluster configuration information so you can manage your cluster from the Kubernetes web interface and kubectl.

    az aks get-credentials --resource-group=wingtiptoys-kubernetes --name=wingtiptoys-akscluster
    

イメージを Kubernetes クラスターにデプロイするDeploy the image to your Kubernetes cluster

このチュートリアルでは、kubectl を使用してアプリをデプロイします。これにより、Kubernetes Web インターフェイスを通してデプロイを調べることができます。This tutorial deploys the app using kubectl, then allow you to explore the deployment through the Kubernetes web interface.

kubectl を使用してデプロイするDeploy with kubectl

  1. コマンド プロンプトを開きます。Open a command prompt.

  2. kubectl run コマンドを使用して、Kubernetes クラスターのコンテナーを実行します。Run your container in the Kubernetes cluster by using the kubectl run command. Kubernetes でのアプリのサービス名と完全なイメージ名を指定します。Give a service name for your app in Kubernetes and the full image name. 例:For example:

    kubectl run gs-spring-boot-docker --image=wingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest
    

    このコマンドの説明:In this command:

    • コンテナー名 gs-spring-boot-dockerrun コマンドの直後に指定します。The container name gs-spring-boot-docker is specified immediately after the run command

    • --image パラメーターは、結合されたログイン サーバーとイメージの名前を wingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest として指定します。The --image parameter specifies the combined login server and image name as wingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest

  3. kubectl expose コマンドを使用して、Kubernetes クラスターを外部に公開します。Expose your Kubernetes cluster externally by using the kubectl expose command. サービス名、アプリにアクセスするために使用される公開 TCP ポート、およびアプリがリッスンする内部ターゲット ポートを指定します。Specify your service name, the public-facing TCP port used to access the app, and the internal target port your app listens on. 例:For example:

    kubectl expose deployment gs-spring-boot-docker --type=LoadBalancer --port=80 --target-port=8080
    

    このコマンドの説明:In this command:

    • コンテナー名 gs-spring-boot-dockerexpose deployment コマンドの直後に指定します。The container name gs-spring-boot-docker is specified immediately after the expose deployment command.

    • --type パラメーターは、クラスターでロード バランサーを使用することを指定します。The --type parameter specifies that the cluster uses load balancer.

    • --port パラメーターは、公開 TCP ポートとして 80 を指定します。The --port parameter specifies the public-facing TCP port of 80. このポートでアプリにアクセスします。You access the app on this port.

    • --target-port パラメーターは、内部 TCP ポートとして 8080 を指定します。The --target-port parameter specifies the internal TCP port of 8080. ロード バランサーは、このポートでアプリに要求を転送します。The load balancer forwards requests to your app on this port.

  4. クラスターにアプリがデプロイされたら、外部 IP アドレスを照会し、そのアドレスを Web ブラウザーで開きます。Once the app is deployed to the cluster, query the external IP address and open it in your web browser:

    kubectl get services -o jsonpath={.items[*].status.loadBalancer.ingress[0].ip} --namespace=default
    

    Azure でサンプル アプリを参照する

Kubernetes Web インターフェイスを使用してデプロイするDeploy with the Kubernetes web interface

  1. コマンド プロンプトを開きます。Open a command prompt.

  2. Kubernetes クラスターの構成 Web サイトを既定のブラウザーで開きます。Open the configuration website for your Kubernetes cluster in your default browser:

    az aks browse --resource-group=wingtiptoys-kubernetes --name=wingtiptoys-akscluster
    
  3. Kubernetes 構成 Web サイトがブラウザーで開いたら、コンテナー化されたアプリをデプロイするためのリンクを選択します。When the Kubernetes configuration website opens in your browser, select the link to deploy a containerized app:

    Kubernetes 構成 Web サイト

  4. [Resource Creation](リソースの作成) ページが表示されたら、次のオプションを指定します。When the Resource Creation page is displayed, specify the following options:

    a.a. [CREATE AN APP](アプリの作成) を選択します。Select CREATE AN APP.

    b.b. Spring Boot アプリケーション名を [App name](アプリ名) に入力します (例: "gs-spring-boot-docker")。Enter your Spring Boot application name for the App name; for example: "gs-spring-boot-docker".

    c.c. ログイン サーバーとコンテナー イメージを [Container image](コンテナー イメージ) に入力します (例: "wingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest")。Enter your login server and container image from earlier for the Container image; for example: "wingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest".

    d.d. [Service](サービス)[External](外部) を選択します。Choose External for the Service.

    e.e. 外部ポートと内部ポートを [Port](ポート) テキスト ボックスと [Target port](ターゲット ポート) テキスト ボックスに指定します。Specify your external and internal ports in the Port and Target port text boxes.

    Kubernetes 構成 Web サイト

  5. [Deploy](デプロイ) を選択してコンテナーをデプロイします。Select Deploy to deploy the container.

    Kubernetes デプロイ

  6. アプリケーションがデプロイされると、 [Services](サービス) の下に Spring Boot アプリケーションが表示されます。Once your application has been deployed, you will see your Spring Boot application listed under Services.

    Kubernetes サービス

  7. [External endpoints](外部エンドポイント)\ のリンクを選択すると、Spring Boot アプリケーションが Azure で実行されていることを確認できます。If you select the link for External endpoints, you can see your Spring Boot application running on Azure.

    Kubernetes サービス

    Azure でサンプル アプリを参照する

次の手順Next steps

Spring および Azure の詳細については、Azure ドキュメント センターで引き続き Spring に関するドキュメントをご確認ください。To learn more about Spring and Azure, continue to the Spring on Azure documentation center.

その他のリソースAdditional Resources

Azure での Spring Boot の使用の詳細については、次の記事を参照してください。For more information about using Spring Boot on Azure, see the following article:

Java での Azure の使用の詳細については、「Java 開発者向けの Azure」および「Azure DevOps と Java の操作」を参照してください。For more information about using Azure with Java, see the Azure for Java Developers and the Working with Azure DevOps and Java.

Visual Studio Code を使用して Java アプリケーションを Kubernetes にデプロイする方法の詳細については、Visual Studio Code Java チュートリアルを参照してください。For more information about deploying a Java application to Kubernetes with Visual Studio Code, see Visual Studio Code Java Tutorials.

Docker サンプル プロジェクトでの Spring Boot の詳細については、Docker での Spring Boot の使用開始に関するページを参照してください。For more information about the Spring Boot on Docker sample project, see Spring Boot on Docker Getting Started.

次のリンクは、Spring Boot アプリケーションの作成に関する追加情報を提供します。The following links provide additional information about creating Spring Boot applications:

  • 単純な Spring Boot アプリケーションの作成の詳細については、Spring Initializr (https://start.spring.io/ ) を参照してください。For more information about creating a simple Spring Boot application, see the Spring Initializr at https://start.spring.io/.

次のリンクは、Azure での Kubernetes の使用に関する追加情報を提供します。The following links provide additional information about using Kubernetes with Azure:

Kubernetes コマンド ライン インターフェイスの使用方法の詳細については、kubectl ユーザー ガイド (https://kubernetes.io/docs/user-guide/kubectl/) を参照してください。More information about using Kubernetes command-line interface is available in the kubectl user guide at https://kubernetes.io/docs/user-guide/kubectl/.

Kubernetes web サイトには、プライベート レジストリでのイメージの使用に関するさまざまな記事があります。The Kubernetes website has several articles that discuss using images in private registries:

Azure でカスタム Docker イメージを使用する方法に関するその他の例については、「Azure Web App on Linux 向けのカスタム Docker イメージを使用する」を参照してください。For additional examples for how to use custom Docker images with Azure, see Using a custom Docker image for Azure Web App on Linux.

Azure Kubernetes Service (AKS) で直接 Azure Dev Spaces を使用してコンテナーの実行とデバッグを繰り返す場合の詳細については、「Azure Dev Spaces での Java の使用」を参照してください。For more information about iteratively running and debugging containers directly in Azure Kubernetes Service (AKS) with Azure Dev Spaces, see Get started on Azure Dev Spaces with Java