0
0

More than 1 year has passed since last update.

Spring Boot WEBサービスを Kubernetes 環境で起動する

Last updated at Posted at 2023-02-10

Spring Boot WEBサービスを Kubernetes 環境で起動する

目的

Spring Boot WEBサービスを Kubernetes 環境で起動して理解を深めます。

実現すること

ローカル (Ubuntu) の Kubernetes 環境 (Docker Desktop) に Spring Boot WEBアプリの Docker イメージをデプロイ・起動します。

開発環境

  • Windows 11 Home 22H2 を使用しています。
  • WSL の Ubuntu を操作していきますので macOS の方も参考にして頂けます。

WSL (Microsoft Store アプリ版)

> wsl --version
WSL バージョン: 1.0.3.0
カーネル バージョン: 5.15.79.1
WSLg バージョン: 1.0.47

Ubuntu

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.1 LTS
Release:        22.04

Java JDK ※ 最小構成 Java JDK の導入と Hello World!

$ java -version
openjdk version "11.0.17" 2022-10-18
OpenJDK Runtime Environment (build 11.0.17+8-post-Ubuntu-1ubuntu222.04)
OpenJDK 64-Bit Server VM (build 11.0.17+8-post-Ubuntu-1ubuntu222.04, mixed mode, sharing)

Maven ※ 最小構成 Maven の導入と Hello World!

$ mvn -version
Apache Maven 3.6.3
Maven home: /usr/share/maven
Java version: 11.0.17, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64

Docker Desktop

Version 4.16.3 (96739)
$ docker --version
Docker version 20.10.22, build 3a2c30b
$ docker-compose --version
Docker Compose version v2.15.1
$ kubectl version --short
Client Version: v1.25.4
Kustomize Version: v4.5.7
Server Version: v1.25.4

※ この記事では基本的に Ubuntu のターミナルで操作を行います。

"Hello World" を表示する手順

Spring Boot WEBサービスの作成

最小構成 Spring Boot WEBサービスの Hello World! を参照してください。

プロジェクトフォルダに移動
※ ~/tmp/hello-spring-boot をプロジェクトフォルダとします。

$ cd ~/tmp/hello-spring-boot

Java アプリをビルド(※参考)
※ target/app.jar が作成されます。
※ 下の Docker イメージを作成する操作でも同時に target/app.jar が作成されるので必須ではありません。

$ mvn clean install

Docker イメージを作成

Docker イメージをビルド
※ ローカルの Docker 環境 (Docker Desktop) に app-hello-spring-boot Docker イメージが作成されます。
※ Docker イメージの作成時間が Unix エポックになるのは spring-boot:build-image の仕様です。

$ mvn spring-boot:build-image \
    -Dspring-boot.build-image.imageName=app-hello-spring-boot

Docker イメージの確認

$ docker images | grep app-hello-spring-boot
app-hello-spring-boot   latest   e37cc77f2b36   43 years ago   262MB

Kubernetes 環境の準備

Docker Desktop

Docker Desktop の Kubernetes 環境を有効化します。

[Settings] → [Kubernetes]

  • Enable Kubernetes

Kubernetes のマニュフェストを作成

$ vim kube-all-in-one.yaml

ファイルの内容

apiVersion: v1
kind: Service
metadata:
  name: app-service
spec:
  type: NodePort
  selector:
    app: app
  ports:
  - name: http
    port: 8080
    targetPort: 8080
    nodePort: 30000
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: app
  template:
    metadata:
      labels:
        app: app
    spec:
      containers:
      - name: app
        image: app-hello-spring-boot
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8080

ディレクトリ・ファイル構成

$ tree -I test -I target
.
├── Dockerfile
├── HELP.md
├── docker-compose.yml
├── kube-all-in-one.yaml
├── mvnw
├── mvnw.cmd
├── nginx.conf
├── pom.xml
└── src
    └── main
        ├── java
        │   └── com
        │       └── example
        │           └── springboot
        │               ├── SpringbootApplication.java
        │               └── controller
        │                   └── DataController.java
        └── resources
            ├── application.properties
            ├── static
            └── templates

Kubernetes 環境

バージョン確認

$ kubectl version --short
Client Version: v1.25.4
Kustomize Version: v4.5.7
Server Version: v1.25.4

接続先を確認

$ kubectl config current-context
docker-desktop

※ 接続先をローカル (docker-desktop) に戻す場合

$ kubectl config use-context docker-desktop

デプロイ

$ kubectl apply -f kube-all-in-one.yaml
service/app-service created
deployment.apps/app-deployment created

状態確認

$ kubectl get pods,services,deployments
NAME                                 READY   STATUS    RESTARTS   AGE
pod/app-deployment-cdc7dcbf9-4rkp2   1/1     Running   0          22s

NAME                  TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
service/app-service   NodePort    10.103.38.116   <none>        8080:30000/TCP   22s
service/kubernetes    ClusterIP   10.96.0.1       <none>        443/TCP          2d22h

NAME                             READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/app-deployment   1/1     1            1           22s

※ Docker Desktop を確認するとコンテナとして起動しています。

WEBブラウザで確認

http://localhost:30000/api/data

WEBブラウザに {"message":"Hello World!"} と表示され、JSON データを取得することが出来ました。

※ もしくは別ターミナルのコマンドで確認

$ curl -X GET http://localhost:30000/api/data
{"message":"Hello World!"}

まとめ

  • Ubuntu の 最小構成の Java 開発環境で Spring Boot WEBサービスを Kubernetes 環境にてコンテナとして起動させることが出来ました。
  • 次のステップとして構成にリバースプロキシを加える設定に続きます。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0