模拟 Kubernetes 中 Keycloak 的故障
如何在 Kubernetes 环境中自动化模拟 Keycloak Pod 故障,以测试 Keycloak 在故障后的恢复能力。
为什么进行故障测试
在 混沌测试工具 krkn 的介绍 中,有一篇关于为什么我们需要混沌测试工具的优秀文章。
使用 kc-chaos.sh
脚本运行故障测试
准备工作
-
解压缩
keycloak-benchmark-${version}.[zip|tar.gz]
文件 -
确保您可以从运行故障测试的位置访问 Kubernetes 集群,并运行诸如
kubectl get pods -n keycloak-keycloak
之类的命令
模拟负载
使用 从 CLI 运行基准测试 指南,模拟针对特定 Kubernetes 环境的负载。
使用 Krkn 混沌测试框架运行故障测试
我们集成了混沌测试框架 krkn 作为 Taskfile Chaos.yaml 的一部分,并创建了单独的任务以对 Keycloak 在 Kubernetes 上的多站点设置内的不同组件运行 pod-scenarios
测试。它侧重于模拟 Keycloak 和 Infinispan 应用程序的 Pod 故障场景。
准备工作
-
此 Taskfile 需要在系统上安装并配置 Podman/Docker。
-
ROSA 集群的 Kubernetes 配置文件必须在指定的
ISPN_DIR
目录中可用。 -
在运行任务之前,确保设置了必要的环境变量。
-
您可以通过覆盖变量的默认值来自定义任务的行为。
kraken-pod-scenarios
这是一个内部任务,它提供运行 Kraken Pod 故障场景的核心功能。它使用来自 krkn-chaos/krkn-hub 存储库的 pod-scenarios 镜像。该任务需要以下变量
ROSA_CLUSTER_NAME
-
ROSA 集群的名称
POD_LABEL
-
用于识别目标 Pod 的标签选择器
EXPECTED_POD_COUNT
-
中断后预期的 Pod 数量
ISPN_DIR
-
包含 Infinispan 配置的目录
该任务为变量(如 DEFAULT_NAMESPACE
、DISRUPTION_COUNT
、WAIT_DURATION
和 ITERATIONS
)设置了一些默认值。它还具有一个前提条件,以确保 Kubernetes 配置文件的存在。
kill-gossip-router
此任务会杀死 Infinispan 集群中的 JGroups Gossip Router Pod。它调用 kraken-pod-scenarios
任务,并为 POD_LABEL
、DISRUPTION_COUNT
和 EXPECTED_POD_COUNT
提供特定值。
目前, |
局限性
-
目前,我们无法查看在 kraken Pod 内生成的 Krkn 报告,但该报告会被删除,因为它属于临时存储。目前计划修复此问题,并在 GitHub 问题 中进行跟踪。