curl -s https://keycloak:managementport/health
当在 Kubernetes 环境中运行 多站点部署 时,您应该自动化检查以查看一切是否按预期启动并运行。
此页面概述了可用于验证 Keycloak 多站点设置的 URL、Kubernetes 资源和健康检查端点。
主动监控策略旨在在问题影响用户之前检测并警报问题。此策略是构建高度弹性和高可用性 Keycloak 应用程序的关键。
跨各种架构组件(例如应用程序健康状况、负载均衡、缓存和整体系统状态)的健康检查对于以下方面至关重要:
验证所有站点和负载均衡器是否正常运行是确保系统即使在一个站点宕机时也能处理请求的关键。
检查 Infinispan 缓存的健康状况和分布情况,确保 Keycloak 可以通过高效地处理会话和其他临时数据来维持最佳性能。
通过持续监控 Kubernetes 环境中 Keycloak 及其依赖项的健康状况,系统可以快速识别并可能自动修复问题,从而减少停机时间。
如果您的操作系统上尚未安装 jq,请安装它。
通过其负载均衡器以及主站点和备份站点来验证 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 的站点 A 和站点 B 的运行状态。
curl -s https://keycloak_site_a_url/lb-check
curl -s https://keycloak_site_b_url/lb-check
检查外部 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 集群的分布健康状况,确保集群节点正确地分布数据。此步骤对于缓存层的可扩展性和容错能力至关重要。
您可以修改 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'
使用 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 部署的就绪状态和滚动更新条件,确保 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>