マルチサイトデプロイメントのヘルスチェック

マルチサイトデプロイメントの健全性の検証

Kubernetes 環境で マルチサイトデプロイメント を実行している場合、すべてが期待どおりに稼働しているかを確認するためにチェックを自動化する必要があります。

このページでは、Keycloak のマルチサイト構成を検証するために利用できる URL、Kubernetes リソース、およびヘルスチェックエンドポイントの概要について説明します。

概要

プロアクティブな監視戦略は、ユーザーに影響を与える前に問題を検出し、警告することを目的としています。この戦略は、高回復力と高可用性を備えた Keycloak アプリケーションを実現するための鍵となります。

アプリケーションのヘルス、ロードバランシング、キャッシング、システム全体のステータスなど、さまざまなアーキテクチャコンポーネントにわたるヘルスチェックは、以下にとって重要です。

高可用性の確保

すべてのサイトとロードバランサーが稼働していることを検証することは、あるサイトがダウンした場合でもシステムがリクエストを処理できることを保証するための鍵となります。

パフォーマンスの維持

Infinispan キャッシュのヘルスと分散をチェックすることで、Keycloak がセッションやその他の一時データを効率的に処理することにより、最適なパフォーマンスを維持できるようにします。

運用上の回復力

Kubernetes 環境内の Keycloak とその依存関係の両方のヘルスを継続的に監視することにより、システムは問題を迅速に特定し、場合によっては自動的に修復して、ダウンタイムを削減できます。

前提条件

  1. Kubectl CLI がインストールおよび構成済みであること.

  2. オペレーティングシステムに jq がまだインストールされていない場合はインストールしてください。

特定のヘルスチェック

Keycloak ロードバランサーとサイト

Keycloak アプリケーションのヘルスを、ロードバランサーとプライマリサイトおよびバックアップサイトの両方を介して検証します。これにより、Keycloak がアクセス可能であり、ロードバランシングメカニズムが異なる地理的またはネットワークロケーション間で正しく機能していることが保証されます。

このコマンドは、Keycloak アプリケーションが構成済みのデータベースへの接続のヘルスステータスを返し、データベース接続の信頼性を確認します。このコマンドは、管理ポートでのみ利用可能であり、外部 URL からは利用できません。Kubernetes セットアップでは、サブステータス health/ready が Pod を ready にするために定期的にチェックされます。

curl -s https://keycloak:managementport/health

このコマンドは、ロードバランサーの lb-check エンドポイントを検証し、Keycloak アプリケーションクラスターが起動して実行中であることを保証します。

curl -s https://keycloak-load-balancer-url/lb-check

これらのコマンドは、マルチサイト構成における Keycloak のサイト A およびサイト B の実行ステータスを返します。

curl -s https://keycloak_site_a_url/lb-check
curl -s https://keycloak_site_b_url/lb-check

Infinispan キャッシュのヘルス

外部 Infinispan クラスター内のデフォルトキャッシュマネージャーと個々のキャッシュのヘルスをチェックします。このチェックは、Keycloak のパフォーマンスと信頼性にとって不可欠です。Infinispan は、Keycloak デプロイメントにおける分散キャッシングとセッションクラスタリングによく使用されるためです。

このコマンドは、Infinispan キャッシュマネージャーの全体的なヘルスを返します。これは、管理者ユーザーがヘルスステータスを取得するためにユーザー資格情報を提供する必要がないため便利です。

curl -s https://infinispan_rest_url/rest/v2/cache-managers/default/health/status

上記のヘルスチェックとは対照的に、以下のヘルスチェックでは、管理者ユーザーが外部 Infinispan クラスターキャッシュの全体的なヘルスを覗き見するために、リクエストの一部として Infinispan ユーザー資格情報を提供する必要があります。

curl -u <infinispan_user>:<infinispan_pwd> -s https://infinispan_rest_url/rest/v2/cache-managers/default/health \
 | jq 'if .cluster_health.health_status == "HEALTHY" and (all(.cache_health[].status; . == "HEALTHY")) then "HEALTHY" else "UNHEALTHY" end'

jq フィルターは、個々のキャッシュヘルスに基づいて全体的なヘルスを計算するための便利な機能です。jq フィルターなしで上記のコマンドを実行して、詳細な情報を確認することもできます。

Infinispan クラスタの分散

Infinispan クラスターの分散ヘルスを評価し、クラスターのノードがデータを正しく分散していることを保証します。このステップは、キャッシングレイヤーのスケーラビリティとフォールトトレランスにとって不可欠です。

expectedCount 3 引数を変更して、クラスター内のノードの合計数に合わせて、それらが正常であるかどうかを検証できます。

curl <infinispan_user>:<infinispan_pwd> -s https://infinispan_rest_url/rest/v2/cluster\?action\=distribution \
 | jq --argjson expectedCount 3 'if map(select(.node_addresses | length > 0)) | length == $expectedCount then "HEALTHY" else "UNHEALTHY" end'

全体的な Infinispan システムヘルス

kubectl CLI ツールを使用して、指定された名前空間内の Infinispan クラスターと Keycloak サービスのヘルスステータスをクエリします。この包括的なチェックにより、Keycloak デプロイメントのすべてのコンポーネントが Kubernetes 環境内で稼働しており、正しく構成されていることが保証されます。

kubectl get infinispan -n <NAMESPACE> -o json  \
| jq '.items[].status.conditions' \
| jq 'map({(.type): .status})' \
| jq 'reduce .[] as $item ([]; . + [keys[] | select($item[.] != "True")]) | if length == 0 then "HEALTHY" else "UNHEALTHY: " + (join(", ")) end'

Kubernetes における Keycloak の readiness

具体的には、Kubernetes における Keycloak デプロイメントの readiness とローリングアップデートの状況をチェックし、Keycloak インスタンスが完全に稼働しており、可用性に影響を与える可能性のあるアップデートを受けていないことを保証します。

kubectl wait --for=condition=Ready --timeout=10s keycloaks.k8s.keycloak.org/keycloak -n <NAMESPACE>
kubectl wait --for=condition=RollingUpdate=False --timeout=10s keycloaks.k8s.keycloak.org/keycloak -n <NAMESPACE>
このページについて