{"id":13375085,"url":"https://github.com/lucky-sideburn/kubeinvaders","last_synced_at":"2026-03-16T09:06:44.492Z","repository":{"id":41344824,"uuid":"178379053","full_name":"lucky-sideburn/kubeinvaders","owner":"lucky-sideburn","description":"Gamified Chaos Engineering Tool for Kubernetes","archived":false,"fork":false,"pushed_at":"2025-06-26T07:38:40.000Z","size":65052,"stargazers_count":1052,"open_issues_count":0,"forks_count":135,"subscribers_count":12,"default_branch":"master","last_synced_at":"2025-06-26T08:37:38.719Z","etag":null,"topics":["aliens","chaos","chaos-engineering","game","hacktoberfest","kube-linter","kubeinvaders","kubeinvaders-container","kubernetes","openshift","pods","workstation"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lucky-sideburn.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-03-29T09:53:08.000Z","updated_at":"2025-06-26T07:38:43.000Z","dependencies_parsed_at":"2023-11-12T10:25:08.587Z","dependency_job_id":"698dfffd-bdd9-47e9-bd60-a246b8057c75","html_url":"https://github.com/lucky-sideburn/kubeinvaders","commit_stats":null,"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/lucky-sideburn/kubeinvaders","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucky-sideburn%2Fkubeinvaders","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucky-sideburn%2Fkubeinvaders/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucky-sideburn%2Fkubeinvaders/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucky-sideburn%2Fkubeinvaders/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lucky-sideburn","download_url":"https://codeload.github.com/lucky-sideburn/kubeinvaders/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucky-sideburn%2Fkubeinvaders/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28441031,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-15T00:55:22.719Z","status":"ssl_error","status_checked_at":"2026-01-15T00:55:20.945Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aliens","chaos","chaos-engineering","game","hacktoberfest","kube-linter","kubeinvaders","kubeinvaders-container","kubernetes","openshift","pods","workstation"],"created_at":"2024-07-30T05:01:28.556Z","updated_at":"2026-03-16T09:06:44.483Z","avatar_url":"https://github.com/lucky-sideburn.png","language":"JavaScript","funding_links":[],"categories":["JavaScript","kubernetes"],"sub_categories":[],"readme":"# kubeinvaders :space_invader: aka k-inv :joystick:\n\n**Gamified Chaos Engineering and Educational Tool for Kubernetes**\n\n\u003cimg src=\"./doc_images/1750875811732.jpg\" alt=\"Alt Text\" style=\"width:50%;\"\u003e\n\nThis project, recommended by the CNCF (https://github.com/cncf/sandbox/issues/124), has a strong following and significant educational value. It's a chaos engineering tool, but it's also recommended for studying Kubernetes and resilience topics.\n\nIt is part of the Cloud Native Computing Foundation's (CNCF) landscape in the Observability and Analysis - Chaos Engineering section (https://landscape.cncf.io/).\n\nSome companies use it for marketing at tech conferences in DevOps \u0026 SRE. For example at [𝗗𝗲𝗰𝗼𝗺𝗽𝗶𝗹𝗲𝗗 𝟮𝟬𝟮𝟱](https://www.linkedin.com/posts/cloud-%26-heat-technologies-gmbh_kubeinvaders-onpremise-managedkubernetes-activity-7293538807906258946-YtKV?utm_source=share\u0026utm_medium=member_desktop\u0026rcm=ACoAAAkOMNYBK7j_raLIIJBfs2RBA94_sK4Yeyg)\n\nThe teams at Platform Engineering (https://platformengineering.it/) and GDT - Garanti Del Talento ([https://www.garantideltalento.it/](https://www.garantideltalento.it)) back this project. They provide enterprise-grade features and SRE experts to help customers verify the resilience of their Kubernetes infrastructure.\n\nHere are the slides (https://www.slideshare.net/EugenioMarzo/kubeinvaders-chaos-engineering-practices-for-kubernetes1pdf) from the Chaos Engineering speech I prepared for FOSDEM 2023. Unfortunately, I couldn't be present at my talk, but I still wanted to share them with the community.\"\n\n# Table of Contents\n\n1. [Description](#Description)\n3. [Usage](#Usage)\n4. [URL Monitoring During Chaos Session](#URL-Monitoring-During-Chaos-Session)\n5. [Persistence](#Persistence)\n6. [Generic Troubleshooting \u0026 Known Problems](#Generic-Troubleshooting-And-Known-Problems)\n7. [Troubleshooting Unknown Namespace](#Troubleshooting-Unknown-Namespace)\n8. [Metrics](#Metrics)\n9. [Community](#Community)\n10. [Community blogs and videos](#Community-blogs-and-videos)\n11. [License](#License)\n\n## Description\n\nInspired by the classic Space Invaders game, Kubeinvaders offers a playful and engaging way to learn about Kubernetes resilience by stressing a cluster and observing its behavior under pressure. This open-source project, built without relying on any external frameworks, provides a fun and educational experience for developers to explore the limits and strengths of their Kubernetes deployments\n\n## Installation-default\n\n**Helm installation is currently not supported.**\n\nThe easiest way to run KubeInvaders is directly with Podman or Docker.\n\nRun with Podman:\n\n```bash\npodman run -p 8080:8080 docker.io/luckysideburn/kubeinvaders:latest\n```\n\nRun with Docker:\n\n```bash\ndocker run --rm -p 8080:8080 docker.io/luckysideburn/kubeinvaders:latest\n```\n\nThen open:\n\n```bash\nhttp://localhost:8080\n```\n\nIf you want to run KubeInvaders against your own Kubernetes cluster, create the required RBAC components (assumes k8s v1.24+):\n\nCreate the required components (assumes k8s v1.24+):\n\n```bash\ncat \u003c\u003c 'EOF' | kubectl apply -f -\napiVersion: v1\nkind: Namespace\nmetadata:\n  name: kubeinvaders\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n  name: kinv-cr\nrules:\n  - apiGroups:\n      - \"\"\n    resources:\n      - pods\n      - pods/log\n    verbs:\n      - delete\n  - apiGroups:\n      - batch\n      - extensions\n    resources:\n      - jobs\n    verbs:\n      - get\n      - list\n      - watch\n      - create\n      - update\n      - patch\n      - delete\n  - apiGroups:\n      - \"*\"\n    resources:\n      - \"*\"\n    verbs:\n      - get\n      - watch\n      - list\n---\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: kinv-sa\n  namespace: kubeinvaders\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRoleBinding\nmetadata:\n  name: kinv-crb\nroleRef:\n  apiGroup: rbac.authorization.k8s.io\n  kind: ClusterRole\n  name: kinv-cr\nsubjects:\n  - kind: ServiceAccount\n    name: kinv-sa\n    namespace: kubeinvaders\n---\napiVersion: v1\nkind: Secret\ntype: kubernetes.io/service-account-token\nmetadata:\n  name: kinv-sa-token\n  namespace: kubeinvaders\n  annotations:\n    kubernetes.io/service-account.name: kinv-sa\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n  namespace: default\n  name: kubevirt-vm-restart-role\nrules:\n- apiGroups: [\"subresources.kubevirt.io\"]\n  resources: [\"virtualmachines/restart\"]\n  verbs: [\"update\"]\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRoleBinding\nmetadata:\n  name: kubevirt-vm-restart-binding\n  namespace: default\nsubjects:\n- kind: ServiceAccount\n  name: kubeinvaders\n  namespace: kubeinvaders\nroleRef:\n  kind: ClusterRole\n  name: kubevirt-vm-restart-role\n  apiGroup: rbac.authorization.k8s.io\nEOF\n```\n\nExtract the token:\n\n```bash\nTOKEN=$(k get secret -n kubeinvaders -o go-template='{{.data.token | base64decode}}' kinv-sa-token)\n```\n\nImportant: use a valid Kubernetes token. If the token is missing, invalid, or expired, KubeInvaders cannot call the Kubernetes API and game actions will fail.\n\nThe example above shows how to extract the token from `kinv-sa-token`. If you use short-lived tokens, generate a new one when needed:\n\n```bash\nkubectl create token kinv-sa -n kubeinvaders --duration=8h\n```\n\nCreate two namespaces:\n\n```bash\nkubectl create namespace namespace1\nkubectl create namespace namespace2\n```\n\n## Usage\n\n### Start The Chaos Experiment\n\nPress the \"Start\" button to initiate the automatic pilot (the button changes to \"Stop\" to disable this feature).\n\n### Enable Shuffle :joystick:\n\nPress the \"Enable Shuffle\" button to randomly rearrange the positions of pods or K8s nodes (the button changes to \"Disable Shuffle\" to deactivate this feature).\n\n### Enable Auto Jump Between Namespace :joystick:\n\nPress the \"Auto NS Switch\" button to randomly switch between namespaces (the button changes to \"Disable Auto NS Switch\" to deactivate this feature).\n\n### Show / Hide Pods Name :joystick:\n\nPress the \"Hide Pods Name\" button to conceal the names of the pods beneath the aliens (the button changes to \"Show Pods Name\" to deactivate this feature).\n\n### Information about Current Status and Events :joystick:\n\nAs described below, on the game screen near the spaceship, there are details about the current cluster, namespace, and some configurations.\n\n![Alt Text](./doc_images/game-info.png)\n\nUnder the + and - buttons, a bar appears with the latest game events.\n\n![Alt Text](./doc_images/game-events.png)\n\n### Show Special Keys :joystick:\n\nPress 'h' or select 'Show Special Keys' from the menu.\n\n### Zoom In / Out :joystick:\n\nPress the + or - buttons to increase or decrease the game screen.\n\n### Chaos Containers for Master and Worker Nodes\n\n- Select \"Show Current Chaos Container for Nodes\" from the menu to see which container starts when you attack a worker node (not an alien, they are pods).\n\n- Select \"Set Custom Chaos Container for Nodes\" from the menu to use your preferred image or configuration against nodes.\n\n# URL Monitoring During Chaos Session\n\nDuring a chaos engineering session, you can monitor the behavior of an HTTP call exposed by an Ingress.\n\nUse the flag \"Add HTTP check \u0026 Chaos Report\" and add the URL to monitor\n![Alt Text](./doc_images/url_monitor.png)\n\nFollow real time charts during the experiment\n\n![Alt Text](./doc_images/http_stats.png)\n\n\n## Persistence\n\nK-inv uses Redis to save and manage data. Redis is configured with \"appendonly.\"\n\nThe legacy Helm chart does not support PersistentVolumes.\n\n## Generic Troubleshooting and Known Problems\n- If you don't see aliens, please follow these steps: ![Alt Text](https://github.com/lucky-sideburn/kubeinvaders/issues/100#event-18433067619) \n- It seems that KubeInvaders does not work with EKS due to problems with ServiceAccount.\n- Currently, the installation of KubeInvaders into a namespace that is not named \"kubeinvaders\" is not supported.\n- I have only tested KubeInvaders with a Kubernetes cluster installed through KubeSpray.\n- If you don't see aliens, please follow these steps:\n  1.  Open a terminal and run \"kubectl logs \u003cpod_of_kubeinvader\u003e -n kubeinvaders -f\"\n  2.  Execute the following command from another terminal: `curl \"https://\u003cyour_kubeinvaders_url\u003e/kube/pods?action=list\u0026namespace=namespace1\" -k`\n  3.  Open an issue with attached logs.\n- If you use route_host insted of ingress, please specify also the port like route_host: \"kubeinvaders.example.com:8080\". The port must be the same of the NodePort service\n\n## Troubleshooting Unknown Namespace\n\n- Check if the namespaces configured in the UI (for example: namespace1,namespace2) exist and contain pods.\n- Check your browser's developer console for any failed HTTP requests (send them to luckysideburn[at]gmail[dot]com or open an issue on this repo).\n- Try using latest_debug and send logs to luckysideburn[at]gmail[dot]com or open an issue on this repo.\n\n## Prometheus Metrics\n\nKubeInvaders exposes metrics for Prometheus through the standard endpoint /metrics.\n\nHere is an example of Prometheus configuration:\n\n```bash\nscrape_configs:\n- job_name: kubeinvaders\n  static_configs:\n  - targets:\n    - kubeinvaders.kubeinvaders.svc.cluster.local:8080\n```\n\nExample of metrics:\n\n| Metric                                                     | Description                                                  |\n| ---------------------------------------------------------- | ------------------------------------------------------------ |\n| chaos_jobs_node_count{node=workernode01}                   | Total number of chaos jobs executed per node                 |\n| chaos_node_jobs_total                                      | Total number of chaos jobs executed against all worker nodes |\n| deleted_pods_total 16                                      | Total number of deleted pods                                 |\n| deleted_namespace_pods_count{namespace=myawesomenamespace} | Total number of deleted pods per namespace                   |\n\n![Download Grafana dashboard](./confs/grafana/KubeInvadersDashboard.json)\n\n![Alt Text](./doc_images/grafana1.png)\n\n![Alt Text](./doc_images/grafana2.png)\n\n## Community\n\nPlease reach out for news, bugs, feature requests, and other issues via:\n\n- On Twitter: [@kubeinvaders](https://twitter.com/kubeinvaders) \u0026 [@luckysideburn](https://twitter.com/luckysideburn)\n- New features are published on YouTube too in [this channel](https://www.youtube.com/channel/UCQ5BQ8R2fDL_WkNAllYRrpQ)\n\n## Community blogs and videos\n![Alt Text](./doc_images/1741171163503.jpg)\n\n- [The Kubernetes ecosystem is a candy store](https://opensource.googleblog.com/2024/06/the-kubernetes-ecosystem-is-candy-store.html)\n- [ AdaCon Norway Live Stream ](https://www.youtube.com/watch?v=rt_eM_KRfK4)\n- [ LILiS - Linux Day 2023 Benevento ](https://www.youtube.com/watch?v=1tHkEfbGjgE)\n- Kubernetes.io blog: [KubeInvaders - Gamified Chaos Engineering Tool for Kubernetes](https://kubernetes.io/blog/2020/01/22/kubeinvaders-gamified-chaos-engineering-tool-for-kubernetes/)\n- acloudguru: [cncf-state-of-the-union](https://acloudguru.com/videos/kubernetes-this-month/cncf-state-of-the-union)\n- DevNation RedHat Developer: [Twitter](https://twitter.com/sebi2706/status/1316681264179613707)\n- Flant: [Open Source solutions for chaos engineering in Kubernetes](https://blog.flant.com/chaos-engineering-in-kubernetes-open-source-tools/)\n- Reeinvent: [KubeInvaders - gamified chaos engineering](https://www.reeinvent.com/blog/kubeinvaders)\n- Adrian Goins: [K8s Chaos Engineering with KubeInvaders](https://www.youtube.com/watch?v=bxT-eJCkqP8)\n- dbafromthecold: [Chaos engineering for SQL Server running on AKS using KubeInvaders](https://dbafromthecold.com/2019/07/03/chaos-engineering-for-sql-server-running-on-aks-using-kubeinvaders/)\n- Pklinker: [Gamification of Kubernetes Chaos Testing](https://pklinker.medium.com/gamification-of-kubernetes-chaos-testing-bd2f7a7b6037)\n- Openshift Commons Briefings: [OpenShift Commons Briefing KubeInvaders: Chaos Engineering Tool for Kubernetes](https://www.youtube.com/watch?v=3OOXOCTAYF0\u0026t=4s)\n- GitHub: [awesome-kubernetes repo](https://github.com/ramitsurana/awesome-kubernetes)\n- William Lam: [Interesting Kubernetes application demos](https://williamlam.com/2020/06/interesting-kubernetes-application-demos.html)\n- The Chief I/O: [5 Fun Ways to Use Kubernetes ](https://thechief.io/c/editorial/5-fun-ways-use-kubernetes/?utm_source=twitter\u0026utm_medium=social\u0026utm_campaign=thechiefio\u0026utm_content=articlesfromthechiefio)\n- LuCkySideburn: [Talk @ Codemotion](https://www.slideshare.net/EugenioMarzo/kubeinvaders-chaos-engineering-tool-for-kubernetes-and-openshift)\n- Chaos Carnival: [Chaos Engineering is fun!](https://www.youtube.com/watch?v=10tHPl67A9I\u0026t=3s)\n- Kubeinvaders (old version) + OpenShift 4 Demo: [YouTube_Video](https://www.youtube.com/watch?v=kXm2uU5vlp4)\n- KubeInvaders (old version) Vs Openshift 4.1: [YouTube_Video](https://www.youtube.com/watch?v=7R9ftgB-JYU)\n- Chaos Engineering for SQL Server | Andrew Pruski | Conf42: Chaos Engineering: [YouTube_Video](https://www.youtube.com/watch?v=HCy3sjMRvlI)\n- nicholaschangblog: [Introducing Azure Chaos Studio](https://nicholaschangblog.com/azure/introduction-to-azure-choas-studio/)\n- bugbug: [Chaos Testing: Everything You Need To Know](https://bugbug.io/blog/software-testing/chaos-testing-guide/)\n- Kinetikon: [Chaos Engineering: 5 strumenti open source](https://www.kinetikon.com/chaos-engineering-strumenti-open-source/)\n\n## License\n\nKubeInvaders is licensed under the Apache License, Version 2.0. See [LICENSE](./LICENSE) for the full license text.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flucky-sideburn%2Fkubeinvaders","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flucky-sideburn%2Fkubeinvaders","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flucky-sideburn%2Fkubeinvaders/lists"}