次の方法で共有


Spring Boot アプリケーションを Azure Kubernetes Service にデプロイする

手記

Spring Boot アプリケーションの場合は、Azure Spring Apps を使用することをお勧めします。 ただし、Azure Kubernetes Service を宛先として使用することもできます。 詳細については、「Java アプリケーションに適した Azure サービスを選択する」を参照してください。

このチュートリアルでは、Kubernetes と Docker を組み合わせて、Spring Boot アプリケーションを開発して Microsoft Azure にデプロイする方法について説明します。 具体的には、Spring Boot を使用して、アプリケーションの開発、コンテナーのデプロイに Kubernetes を し、アプリケーションをホストする Azure Kubernetes Service (AKS) を使用します。

KubernetesDocker は、開発者がコンテナーで実行されているアプリケーションのデプロイ、スケーリング、管理を自動化するのに役立つオープンソース ソリューションです。

前提 条件

手記

このチュートリアルの仮想化要件のため、仮想マシンでこの記事の手順に従うことはできません。仮想化機能が有効になっている物理コンピューターを使用する必要があります。

Docker Getting Started Web アプリで Spring Boot を作成する

次の手順では、Spring Boot Web アプリケーションをビルドし、ローカルでテストする手順について説明します。

  1. コマンド プロンプトを開き、アプリケーションを保持するローカル ディレクトリを作成し、そのディレクトリに変更します。例えば:

    mkdir C:\SpringBoot
    cd C:\SpringBoot
    

    --又は--

    mkdir /users/$USER/SpringBoot
    cd /users/$USER/SpringBoot
    
  2. Docker Getting Started サンプル プロジェクトの Spring Boot をディレクトリに複製します。

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

    cd gs-spring-boot-docker
    cd complete
    
  4. Maven を使用してサンプル アプリをビルドして実行します。

    mvn package spring-boot:run
    
  5. http://localhost:8080を参照するか、次の curl コマンドを使用して、Web アプリをテストします。

    curl http://localhost:8080
    
  6. 次のメッセージが表示されます。 Hello Docker World

    サンプル アプリをローカルで参照

Azure CLI を使用して Azure Container Registry を作成する

  1. コマンド プロンプトを開きます。

  2. Azure アカウントにログインします。

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

    az account set -s <YourSubscriptionID>
    
  4. このチュートリアルで使用する Azure リソースのリソース グループを作成します。

    az group create --name=wingtiptoys-kubernetes --location=eastus
    
  5. リソース グループにプライベート Azure コンテナー レジストリを作成します。 このチュートリアルでは、後の手順でサンプル アプリを Docker イメージとしてこのレジストリにプッシュします。 wingtiptoysregistry をレジストリの一意の名前に置き換えます。

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

Jib を使用してコンテナー レジストリにアプリをプッシュする

  1. 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
    
  2. テキストエディターを使用して pom.xml ファイルを開きます。たとえば、Visual Studio Code を使用します

    code pom.xml
    
  3. 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>
    
  4. 次の例に示すように、<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>
    
  5. 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 クラスターを作成する

  1. 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
    

    このコマンドが完了するまでに時間がかかる場合があります。

  2. Azure CLI を使用して kubectl をインストールします。 Linux ユーザーは、Kubernetes CLI を /usr/local/binにデプロイするため、このコマンドの前に sudo を付ける必要がある場合があります。

    az aks install-cli
    
  3. Kubernetes Web インターフェイスと kubectlからクラスターを管理できるように、クラスター構成情報をダウンロードします。

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

Kubernetes クラスターにイメージをデプロイする

このチュートリアルでは、kubectlを使用してアプリをデプロイし、Kubernetes Web インターフェイスを使用してデプロイを調べることができます。

kubectl を使用したデプロイ

  1. コマンド プロンプトを開きます。

  2. 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 というログインサーバーとイメージ名を指定します。

  3. 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 ポートを指定します。 ロード バランサーは、このポートで要求をアプリに転送します。

  4. アプリがクラスターにデプロイされたら、外部 IP アドレスに対してクエリを実行し、Web ブラウザーで開きます。

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

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

Kubernetes リソース ビューを使用したデプロイ

  1. リソース ビュー (名前空間、ワークロード、サービスとイングレス、ストレージ、または構成) から [ の追加] を選択します。

    Kubernetes リソースビュー

  2. 次の 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
    
  3. 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
    
  4. YAML ファイルが追加されると、リソース ビューアーに Spring Boot アプリケーションが表示されます。 外部サービスにはリンクされた外部 IP アドレスが含まれているため、ブラウザーでアプリケーションを簡単に表示できます。

    Kubernetes リソース ビュー、サービス一覧。

    Kubernetes リソース ビュー、サービス一覧、外部エンドポイントが強調表示されています。

  5. 外部 IPを選択します。 その後、Spring Boot アプリケーションが Azure で実行されていることがわかります。

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

次の手順

Spring と Azure の詳細については、Spring on Azure ドキュメント センターに進んでください。

関連項目

Azure での Spring Boot の使用の詳細については、次の記事を参照してください。

  • Azure App Service で Spring Boot アプリケーションを Linux にデプロイする

Java での Azure の使用の詳細については、Java 開発者向け Azure と、Azure DevOps と Javaの使用に関する を参照してください。

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 の使用に関する追加情報を提供します。

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 の概要」を参照してください