模拟 Kubernetes 中 Keycloak 的故障
如何在 Kubernetes 环境中自动化模拟 Keycloak Pods 的故障,以测试 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 中,并创建了单独的任务,以针对 Kubernetes 上 Keycloak 多站点设置中的不同组件运行 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。它使用 POD_LABEL
、DISRUPTION_COUNT
和 EXPECTED_POD_COUNT
的特定值调用 kraken-pod-scenarios
任务。
目前, |
局限性
-
目前,我们无法查看 Krkn 报告,该报告在 kraken Pod 内部生成,但由于其临时存储而被删除。这目前计划修复,并在 GitHub issue 中跟踪。