多站點部署的健康檢查

驗證多站點部署的健康狀態

當在 Kubernetes 環境中運行 多站點部署 時,您應該自動化檢查以確保一切都如預期般運作。

此頁面概述了可用於驗證 Keycloak 多站點設定的 URL、Kubernetes 資源和健康檢查端點。

概觀

主動監控策略旨在於問題影響使用者之前偵測並發出警報。此策略是實現高彈性和高可用性 Keycloak 應用程式的關鍵。

跨越各種架構元件(例如應用程式健康狀況、負載平衡、快取和整體系統狀態)的健康檢查對於以下方面至關重要:

確保高可用性

驗證所有站點和負載平衡器是否運作是確保系統即使在一個站點停機時也能處理請求的關鍵。

維持效能

檢查 Infinispan 快取的健康狀況和分佈,確保 Keycloak 可以透過有效處理會話和其他臨時資料來維持最佳效能。

運作彈性

透過持續監控 Keycloak 及其在 Kubernetes 環境中的相依性的健康狀況,系統可以快速識別並可能自動修復問題,從而減少停機時間。

先決條件

  1. 已安裝並設定 Kubectl CLI.

  2. 如果您的作業系統尚未安裝 jq,請安裝。

特定的健康檢查

Keycloak 負載平衡器和站點

通過其負載平衡器以及主要和備份站點來驗證 Keycloak 應用程式的健康狀況。這確保了 Keycloak 可以存取,並且負載平衡機制在不同的地理或網路位置之間正常運作。

此命令返回 Keycloak 應用程式與其配置資料庫的連線的健康狀態,從而確認資料庫連線的可靠性。此命令僅在管理埠上可用,而不能從外部 URL 取得。在 Kubernetes 設定中,會定期檢查子狀態 health/ready 以使 Pod 準備就緒。

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

此命令驗證負載平衡器的 lb-check 端點,並確保 Keycloak 應用程式叢集正在運行。

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

這些命令將返回多站點設定中 Keycloak 的 Site A 和 Site 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 的就緒狀態

特別檢查 Kubernetes 中 Keycloak 部署的就緒狀態和滾動更新條件,確保 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>
本頁內容