カテゴリ: Quarkus 更新日: 2026/03/04

QuarkusのKubernetesヘルスチェック設定を完全解説!初心者でもわかるクラウド連携入門

QuarkusアプリのKubernetesヘルスチェック設定
QuarkusアプリのKubernetesヘルスチェック設定

先生と生徒の会話形式で理解しよう

生徒

「Quarkusで作ったアプリをKubernetesにデプロイしたんですが、ヘルスチェックって何を設定すればいいんですか?」

先生

「Kubernetesでは、アプリが正常に動いているかを自動で監視する仕組みがとても重要です。Quarkusには、そのための仕組みが最初から用意されています。」

生徒

「設定が難しそうで不安です。初心者でもできますか?」

先生

「大丈夫です。QuarkusとKubernetesの考え方を順番に理解すれば、シンプルな設定で実現できます。」

1. QuarkusとKubernetesヘルスチェックの基本

1. QuarkusとKubernetesヘルスチェックの基本
1. QuarkusとKubernetesヘルスチェックの基本

Quarkusは、クラウドネイティブJavaフレームワークとして設計されており、KubernetesやOpenShiftとの連携を前提に作られています。その中でも重要なのが、Kubernetesヘルスチェックです。ヘルスチェックとは、アプリケーションが正常に起動しているか、リクエストを処理できる状態かをKubernetesが定期的に確認する仕組みです。

この仕組みにより、異常が発生したPodを自動的に再起動したり、トラフィックを止めたりできます。クラウド環境では手動監視が難しいため、ヘルスチェックは必須の設定と言えます。

2. livenessとreadinessの違い

2. livenessとreadinessの違い
2. livenessとreadinessの違い

Kubernetesのヘルスチェックには、主にlivenessとreadinessという二つの概念があります。livenessは、アプリが生きているかどうかを確認します。応答がなければ、KubernetesはそのPodを再起動します。

一方、readinessは、アプリがリクエストを受け付けられる状態かを確認します。起動直後や外部サービス接続中など、一時的に処理できない場合にトラフィックを止める役割があります。Quarkusでは、この二つを明確に分けて実装できます。

3. MicroProfile HealthによるQuarkus設定

3. MicroProfile HealthによるQuarkus設定
3. MicroProfile HealthによるQuarkus設定

Quarkusでは、MicroProfile Healthという仕様を使ってヘルスチェックを実装します。これにより、Kubernetesがアクセスするエンドポイントを簡単に用意できます。追加のライブラリ設定も少なく、初心者でも扱いやすい点が特徴です。

まずは、シンプルなヘルスチェック用クラスを作成します。


import org.eclipse.microprofile.health.HealthCheck;
import org.eclipse.microprofile.health.HealthCheckResponse;
import org.eclipse.microprofile.health.Liveness;
import jakarta.enterprise.context.ApplicationScoped;

@Liveness
@ApplicationScoped
public class SimpleLivenessCheck implements HealthCheck {

    @Override
    public HealthCheckResponse call() {
        return HealthCheckResponse.up("quarkus-app-live");
    }
}

このコードでは、アプリが生きていることを常に返す基本的なlivenessチェックを定義しています。

4. readinessチェックの実装例

4. readinessチェックの実装例
4. readinessチェックの実装例

次に、readinessチェックの例です。データベース接続や外部APIの状態を確認するケースを想定すると理解しやすくなります。ここでは簡単なフラグ判定の例を示します。


import org.eclipse.microprofile.health.HealthCheck;
import org.eclipse.microprofile.health.HealthCheckResponse;
import org.eclipse.microprofile.health.Readiness;
import jakarta.enterprise.context.ApplicationScoped;

@Readiness
@ApplicationScoped
public class SimpleReadinessCheck implements HealthCheck {

    @Override
    public HealthCheckResponse call() {
        boolean ready = true;
        if (ready) {
            return HealthCheckResponse.up("quarkus-app-ready");
        } else {
            return HealthCheckResponse.down("quarkus-app-not-ready");
        }
    }
}

readinessを設定することで、起動直後や一時的な障害時に安全な運用が可能になります。

5. application.propertiesでの設定

5. application.propertiesでの設定
5. application.propertiesでの設定

Quarkusでは、設定ファイルを使ってヘルスチェックの公開パスや動作を制御できます。デフォルトでは、ヘルスチェックは特定のURLで公開され、Kubernetesからアクセスされます。


quarkus.smallrye-health.root-path=/health
quarkus.smallrye-health.liveness-path=/live
quarkus.smallrye-health.readiness-path=/ready

この設定により、URL構成が明確になり、運用時のトラブルシューティングもしやすくなります。

6. Kubernetesマニフェストへの設定

6. Kubernetesマニフェストへの設定
6. Kubernetesマニフェストへの設定

次に、Kubernetes側での設定です。Deploymentの中で、livenessProbeとreadinessProbeを指定します。Quarkusのエンドポイントと一致させることが重要です。


apiVersion: apps/v1
kind: Deployment
metadata:
  name: quarkus-app
spec:
  replicas: 1
  template:
    spec:
      containers:
        - name: quarkus
          image: quarkus-app:latest
          livenessProbe:
            httpGet:
              path: /health/live
              port: 8080
          readinessProbe:
            httpGet:
              path: /health/ready
              port: 8080

この設定により、KubernetesはQuarkusアプリの状態を自動的に監視します。

7. クラウド環境での運用ポイント

7. クラウド環境での運用ポイント
7. クラウド環境での運用ポイント

クラウド環境では、Podの再起動やスケーリングが頻繁に発生します。そのため、ヘルスチェックのレスポンスはできるだけ軽量に保つことが重要です。重い処理を入れると、誤検知やパフォーマンス低下につながります。

また、OpenShiftやマネージドKubernetesサービスでも基本的な考え方は同じです。Quarkusのヘルスチェック設定を正しく行うことで、安定したクラウドネイティブ運用が実現できます。

8. 初心者がつまずきやすい注意点

8. 初心者がつまずきやすい注意点
8. 初心者がつまずきやすい注意点

初心者がよくつまずくポイントとして、URLのパス設定ミスやポート番号の不一致があります。Quarkus側とKubernetes側の設定が一致しているかを必ず確認しましょう。

また、ローカル環境では問題なく動いていても、Dockerコンテナ化した際に挙動が変わる場合があります。ログを確認しながら、一つずつ設定を見直すことが大切です。

カテゴリの一覧へ
新着記事
New1
Quarkus
QuarkusのREST APIでJSONレスポンスを返す方法を完全解説!初心者向けJackson・JSON-B入門
New2
Quarkus
Quarkus拡張開発入門!GraalVMネイティブイメージ統合の仕組みを徹底解説
New3
Micronaut
Micronautの@Requiresとは?条件付きBeanの読み込み方法をやさしく解説【DIとアノテーション入門】
New4
Quarkus
Quarkusでマイクロサービス構成を作るプロジェクト設計を完全解説!初心者でも理解できる分割設計の考え方
人気記事
No.1
Java&Spring記事人気No1
Quarkus
Quarkus拡張開発を徹底解説!仕組みから自作エクステンションの作り方まで
No.2
Java&Spring記事人気No2
Java
Javaのコンパイルと実行の流れを解説!JVM・JDK・JREの違いも初心者向けに整理
No.3
Java&Spring記事人気No3
Quarkus
Quarkus入門!GitHub ActionsでCI/CDパイプラインを構築して自動ビルドを実現する方法
No.4
Java&Spring記事人気No4
Java
JavaのString検索方法を完全ガイド!contains・indexOf・startsWith・endsWithを徹底解説
No.5
Java&Spring記事人気No5
Java
JavaのString比較を徹底解説!equalsと==の違い、初心者が陥る罠とは?
No.6
Java&Spring記事人気No6
Java
Java Functionインタフェースの使い方を完全ガイド!map変換と処理チェーンを理解する
No.7
Java&Spring記事人気No7
Quarkus
Quarkus拡張開発入門!自作Extensionを作る基本ステップと仕組みを徹底解説
No.8
Java&Spring記事人気No8
Micronaut
Micronautのリクエスト制限(Rate Limiting)を徹底解説!サーバーを守る流量制御