限制

minikube 驱动

对于 Linux,可扩展的解决方案需要 kvm2 驱动程序(已测试 15 个 Keycloak 副本)。当添加超过 8 GB 的 RAM 时,可以实现更多实例。

目前,Linux 上的 Podman 驱动程序仅支持最多 5 个 Keycloak 实例,原因是打开文件数量的限制,这实际上是线程数量的限制。之后,容器将抱怨它们无法启动更多进程。

minikube 运行时

在更大的机器上测试 cri-o 运行时时,启动 Pod 并通过 Kubernetes API 和 Web 浏览器访问它们是不稳定的。Pod 的存活探针时不时失败,并且 Pod 重新启动。经过一些分析,原因仍然不清楚,可能与打开文件数量的限制有关。

minikube 持久存储

minikube 中的 PVC 将从本地文件系统挂载。因此,PVC 大小将不会被检查,并且一个服务可能会占用太多磁盘空间,以至于其他所有服务都无法使用。

Jaeger 和追踪采样

为每个追踪收集的数据量很大,可能导致 Jaeger Pod 快速出现内存不足的情况。为了尽量减少收集的数据量,OTEL_TRACES_SAMPLER_ARG 的值设置为 0.01,以便仅追踪百分之一的请求。追踪默认情况下是禁用的,可以在 Keycloak 的 Helm chart 的 values.yaml 文件中启用。

作为替代的追踪解决方案,曾考虑过 Tempo。虽然通过 OTEL 成功提交了追踪,并且按追踪 ID 搜索也能按预期工作,但是搜索追踪(目前是 beta 版本)不会返回某些追踪(例如删除用户)。因此,目前使用 Jaeger 追踪。

用于 JFR 记录的 Cryostat

Helm chart 的内容最初由 Cryostat operator 创建。在分析 2.0 版本中 operator 创建的资源时,没有发现支持添加 cryostat-deployment 所需环境变量的方法。因此,现在已将其提取并作为 Helm chart 放置在此处。

Cryostat 实例需要在与其连接的 JVM 相同的命名空间中运行。因此,它是 Keycloak 部署的一部分,而不是单独的 Helm chart。

创建的分析是常规分析,而不是异步分析。因此,该分析将受到安全点偏差问题的影响。有关详细信息,请参阅 Java async profiler

该项目是一个低开销的 Java 采样分析器,它不受安全点偏差问题的影响。它具有特定于 HotSpot 的 API,用于收集堆栈跟踪和跟踪内存分配。该分析器适用于 OpenJDK、Oracle JDK 和其他基于 HotSpot JVM 的 Java 运行时。

— Java 异步分析器

目前,在另有证明之前,不使用异步分析应该足够好。