<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Cloud Native Architecture – India</title><link>https://architecture.cncf.io/tags/india/</link><description>Recent content in India on Cloud Native Architecture</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Mon, 08 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://architecture.cncf.io/tags/india/index.xml" rel="self" type="application/rss+xml"/><item><title>Architectures: From Afterthought to Practice: Flipkart’s Multi-Tenant Chaos Engineering Platform on LitmusChaos</title><link>https://architecture.cncf.io/architectures/flipkart-chaos-engineering/</link><pubDate>Mon, 08 Jun 2026 00:00:00 +0000</pubDate><guid>https://architecture.cncf.io/architectures/flipkart-chaos-engineering/</guid><description>
&lt;h2 id="relevant-cncf-projects">Relevant CNCF projects&lt;/h2>
&lt;div class="row row-cols-1 row-cols-md-3 mb-4">
&lt;div class="col mb-4">
&lt;div class="card h-100">
&lt;div class="card-header">
LitmusChaos
&lt;/div>
&lt;div class="card-body">
&lt;p class="card-text">
&lt;p>&lt;a href="https://www.cncf.io/projects/litmus/">&lt;img src="https://raw.githubusercontent.com/cncf/artwork/main/projects/litmus/icon/color/litmus-icon-color.svg" alt="kubernetes logo">&lt;/a>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Using since:&lt;/strong> 2023&lt;/li>
&lt;/ul>
&lt;p>Central chaos engineering platform. Provides Kubernetes-native chaos orchestration, a workflow controller, a probe framework, a drag-and-drop UI, and resilience scoring. Flipkart deploys a single centralized control plane (operator + workflow controller) and federates tenant access through subscribers — forming the foundation of the multi-tenant chaos platform.&lt;/p>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;div class="col mb-4">
&lt;div class="card h-100">
&lt;div class="card-header">
Kubernetes
&lt;/div>
&lt;div class="card-body">
&lt;p class="card-text">
&lt;p>&lt;a href="https://www.cncf.io/projects/kubernetes/">&lt;img src="https://raw.githubusercontent.com/cncf/artwork/main/projects/kubernetes/icon/color/kubernetes-icon-color.svg" alt="dapr logo">&lt;/a>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Using since:&lt;/strong> 2021&lt;/li>
&lt;/ul>
&lt;p>Runtime substrate for hundreds of Flipkart microservices and for the LitmusChaos control plane itself. Custom Resource Definitions (ChaosEngine, ChaosExperiment, ChaosResult) model chaos as Kubernetes objects. DaemonSets are used to provide a node-local, long-lived chaos injection surface for high-availability experiment execution.&lt;/p>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;div class="col mb-4">
&lt;div class="card h-100">
&lt;div class="card-header">
Argo Workflows
&lt;/div>
&lt;div class="card-body">
&lt;p class="card-text">
&lt;p>&lt;a href="https://www.cncf.io/projects/argo/">&lt;img src="https://raw.githubusercontent.com/cncf/artwork/main/projects/argo/icon/color/argo-icon-color.svg" alt="keda logo">&lt;/a>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Using since:&lt;/strong> 2023&lt;/li>
&lt;/ul>
&lt;p>Underlying workflow engine used by Litmus to model multi-step chaos experiments — sequencing pre-checks, fault injection, probes, and recovery validation as a DAG. Flipkart’s Script Runner fault plugs into this DAG to enable dynamic target selection and context chaining between steps.&lt;/p>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;div class="col mb-4">
&lt;div class="card h-100">
&lt;div class="card-header">
Prometheus
&lt;/div>
&lt;div class="card-body">
&lt;p class="card-text">
&lt;p>&lt;a href="https://www.cncf.io/projects/prometheus/">&lt;img src="https://raw.githubusercontent.com/cncf/artwork/main/projects/prometheus/icon/color/prometheus-icon-color.svg" alt="opentelemetry logo">&lt;/a>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Using since:&lt;/strong> 2021&lt;/li>
&lt;/ul>
&lt;p>Metrics backbone for both production workloads and chaos experiments. Chaos drills are validated against Prometheus-driven SLO and alert thresholds (CPU saturation, 5xx error rates, latency, queue depth). Litmus’s Prometheus probes assert hypotheses during fault injection.&lt;/p>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;div class="col mb-4">
&lt;div class="card h-100">
&lt;div class="card-header">
Helm
&lt;/div>
&lt;div class="card-body">
&lt;p class="card-text">
&lt;p>&lt;a href="https://www.cncf.io/projects/helm/">&lt;img src="https://raw.githubusercontent.com/cncf/artwork/main/projects/helm/icon/color/helm-icon-color.svg" alt="helm logo">&lt;/a>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Using since:&lt;/strong> 2022&lt;/li>
&lt;/ul>
&lt;p>Used to package and roll out the centralized Litmus control plane, tenant subscribers, the DaemonSet-based injection layer, and Flipkart’s custom fault images consistently across staging and production clusters.&lt;/p>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;div class="col mb-4">
&lt;div class="card h-100">
&lt;div class="card-header">
containerd
&lt;/div>
&lt;div class="card-body">
&lt;p class="card-text">
&lt;p>&lt;a href="https://www.cncf.io/projects/containerd/">&lt;img src="https://raw.githubusercontent.com/cncf/artwork/main/projects/containerd/icon/color/containerd-icon-color.svg" alt="helm logo">&lt;/a>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Using since:&lt;/strong> 2021&lt;/li>
&lt;/ul>
&lt;p>Container runtime on Flipkart’s Kubernetes nodes. The DaemonSet injection model relies on stable runtime primitives to execute parallel chaos sessions safely on a single node.&lt;/p>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;h2 id="other-projects">Other Projects&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:center">Project&lt;/th>
&lt;th style="text-align:center">Using Since&lt;/th>
&lt;th style="text-align:center">Notes&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:center">Grafana&lt;/td>
&lt;td style="text-align:center">2022&lt;/td>
&lt;td style="text-align:center">Dashboarding layer for chaos experiment telemetry. Flipkart reuses Litmus’s out-of-the-box Grafana exporters to surface experiment run history, resilience scores, and infrastructure-level signals to both Kubernetes and VM-team consumers — giving both audiences the same observability surface.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center">MongoDB&lt;/td>
&lt;td style="text-align:center">2023&lt;/td>
&lt;td style="text-align:center">Backing store for the Litmus control plane. Flipkart’s probe-uniqueness contribution required reworking a global MongoDB index into a project-scoped one to make probes truly multi-tenant.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center">Linux stress tooling on Debian&lt;/td>
&lt;td style="text-align:center">2023&lt;/td>
&lt;td style="text-align:center">Internal stress packages (CPU hog, memory hog, network hog, disk-IO) targeted at the Debian host OS of Flipkart’s VM fleet, invoked by the Hybrid VM Chaos extension when the workload doesn’t live in Kubernetes.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center">Internal Flipkart Cloud Platform APIs&lt;/td>
&lt;td style="text-align:center">2024&lt;/td>
&lt;td style="text-align:center">Lifecycle APIs (start, stop, restart) for Flipkart’s VM fleet. The Hybrid VM Chaos extension calls these APIs to deliver VM-power experiments in parity with the Kubernetes-native experience.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center">Internal Chaos Hub&lt;/td>
&lt;td style="text-align:center">2024&lt;/td>
&lt;td style="text-align:center">Private, Flipkart-internal catalog of pre-curated chaos experiment templates. Built so that tenants can publish, version, and consume reusable experiments across teams — the chaos-engineering analogue of an internal package registry.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="synopsis">Synopsis&lt;/h2>
&lt;p>Flipkart is one of India’s leading digital commerce companies, running hundreds of tightly coupled microservices across Kubernetes and VM workloads that must withstand the traffic surges of Big Billion Days and other festive sales. The Central Reliability Engineering team built a centralized chaos engineering platform on LitmusChaos to convert chaos engineering from an afterthought into a continuous practice.&lt;/p>
&lt;p>On top of upstream Litmus, Flipkart engineered four high-leverage customizations: (1) a hybrid multi-tenancy model that combines the operational simplicity of a cluster-wide install with the isolation of a namespace-wide install; (2) a DaemonSet-based high-availability layer for chaos injection that runs one persistent injector per node and supports parallel sessions; (3) a first-class “Script Runner” fault that allows dynamic target selection and context chaining across steps in an experiment; and (4) a hybrid VM chaos extension that reuses the Litmus experience for non-Kubernetes workloads via Flipkart’s internal cloud APIs and Debian-host stress tooling.&lt;/p>
&lt;p>The result is operational readiness validated through live chaos drills ahead of Big Billion Days, a measurable shift in engineering culture from “prevention” to “practice,” and a steady stream of upstream contributions back to the LitmusChaos project.&lt;/p>
&lt;h2 id="organization">Organization&lt;/h2>
&lt;p>Flipkart is one of India’s leading digital commerce companies, serving hundreds of millions of customers across an ecosystem that includes flagship apparel, electronics, grocery, and fintech offerings. Its flagship event, Big Billion Days, is the largest e-commerce sales event in India and drives massive concurrent traffic across a tightly integrated microservices estate. Other high-scale moments — the Independence Day sale and Diwali sale among them — generate similar surges throughout the year.&lt;/p>
&lt;p>Flipkart’s engineering organization runs an extensive Kubernetes-as-a-Service platform alongside a large VM fleet, with internal central platform teams providing service mesh, networking, and database offerings to hundreds of downstream application teams. Reliability at the scale of an Indian retail tentpole event is therefore not a product-team concern — it is a horizontal platform discipline.&lt;/p>
&lt;h2 id="teams">Teams&lt;/h2>
&lt;p>Multiple teams collaborate to build, operate, and consume the chaos platform:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Central Reliability Engineering&lt;/strong> — owns the chaos platform end-to-end: the centralized LitmusChaos control plane, tenant onboarding, the DaemonSet injection layer, the Script Runner fault, the hybrid VM chaos extension, the internal Chaos Hub, and upstream contributions back to Litmus.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Kubernetes-as-a-Service team&lt;/strong> — first tenant of the chaos platform; runs chaos drills against the Kubernetes control plane primitives consumed by every Flipkart workload.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Network Services and Service Mesh team&lt;/strong> — uses chaos to validate Layer-4/7 failure behavior, retry semantics, and circuit-breaker configurations across the mesh.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Central Database team&lt;/strong> — leverages the Script Runner fault to verify leader-election behavior in leader-follower database topologies during chaos drills.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Application teams&lt;/strong> — onboarded progressively after the central platform teams; consume curated experiments from the internal Chaos Hub.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>VM Infrastructure teams&lt;/strong> — use the hybrid VM chaos extension to obtain the same observability surface (Grafana, run history, resilience score) as Kubernetes-native consumers, despite running outside Kubernetes.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="architecture-overview--goals">Architecture overview &amp;amp; Goals&lt;/h2>
&lt;h3 id="goals">Goals&lt;/h3>
&lt;ol>
&lt;li>
&lt;p>&lt;strong>Make chaos engineering a continuous practice, not an afterthought.&lt;/strong> Move from runbooks-on-paper to regularly rehearsed failure scenarios that feed back into incident response.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Operate one chaos platform for the whole company, safely.&lt;/strong> Provide a centralized control plane that hundreds of tenants can use without each tenant carrying operational burden — and without any tenant being able to touch another tenant’s workloads.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Eliminate self-inflicted experiment failures.&lt;/strong> Remove brittleness from the chaos infrastructure itself — specifically, helper-pod scheduling failures that were masking real reliability signal.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Express realistic, real-world failure scenarios.&lt;/strong> Support dynamic target selection and context chaining inside experiments so a single chaos run can express “find the leader, kill it, watch a new leader get elected” as one declarative workflow.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Treat VM workloads as first-class citizens.&lt;/strong> Reuse the Litmus experience for workloads that don’t run on Kubernetes — same UI, same probes, same observability — instead of building a parallel tool.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Validate operational readiness for Big Billion Days.&lt;/strong> Convert chaos drills into a measurable, repeatable pre-event sign-off rather than a manual exercise.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Contribute upstream.&lt;/strong> Push fixes and architectural patterns back into LitmusChaos so the broader CNCF community benefits and Flipkart avoids long-term fork maintenance.&lt;/p>
&lt;/li>
&lt;/ol>
&lt;h3 id="architecture-overview">Architecture Overview&lt;/h3>
&lt;p>At a high level, the architecture consists of a centralised control plane that is setup on a Kubernetes namespace or cluster that helps in designing and coordinating the chaos experiments. The chaos experiments are designed, implemented and certified and finally placed in a ChaosHub, which then are used by various teams in the organization to run them on the target Kubernetes clusters. Chaos experiment results are pushed back into the control plane as resilience scores, which can be used to create resilience testing trends and resilience posture reports for various teams’ consumption.&lt;/p>
&lt;p>The platform is organized into four logical layers:&lt;/p>
&lt;p>&lt;img src="./images/top-level-diagram.png" alt="">&lt;/p>
&lt;p>The platform is organized into four logical layers:&lt;/p>
&lt;p>&lt;img src="./images/layers.png" alt="">&lt;/p>
&lt;p>&lt;strong>Control Plane Layer.&lt;/strong> A single, centralized LitmusChaos installation — the operator, workflow controller, MongoDB backing store, and Grafana dashboards — lives in a dedicated central namespace and is operated by Central Reliability Engineering. There is one control plane per cluster footprint (staging, production), not one per tenant.&lt;/p>
&lt;p>&lt;strong>Tenant Subscriber Layer or a chaos agent.&lt;/strong> For each tenant team, a dedicated subscriber is deployed in the central namespace. The subscriber is scoped at install time to the set of tenant-owned namespaces it is allowed to target. The subscriber is the only Litmus identity that can dispatch chaos into a tenant’s namespaces — giving namespace-grade isolation without forcing each tenant to operate its own Litmus install.&lt;/p>
&lt;p>&lt;strong>Injection Layer.&lt;/strong> Instead of spawning ephemeral helper pods on-demand per experiment, Flipkart runs a DaemonSet (one replica per node, using the litmus-go image) as a long-lived, highly privileged injection surface. Experiment pods now offload target information to the node-local DaemonSet pod, which executes the chaos in parallel shell sessions. This supports concurrent chaos injection on the same node and eliminates a class of failures where the previous on-demand helper pod couldn’t be scheduled in time.&lt;/p>
&lt;p>&lt;strong>Extension Layer.&lt;/strong> Two domain-specific extensions plug into the platform: the Script Runner fault (a user-defined container running a user-defined script, whose stdout feeds the target list of any subsequent fault in the experiment), and the Hybrid VM Chaos extension (which uses Flipkart’s internal cloud-platform APIs for VM power operations and internal Debian stress packages for resource-level chaos). An internal Chaos Hub layers on top, letting tenants publish reusable experiment templates.&lt;/p>
&lt;p>Tenants interact with the platform almost entirely through the Litmus UI. They author or pick a template from the internal Chaos Hub, attach probes (including SSH-based probes for the VM surface), and run the experiment against namespaces or VMs they own. Resilience scores, run history, and Grafana dashboards present a single observability surface regardless of whether the target is a Kubernetes workload or a VM.&lt;/p>
&lt;h4 id="key-design-principles">Key Design Principles&lt;/h4>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Centralized control plane, federated trust.&lt;/strong> One operator and one workflow controller for the whole organization; isolation is enforced at the subscriber boundary, not by running N copies of Litmus.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Persistent, node-local injection.&lt;/strong> Trade ephemeral safety for scheduling determinism by accepting a long-lived privileged DaemonSet — a deliberate trade-off made only where the operational win (no scheduling failures during a chaos drill) outweighs the cost (privileged residency).&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Context chaining over static targeting.&lt;/strong> Chaos experiments are workflows, not single faults; the output of one step (“who is the leader?”) feeds the inputs of the next (“kill that pod”).&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>One experience, two surfaces.&lt;/strong> Kubernetes and VM chaos must look, feel, and report the same to the user. The UI, probes, and observability layer are surface-agnostic; the differences are pushed down into the extension layer.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Practice, then expand.&lt;/strong> Start with central platform teams that already run shared infrastructure; only then expand to application teams. Staging is the primary chaos surface; production chaos is selective and gated.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Upstream where possible.&lt;/strong> Local patches create long-term maintenance burden. Bug fixes and reusable patterns go back to LitmusChaos.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="can-you-expand-on-why-you-are-using-those-projectsservices">Can you expand on why you are using those projects/services?&lt;/h2>
&lt;h3 id="why-litmuschaos">Why LitmusChaos&lt;/h3>
&lt;p>Before standardizing on Litmus, the team ran a detailed proof-of-concept across Chaos Monkey, Chaos Mesh, and LitmusChaos. Litmus won on four criteria that mattered for Flipkart’s context: it is Kubernetes-native end-to-end (aligning with the broader K8s-first direction), it ships a rich drag-and-drop UI that drives adoption beyond SREs, it is deeply extensible (custom faults were a non-negotiable requirement), and its resilience-probe model gave the team a path toward a measurable resiliency score per service.&lt;/p>
&lt;h3 id="from-single-tenant-to-hybrid-multi-tenancy">From single-tenant to hybrid multi-tenancy&lt;/h3>
&lt;p>The two install modes Litmus offers out of the box are cluster-wide (low operational burden, but no isolation) and namespace-wide (strong isolation, but every tenant has to operate its own Litmus install). At Flipkart’s scale — hundreds of teams across central platform and application areas — neither extreme works. The hybrid model takes the best of both: one centralized control plane (so no team has to run Litmus) plus a per-tenant subscriber pinned to that tenant’s namespaces (so isolation is enforced at the dispatch boundary). Litmus maintainer Karthik Satchitanand described this pattern as “a very nice model… a good balance” and has suggested it be documented upstream as a preferred mode of operation.&lt;/p>
&lt;h3 id="why-a-daemonset-instead-of-helper-pods">Why a DaemonSet instead of helper pods&lt;/h3>
&lt;p>Litmus’s default execution model spins up an on-demand helper pod per experiment. At scale, in busy staging clusters with active chaos drills, those helper pods can fail to schedule — producing a chaos infrastructure failure that masquerades as the chaos itself. The DaemonSet inverts this: one long-lived pod per node, with the chaos image already present, executes parallel chaos sessions invoked by the experiment pods. This makes injection deterministic at the cost of a persistent privileged surface — a trade-off Flipkart accepts in staging, where platform availability for chaos drills matters most.&lt;/p>
&lt;h3 id="why-a-script-runner-fault">Why a Script Runner fault&lt;/h3>
&lt;p>Real-world failure scenarios are rarely “delete pod X.” They are “find the current leader of a leader-follower system, delete it, and verify re-election.” Litmus’s built-in faults could not express dynamic target selection or pass state forward from one step to the next. The Script Runner is a first-class fault type that executes a user-defined container running a user-defined script; its stdout becomes the target list for any subsequent fault in the experiment, not just the immediate next one. The database team’s leader-election verification was the canonical use case that motivated this design.&lt;/p>
&lt;h3 id="why-a-hybrid-vm-chaos-extension">&lt;strong>Why a Hybrid VM Chaos extension&lt;/strong>&lt;/h3>
&lt;p>A meaningful slice of Flipkart’s estate runs on VMs, not Kubernetes. Building a parallel chaos tool for that surface would have fragmented the user experience and split the observability story. Instead, the team rebuilt the existing VM Power experiment against Flipkart’s internal cloud platform APIs (start/stop/restart) and added resource-level stress chaos (CPU hog, memory hog, network hog, disk-level) using internal Debian stress packages. Because the experiments are still driven by Litmus, VM teams get the same Grafana exporters, the same experiment run history, the same resilience score tab, and the same probe model (with custom SSH-based probes for pre- and post-experiment infrastructure checks) that Kubernetes users get.&lt;/p>
&lt;h2 id="what-has-worked-well">What has worked well?&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Hybrid multi-tenancy.&lt;/strong> The centralized-control-plane plus per-tenant-subscriber pattern absorbed onboarding for many tenants with effectively zero per-tenant infra burden, while still preventing cross-tenant blast radius. Recognized by upstream Litmus maintainers as a candidate preferred-mode pattern.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>DaemonSet injection.&lt;/strong> Eliminated experiment failures caused by helper-pod scheduling issues in staging. Chaos drills now fail because the system under test failed — not because the chaos infrastructure couldn’t schedule a pod.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Script Runner.&lt;/strong> Unlocked previously inexpressible scenarios such as leader-election verification. Context chaining turned chaos experiments into proper workflows rather than single-shot fault injections.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Unified VM and Kubernetes experience.&lt;/strong> Reusing Grafana exporters, run history, and the resilience score tab gave VM teams a first-class user experience and avoided fragmenting the chaos tooling landscape inside Flipkart.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Pre-event readiness validation.&lt;/strong> Chaos drills validated operational readiness ahead of the recent Big Billion Days sale, confirmed that CPU thresholds trigger the right alerts, that network failures surface correctly as 5xx spikes, and that weak links in deployment specs and alert configurations could be fixed before they became real incidents.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Cultural shift.&lt;/strong> Engineering teams moved from “prevention” (try not to fail) to “practice” (rehearse failure), and from “panic” to “procedure” during incident response. Chaos scenarios now form the foundation of incident runbooks.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Internal Chaos Hub.&lt;/strong> Tenant-published experiment templates accelerate reuse across teams — the chaos engineering analogue of an internal package registry.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="what-has-not-worked-well">What has not worked well?&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Privileged DaemonSet residency.&lt;/strong> Persistent, highly privileged pods on every node are an accepted trade-off in staging but constrain how aggressively the same pattern can be deployed in production. Reducing the blast radius of the injection layer remains an open problem.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Multi-tenant gaps in upstream Litmus.&lt;/strong> Several places in upstream Litmus assumed single-tenant scope — most visibly, probe-name uniqueness enforced globally instead of project-scoped (a MongoDB index issue). These needed upstream fixes before the multi-tenant model could behave correctly.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Terminology drift across the project.&lt;/strong> The renaming of “experiment” to “fault” in parts of Litmus left behind frontend/backend mismatches — e.g., experiment pod-block visibility — that required cleanup contributions.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Heterogeneous VM hosts.&lt;/strong> The stress chaos extension is currently scoped to Debian hosts; broadening to additional host OSes will mean factoring out the OS-specific layer.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Production chaos is still selective.&lt;/strong> Most chaos still runs in staging. Building enough confidence (and enough guardrails) to run the full chaos surface in production is an ongoing journey.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Custom image registry support.&lt;/strong> A long-standing (year-old) issue prevented the custom image registry setting from flowing through to the generated workflow YAML — a blocker for air-gapped and internal-registry deployments. Required a Flipkart upstream fix to resolve.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="what-sort-of-glue-have-you-had-to-develop">What sort of &amp;ldquo;glue&amp;rdquo; have you had to develop?&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Per-tenant subscriber onboarding pipeline.&lt;/strong> Tooling and a defined onboarding flow so that adding a new tenant means deploying a scoped subscriber, registering its namespaces, and attaching it to the central control plane — without any tenant operating its own Litmus install.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>DaemonSet injection runtime.&lt;/strong> Replaced the on-demand helper-pod model with a long-lived, node-local DaemonSet (using the litmus-go image) that accepts target information from experiment pods and executes parallel chaos sessions in independent shells.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Script Runner fault.&lt;/strong> New first-class fault type backed by a user-defined container image running a user-defined script, with stdout captured as structured context that any subsequent fault in the experiment can consume — not just the immediate next step.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Hybrid VM Chaos extension.&lt;/strong> A reimplementation of VM Power on top of Flipkart’s internal cloud APIs, plus a stress-chaos suite (CPU, memory, network, disk) built on internal Debian stress packages, plus custom SSH-based probes that mirror the Kubernetes probe experience for VM workloads.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Internal Chaos Hub publishing pipeline.&lt;/strong> A workflow that lets tenants publish reusable experiment templates to a private, Flipkart-internal catalog and pull them down into their own experiments.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Upstream fixes packaged as patches and PRs.&lt;/strong> Probe-name uniqueness (MongoDB index), probe-name reuse-after-deletion (filtration), experiment-update duplicate-name validation, UI consistency (experiment-completion icon, GCP/Azure fault logos), custom image registry, and pod-block visibility — each shipped back to the LitmusChaos project.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="how-did-the-architecture-evolve">How did the Architecture Evolve**&lt;/h2>
&lt;h3 id="journey">Journey&lt;/h3>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Phase 1 — Reactive runbooks.&lt;/strong> Failure modes existed only on paper. Runbooks were written but not practiced. Chaos engineering was an afterthought.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Phase 2 — Tool selection.&lt;/strong> Detailed PoC across Chaos Monkey, Chaos Mesh, and LitmusChaos. Litmus selected on Kubernetes-native design, drag-and-drop UI, extensibility, and resilience-probe model.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Phase 3 — Centralization.&lt;/strong> Stood up a single centralized Litmus control plane and built the per-tenant subscriber model to hit multi-tenancy without forcing tenants to run their own installs.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Phase 4 — Hardening the injection layer.&lt;/strong> Replaced ephemeral helper pods with the DaemonSet HA model after observing scheduling-induced experiment failures in staging.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Phase 5 — Expressing real scenarios.&lt;/strong> Added the Script Runner fault to unlock dynamic target selection and context chaining (e.g., leader-election verification for the database team).&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Phase 6 — Beyond Kubernetes.&lt;/strong> Built the Hybrid VM Chaos extension so VM teams get the same Litmus experience and observability surface as Kubernetes teams.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Phase 7 — Internalize and contribute back.&lt;/strong> Stood up the internal Chaos Hub for cross-team reuse and began the upstream contribution cadence back to LitmusChaos.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Phase 8 — Pre-event validation.&lt;/strong> Used the platform to validate operational readiness ahead of Big Billion Days; chaos drills now feed incident runbooks directly.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h3 id="key-lessons">Key Lessons&lt;/h3>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Hybrid is the right answer for multi-tenancy at scale.&lt;/strong> Neither cluster-wide nor namespace-wide install models fit a hundreds-of-teams organization on their own. A centralized control plane plus per-tenant subscribers is the productive middle.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Chaos infrastructure must be more reliable than the systems it tests.&lt;/strong> Every false negative — a chaos experiment that failed for infrastructure reasons — erodes trust in the practice. The DaemonSet HA model exists because that trust was real and worth defending.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Failure modes are workflows, not single faults.&lt;/strong> Dynamic target selection and context chaining (Script Runner) were not nice-to-have — they were the difference between toy chaos and useful chaos.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Treat non-Kubernetes workloads as first-class.&lt;/strong> Pushing VM chaos through the same Litmus experience and observability surface kept the cultural and tooling story unified.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Start with central platform teams.&lt;/strong> Teams that already run shared infrastructure (Kubernetes-as-a-Service, service mesh, central databases) had the runbooks and the motivation to be the first chaos consumers. Application teams followed.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Documentation and discipline.&lt;/strong> Clear hypotheses before the experiment, clear results after; this is what turns a one-off chaos run into reusable organizational knowledge.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Don’t roll chaos out everywhere at once.&lt;/strong> Pilot, learn, then expand. The internal Chaos Hub exists because the expansion phase needed reusable artifacts, not from-scratch experiments per team.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Recovery time matters as much as prevention.&lt;/strong> You can’t prevent every failure, but you can systematically improve how quickly you recover from it — and chaos drills are the most honest measurement of that.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Contribute upstream.&lt;/strong> Local patches become long-term debt; upstream contributions become permanent improvements for everyone, including Flipkart’s future self.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h3 id="whats-next-for-your-architecture">What&amp;rsquo;s next for your architecture?&lt;/h3>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Production chaos at scale.&lt;/strong> Expand selective production chaos runs into a more regular, more comprehensive practice — with new guardrails for the injection layer to reduce the privileged surface area.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Broader host OS support for VM chaos.&lt;/strong> Factor out the OS-specific stress layer so the hybrid VM chaos extension is not tied to Debian.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Deeper integration with incident runbooks.&lt;/strong> Close the loop so that every documented incident generates (or updates) a corresponding chaos scenario.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Resiliency score as a service-level metric.&lt;/strong> Promote the Litmus resilience score from “informational” to a tracked, dashboarded, team-level reliability KPI.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Continued upstream contribution.&lt;/strong> Push the hybrid multi-tenancy pattern, the DaemonSet HA injection model, and the Script Runner fault toward generalization in upstream LitmusChaos for the broader CNCF community.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Chaos in CI/CD.&lt;/strong> Move from out-of-band chaos drills to chaos gates that run as part of the deployment pipeline for high-tier services.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Observability and AIOps.&lt;/strong> Use the rich telemetry produced by repeated chaos runs to drive AI-assisted blast-radius prediction and pre-event readiness scoring for events like Big Billion Days.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="community-contributions">Community Contributions&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Contribution&lt;/th>
&lt;th style="text-align:left">Details&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Probe scoping fix&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Made probe-name uniqueness project-scoped instead of globally scoped (MongoDB index fix), enabling true multi-tenant use of probes in LitmusChaos.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Probe name reuse&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Filtration fix that allows probe names to be reused after deletion — removed a stale-record blocker for teams iterating on probe definitions.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Experiment update bug&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Fixed a duplicate-name validation that was incorrectly firing on tag/description-only edits when updating an experiment.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>UI consistency fixes&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Corrected the experiment-completion icon; fixed fault-card logos for GCP and Azure faults that were rendering the generic Litmus logo.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Custom image registry&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Fixed long-standing (year-old) issue so the custom image registry setting correctly reflects in the generated workflow YAML — essential for air-gapped and internal-registry deployments.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Pod-block visibility&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Fixed experiment pod-block visibility on the portal; resolved terminology drift between frontend and backend after the “experiment → fault” rename.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Architecture pattern&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Hybrid multi-tenant architecture (centralized operator + per-tenant subscriber) recognized by Litmus maintainers as a candidate preferred mode of operation to be documented upstream.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Conference contribution&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Case study presented at KubeCon India keynote (2026), sharing the multi-tenant chaos platform pattern with the broader CNCF community.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="voices-from-the-team">Voices from the team&lt;/h2>
&lt;p>&lt;em>“We moved from prevention to practice; instead of just trying to prevent issues, we actively practice handling them. And for incident response, we’ve gone from panic to procedure.”&lt;/em>&lt;/p>
&lt;p>— Khushi Tiwari, Software Developer, Central Reliability team&lt;/p>
&lt;p>&lt;em>“Implementing Litmus chaos at the kind of scale we operate at, and enabling the platform teams that directly impact hundreds of development teams — that’s been a very rewarding journey.”&lt;/em>&lt;/p>
&lt;p>— Aditya, Software Developer, Central Reliability team&lt;/p>
&lt;p>&lt;em>“The scenarios we test become the foundation for our incident runbooks, which makes the actual incident response much better.”&lt;/em>&lt;/p>
&lt;p>— Hashith, Site Reliability Engineer&lt;/p>
&lt;h2 id="discussion">Discussion&lt;/h2>
&lt;p>End user members may participate in the &lt;a href="https://github.com/cncf/tab/discussions/135">discussion thread&lt;/a> for this architecture.&lt;/p></description></item></channel></rss>