Urgent.News

What's breaking now, across thousands of outlets.

Tech

No official Storm Helm chart — how we put Apache Storm on EKS anyway

The Argo CD app for Storm had been red for two days, but the symptom that actually sent me down the rabbit hole was quieter than a crash loop: init containers on the Supervisor pods, stuck forever, printing the same line over and over — waiting for nimbus …:6627 . No Nimbus, no workers, no UI. Just a cluster that looked almost deployed and wasn't. We were trying to do something the organization…

The Argo CD application for Apache Storm had been in red status for two days. However, the real problem was more subtle: init containers on Supervisor pods were stuck, repeatedly printing the same line, waiting for the Nimbus component... There was no Nimbus, no workers, and no user interface. The team was attempting to deploy Apache Storm on Kubernetes, a first for the organization. They had never done something like this before, as Storm typically ran on EC2/ASG clusters outside of Kubernetes.

The organization was migrating streaming workloads to the same non-production EKS cluster they were setting up for other applications using Terraform, Karpenter, and Argo GitOps. Running everything together instead of having separate environments was a strategic decision. However, there was no official Helm chart for Apache Storm, and no comprehensive guide on migrating Storm to Kubernetes.

The community had some options, like G-Research's gresearch/storm chart with a Bitnami ZooKeeper subchart, but none of these could be considered a supported product.

The team decided to create a thin local chart, owning the templates and values, rather than relying on an opaque upstream dependency. This was both exciting and daunting, as it was the first time any team in the organization deployed Storm on Kubernetes with no reference architecture or runbooks. They had to evaluate every choice about storage, networking, image choice, and GitOps layout as experimental.

The rollout plan was broken down into phases. First, they focused on getting ZooKeeper and Nimbus running, proving the control plane and ensuring PVCs (Persistent Volume Claims) actually bound. Then, they moved on to Supervisor pods and the Storm UI as stateless Deployments. Next, they added a LogViewer sidecar to Supervisor pods, keeping it from being a separate Deployment.

Finally, they switched to private ECR images instead of Docker Hub, and used a shared Storm namespace in the non-production cluster, rather than creating a dedicated cluster for each environment.

The architecture looked promising on paper, with Component Kind, Storage, and PVC details for each part of the system. However, when the team encountered problems, they were unexpected and hard to trace. The first issue was storage: the chart requested a StorageClass named gp3, but this class did not exist. The cluster only had the legacy gp2 StorageClass, causing the ZooKeeper and Nimbus PVCs to sit in a Pending state.

Without bound volumes, these StatefulSet pods never scheduled, and Nimbus was unable to listen on port 6627, causing downstream processes to block. This led to the Argo app being marked as Degraded.

Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.

Read the original at dev.to →

More in Tech

𝗙𝗨𝗡𝗗𝗔𝗠𝗘𝗡𝗧𝗔𝗟𝗦 𝗦𝗧𝗜𝗟𝗟 𝗠𝗔𝗧𝗧𝗘𝗥 𝗜𝗡 𝗧𝗛𝗘 𝗔𝗜 𝗘𝗥𝗔

Recently, our team worked on a highly complex solution with very demanding performance requirements. After several brainstorming sessions, we discovered that the key wasn't a new framework or…

  • Engineers found solution in basics: bitsets, graphs, DFS
  • Brainstorming sessions led to fundamentally different approach
  • AI coding agents benefit from fundamentals, not just automation

How to Load the Omniston Widget with @ston-fi/omniston-widget-loader

Use the npm loader to fetch the current Omniston Widget bundle at runtime, connect TON Connect, and mount a complete swap interface inside your application.

  • Install @ston-fi/omniston-widget-loader package via npm, yarn, or pnpm.
  • Add container element with id "omniston-widget-container" to page HTML.
  • Import OmnistonWidgetLoader and call load() to instantiate OmnistonWidget.

More from Saturday 19 September →