本文发表于一年多前。旧文章可能包含过时内容。请检查页面中的信息自发布以来是否已变得不正确。
KubeInvaders - Kubernetes 的游戏化混沌工程工具
几个月前,我发布了我的最新项目 KubeInvaders。我第一次与社区分享它是在 Openshift Commons 简报会议上。KubeInvaders 是一款适用于 Kubernetes 和 Openshift 的游戏化混沌工程工具,它以一种有趣的方式帮助测试您的 Kubernetes 集群的弹性。
它就像《太空入侵者》,但外星人是 Pod。
在我2019年米兰Codemotion的演讲中,我一开始就说:“当然,你可以用几行 Bash 代码来实现,但这很无聊。”
使用上述代码可以在 Kubernetes 集群中杀死随机的 Pod,但我认为用 KubeInvaders 的飞船来做会更有趣。
我已将代码发布到 https://github.com/lucky-sideburn/KubeInvaders,并且有一个小社区正在逐渐壮大。有些人喜欢用它在大屏幕上演示杀死 Pod。
如何安装 KubeInvaders
我定义了多种安装模式
Helm Chart https://github.com/lucky-sideburn/KubeInvaders/tree/master/helm-charts/kubeinvaders
使用模板手动安装 Openshift https://github.com/lucky-sideburn/KubeInvaders#install-kubeinvaders-on-openshift
手动安装 Kubernetes https://github.com/lucky-sideburn/KubeInvaders#install-kubeinvaders-on-kubernetes
当然,首选方式是使用 Helm Chart
# Please set target_namespace to set your target namespace!
helm install --set-string target_namespace="namespace1,namespace2" \
--name kubeinvaders --namespace kubeinvaders ./helm-charts/kubeinvaders
如何使用 KubeInvaders
一旦安装到您的集群中,您就可以使用以下功能:
- 键 'a' — 切换到自动驾驶
- 键 'm' — 切换到手动驾驶
- 键 'i' — 显示 Pod 名称。将飞船移向一个外星人
- 键 'h' — 打印帮助信息
- 键 'n' — 在不同命名空间之间跳转(我最喜欢的功能!)
调整 KubeInvaders
在2019年米兰Codemotion大会上,我和我的同事们设立了一个带游戏站的展位,供大家玩KubeInvaders。人们需要与Kubernetes战斗才能赢得一件T恤。
如果您的 Pod 需要几秒钟才能启动,您可能会输。可以通过在 Kubernetes 部署中设置以下环境变量来调整游戏的复杂性:
- ALIENPROXIMITY — 减小此值以增加外星人之间的距离;
- HITSLIMIT — 射击前等待的 CPU 时间(秒);
- UPDATETIME — 更新 Pod 状态前等待的秒数(您也可以设置 0.x,例如 0.5);
结果是与机器对抗的游戏体验更加困难。
使用场景
为生产环境采用混沌工程策略非常有用,因为这是测试系统是否支持意外破坏性事件的唯一方法。
KubeInvaders 是一款游戏——所以请不要太认真!——但它展示了一些重要的用例:
- 测试 Kubernetes 集群在意外 Pod 删除下的弹性
- 收集 Pod 重启时间等指标
- 调整就绪探针
后续步骤
我希望继续添加一些很酷的功能并将其集成到 Kubernetes Dashboard 中,因为我正计划将其转变为“Kubernetes 游戏化混沌工程和开发工具”,以帮助开发人员与 Kubernetes 环境中的部署进行交互。例如:
- 指向外星人以获取 Pod 日志
- 通过射击特定对象来部署 Helm Chart
- 读取存储在部署中特定标签内的消息
欢迎为 https://github.com/lucky-sideburn/KubeInvaders 贡献代码,并通过 Twitter 关注 #kubeinvaders 新闻以保持更新。