次の方法で共有


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

メモ

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

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

KubernetesDocker は、開発者が、コンテナーで実行されるアプリケーションのデプロイ、スケーリング、管理を自動化できるよう支援するオープン ソース ソリューションです。

前提条件

メモ

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

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

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

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

    mkdir C:\SpringBoot
    cd C:\SpringBoot
    

    -- または --

    mkdir /users/$USER/SpringBoot
    cd /users/$USER/SpringBoot
    
  2. Docker での 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. Web アプリをテストするには、 http://localhost:8080 を参照するか、次の curl コマンドを使用します。

    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. <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>
    
  4. 以下の例に示すように pom.xml ファイルの <plugins> コレクションを更新し、<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>
    
  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 をインストールします。 Kubernetes CLI は /usr/local/bin にデプロイされるため、Linux ユーザーはこのコマンドの前に 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-dockerrun コマンドの直後に指定します。

    • --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-dockerexpose pod コマンドの直後に指定します。

    • --type パラメーターは、クラスターでロード バランサーを使用することを指定します。

    • --port パラメーターは、公開 TCP ポートとして 80 を指定します。 このポートでアプリにアクセスします。

    • --target-port パラメーターは、内部 TCP ポートとして 8080 を指定します。 ロード バランサーは、このポートでアプリに要求を転送します。

  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 リソース ビュー 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 の詳細については、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 の使用」を参照してください。