QuarkusのKubernetesヘルスチェック設定を完全解説!初心者でもわかるクラウド連携入門
生徒
「Quarkusで作ったアプリをKubernetesにデプロイしたんですが、ヘルスチェックって何を設定すればいいんですか?」
先生
「Kubernetesでは、アプリが正常に動いているかを自動で監視する仕組みがとても重要です。Quarkusには、そのための仕組みが最初から用意されています。」
生徒
「設定が難しそうで不安です。初心者でもできますか?」
先生
「大丈夫です。QuarkusとKubernetesの考え方を順番に理解すれば、シンプルな設定で実現できます。」
1. QuarkusとKubernetesヘルスチェックの基本
Quarkusは、クラウドネイティブJavaフレームワークとして設計されており、KubernetesやOpenShiftとの連携を前提に作られています。その中でも重要なのが、Kubernetesヘルスチェックです。ヘルスチェックとは、アプリケーションが正常に起動しているか、リクエストを処理できる状態かをKubernetesが定期的に確認する仕組みです。
この仕組みにより、異常が発生したPodを自動的に再起動したり、トラフィックを止めたりできます。クラウド環境では手動監視が難しいため、ヘルスチェックは必須の設定と言えます。
2. livenessとreadinessの違い
Kubernetesのヘルスチェックには、主にlivenessとreadinessという二つの概念があります。livenessは、アプリが生きているかどうかを確認します。応答がなければ、KubernetesはそのPodを再起動します。
一方、readinessは、アプリがリクエストを受け付けられる状態かを確認します。起動直後や外部サービス接続中など、一時的に処理できない場合にトラフィックを止める役割があります。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チェックの実装例
次に、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での設定
Quarkusでは、設定ファイルを使ってヘルスチェックの公開パスや動作を制御できます。デフォルトでは、ヘルスチェックは特定のURLで公開され、Kubernetesからアクセスされます。
quarkus.smallrye-health.root-path=/health
quarkus.smallrye-health.liveness-path=/live
quarkus.smallrye-health.readiness-path=/ready
この設定により、URL構成が明確になり、運用時のトラブルシューティングもしやすくなります。
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. クラウド環境での運用ポイント
クラウド環境では、Podの再起動やスケーリングが頻繁に発生します。そのため、ヘルスチェックのレスポンスはできるだけ軽量に保つことが重要です。重い処理を入れると、誤検知やパフォーマンス低下につながります。
また、OpenShiftやマネージドKubernetesサービスでも基本的な考え方は同じです。Quarkusのヘルスチェック設定を正しく行うことで、安定したクラウドネイティブ運用が実現できます。
8. 初心者がつまずきやすい注意点
初心者がよくつまずくポイントとして、URLのパス設定ミスやポート番号の不一致があります。Quarkus側とKubernetes側の設定が一致しているかを必ず確認しましょう。
また、ローカル環境では問題なく動いていても、Dockerコンテナ化した際に挙動が変わる場合があります。ログを確認しながら、一つずつ設定を見直すことが大切です。