本文已发表一年多。较旧的文章可能包含过时内容。请检查页面信息自发布以来是否已不正确。

KubeInvaders - Kubernetes 游戏化混沌工程工具

几个月前,我发布了我的最新项目 KubeInvaders。我第一次与社区分享它是在一次 Openshift Commons Briefing 会议期间。KubeInvaders 是一款游戏化的混沌工程工具,适用于 Kubernetes 和 Openshift,它能以一种有趣的方式测试您的 Kubernetes 集群的弹性。

它就像太空侵略者,只不过外星人变成了 Pod。

在 Codemotion 米兰 2019 大会上我的演讲中,我开头说道:“当然,你可以用几行 Bash 代码实现它,但这很无聊。”

使用上面的代码,您可以在 Kubernetes 集群中随机杀死 Pod,但我认为用 KubeInvaders 的飞船来做会更有趣。

我已将代码发布到 https://github.com/lucky-sideburn/KubeInvaders,并且一个小社区正在逐渐壮大。有些人喜欢用它在大屏幕上杀死 Pod 进行演示。

如何安装 KubeInvaders

我定义了多种安装模式

  1. Helm Chart https://github.com/lucky-sideburn/KubeInvaders/tree/master/helm-charts/kubeinvaders

  2. 使用模板在 Openshift 上手动安装 https://github.com/lucky-sideburn/KubeInvaders#install-kubeinvaders-on-openshift

  3. 在 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

在 Codemotion 米兰 2019 大会上,我和我的同事们设置了一个游戏台来玩 KubeInvaders。人们必须与 Kubernetes 战斗才能赢得一件 T 恤。

如果您的 Pod 需要几秒钟才能启动,您可能会输。可以通过在 Kubernetes Deployment 中将这些参数设置为环境变量来设置游戏的复杂度

  • ALIENPROXIMITY — 减小此值以增加外星人之间的距离;
  • HITSLIMIT — 射击前等待的 CPU 时间(秒);
  • UPDATETIME — 更新 Pod 状态前等待的秒数(您也可以设置 0.x,例如:0.5);

结果是与机器对抗的游戏体验更具挑战性。

用例

为您的生产环境采用混沌工程策略非常有用,因为它是测试系统是否能支持意外破坏性事件的唯一方法。

KubeInvaders 是一款游戏 — 所以请不要太当真! — 但它展示了一些重要的用例

  • 测试 Kubernetes 集群对意外 Pod 删除的弹性
  • 收集 Pod 重启时间等指标
  • 调优 readiness 探针

下一步

我想继续添加一些很酷的功能并将其集成到 Kubernetes Dashboard 中,因为我计划将其转变为一个“游戏化的混沌工程和 Kubernetes 开发工具”,以帮助开发者在 Kubernetes 环境中与 Deployment 交互。例如

  • 指向外星人以获取 Pod 日志
  • 通过射击某些特定对象来部署 Helm charts
  • 读取 Deployment 中特定标签中存储的消息

欢迎随时为 https://github.com/lucky-sideburn/KubeInvaders 贡献代码,并通过关注 Twitter 上的 #kubeinvaders 新闻保持更新。