JavaとKubernetesの連携入門|Spring Bootアプリをクラスタで動かすための完全ステップガイド

Java

「JavaアプリをKubernetesで動かしたい」
「Pod?Deployment?正直よく分からない」
「Dockerまでは分かるけど、その先が怖い…」

そんなJavaエンジニアのための記事です。

この記事では、

  • Kubernetesとは何か
  • Javaアプリをどうやってデプロイするのか
  • スケール・設定管理・ヘルスチェックの考え方
  • Javaエンジニアが気をつけるべきポイント

を、小学生にもわかるようにやさしく解説します。
でも中身は実務レベルです。


なぜ今「Java × Kubernetes」なのか?

いまの現場では、

Java + Docker + Kubernetes

がほぼ標準構成です。

Kubernetesとは、

コンテナをまとめて管理する仕組み

です。

Dockerが「箱」だとすると、
Kubernetesは「その箱を自動で並べ替えてくれる管理人」です。


JavaエンジニアがKubernetesを学ぶメリット

  • デプロイの流れが理解できる
  • スケールの仕組みが分かる
  • インフラ担当と会話できる
  • 転職市場で評価が上がる

コードだけ書ける人から、
運用まで理解している人へレベルアップできます。


ステップ①:Javaアプリをコンテナ化する

まずはDockerです。

Spring Bootアプリを例にします。

シンプルなDockerfile

FROM eclipse-temurin:17-jre
WORKDIR /app
COPY target/app.jar app.jar
ENTRYPOINT ["java","-jar","app.jar"]

これでJavaアプリはコンテナになります。

ここまでできれば、
Kubernetesに乗せる準備はOKです。


ステップ②:Kubernetesの基本用語を理解する

難しく感じますが、
実は単純です。


Podとは?

Podとは、

コンテナの入れ物

です。

Javaアプリが動く最小単位。


Deploymentとは?

Deploymentとは、

Podを何個動かすか決める設計図

です。

例:

  • Javaアプリを三つ同時に動かす
  • 新バージョンに順番に切り替える

などを管理します。


Serviceとは?

Serviceは、

Podへの安定した入り口

です。

Podは入れ替わります。
でもServiceは固定です。

ブラウザはServiceにアクセスします。


ConfigMapとSecret

  • ConfigMap → 設定値
  • Secret → パスワードなど機密情報

Javaアプリに外から設定を渡します。


ステップ③:Deploymentを書いてみる

例:

apiVersion: apps/v1
kind: Deployment
metadata:
name: java-app
spec:
replicas: 2
selector:
matchLabels:
app: java-app
template:
metadata:
labels:
app: java-app
spec:
containers:
- name: java-app
image: myrepo/java-app:1.0.0
ports:
- containerPort: 8080

ポイント:

  • replicasで数を指定
  • imageでDockerイメージ指定
  • containerPortはSpring Bootのポートと合わせる

ステップ④:Serviceを書く

apiVersion: v1
kind: Service
metadata:
name: java-service
spec:
type: ClusterIP
selector:
app: java-app
ports:
- port: 80
targetPort: 8080

これで、

外部 → Service → Pod

という流れができます。


デプロイしてみる

kubectl apply -f deployment.yaml
kubectl apply -f service.yaml

確認:

kubectl get pods
kubectl logs <pod名>

ここまでできれば、
JavaアプリはKubernetes上で動いています。


ステップ⑤:スケーリング

kubectl scale deployment java-app --replicas=3

Javaアプリが三つ動きます。

何もコードを変えなくても、
Kubernetesが分散します。

これが強みです。


ステップ⑥:ローリングアップデート

イメージを更新し、

kubectl apply -f deployment.yaml

すると、

  • 古いPodを少しずつ停止
  • 新しいPodを順番に起動

します。

ダウンタイムを最小にできます。


Javaエンジニアが気をつけるポイント

メモリ設定

コンテナではメモリ制限があります。

ENTRYPOINT ["java","-XX:MaxRAMPercentage=75.0","-jar","app.jar"]

これが重要です。


ヘルスチェック

Spring BootならActuatorを使います。

livenessProbe:
httpGet:
path: /actuator/health
port: 8080

これでKubernetesが異常検知します。


ログは標準出力へ

ログファイルではなく、
標準出力に出す。

kubectl logs <pod>

で確認できます。


設定は外部化する

application.propertiesにベタ書きしない。

ConfigMapで渡します。

env:
- name: SPRING_PROFILES_ACTIVE
value: prod

これがクラウドネイティブ設計です。


JavaとKubernetesの相性が良い理由

Javaは、

  • 長期運用に強い
  • GCチューニングが豊富
  • フレームワークが成熟

しています。

Spring BootはKubernetesとの相性が抜群です。

Javaはエンタープライズ現場での採用が多く、
Kubernetesとの組み合わせ事例も豊富です。


学習ロードマップ

おすすめ順序:

  • Java基礎
  • Spring Boot
  • Docker
  • Kubernetes
  • 監視・セキュリティ

順番が大事です。


まずはJava力を固めよう

Kubernetes以前に、
Javaが書けないと意味がありません。

絶対にJavaプログラマーになりたい人へ。
https://amzn.asia/d/3E1CYbv

基礎を固めれば、
DockerやKubernetesも理解できます。


本気でクラウドネイティブを目指すなら

  • DockerやYAMLが不安
  • 本番設計を学びたい
  • 転職までサポートしてほしい

そんな人はサイゼントアカデミー。

サイゼントアカデミー - Javaプログラマーになりたい人へのオンラインプログラミングスクール
Javaプログラマーで即戦力になりたい人のための本格オンラインプログラミングスクール 実践的なカリキュラムと充実のサポートで、確実にスキルアップ! 入会キャンペーン実施中!返金保証制度あり。使用する教材はKindleで公開中。

Java+Docker+Kubernetesを
実践レベルで学べます。


まとめ

JavaとKubernetes連携の流れは:

  • JavaアプリをDocker化
  • DeploymentとServiceを書く
  • kubectlでデプロイ
  • スケールと更新を体験
  • 設定・ログ・ヘルスを整える

いきなり全部理解しなくていい。

まずは一つ、
Spring BootアプリをKubernetesに載せてみましょう。

そこから世界が広がります。

あなたが
クラウドネイティブも理解できるJavaエンジニア
になることを応援しています。

コメント

タイトルとURLをコピーしました