curl -s https://keycloak:managementport/health
在 Kubernetes 环境中运行 多站点部署 时,您应该自动执行检查以查看一切是否按预期运行。
此页面概述了可用于验证 Keycloak 多站点设置的 URL、Kubernetes 资源和健康检查端点。
主动监控策略旨在检测和提醒问题,以防它们影响用户。这种策略是高度弹性和高可用 Keycloak 应用程序的关键。
跨各种架构组件(例如应用程序健康状况、负载平衡、缓存和整体系统状态)的健康检查对于以下方面至关重要:
验证所有站点和负载均衡器是否正常运行是确保系统即使在一个站点出现故障时也能处理请求的关键。
检查 Infinispan 缓存的健康状况和分布可以确保 Keycloak 通过有效地处理会话和其他临时数据来保持最佳性能。
通过持续监控 Keycloak 及其在 Kubernetes 环境中的依赖项的健康状况,系统可以快速识别并可能自动修复问题,从而减少停机时间。
如果您的操作系统上尚未安装,请安装 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>