$ cat post/the-kernel-panicked-/-we-shipped-it-on-a-friday-night-/-the-cron-still-fires.md

the kernel panicked / we shipped it on a Friday night / the cron still fires


Title: Kubernetes vs. Marathon: The Battle for Our Container Orchestration


October 13, 2014 was a Friday like any other. Well, except it wasn’t. Today we faced the monumental task of choosing between two container orchestrators that were both promising and in use by several companies: Kubernetes from Google and Mesosphere’s Marathon.

The Setup

We had been running Docker containers for about six months now, but the need for a proper orchestration system was becoming clear. Our applications were getting bigger, and we needed a way to manage them efficiently across multiple hosts. Both Kubernetes and Marathon seemed like strong contenders. But here’s the thing: I wasn’t sure which one would fit our needs best.

The Research

I started by reading through everything I could find about both systems. Kubernetes was still relatively new, announced only in June 2014, but it had a lot of buzz around it. It promised to be more than just an orchestrator—it seemed to have a complete solution for managing containers at scale.

Marathon, on the other hand, already had production experience and support from Mesosphere (then called Cloudera). It had been battle-tested in some high-profile companies like Twitter. The decision was tough because both systems were impressive, but I knew we couldn’t afford to have a platform that didn’t work well with our existing tools.

Debugging and Testing

The real test came when we started setting up each system. Kubernetes required more setup than Marathon did, which meant more complexity in deployment and maintenance. However, the flexibility it offered was appealing. We could define custom resource types and write custom controllers, giving us a lot of control over how our applications ran.

Marathon, while simpler to set up, seemed more limited. It had some nice features like auto-scaling, but its configuration options were more rigid compared to Kubernetes. Plus, Marathon’s integration with Mesos meant that if we wanted any kind of resource management beyond basic container orchestration, it would be a bit tricky.

The Argument

During our team meeting, the conversation was lively. Some argued for the simplicity and stability of Marathon, while others pitched Kubernetes’ flexibility and potential. I found myself torn between wanting the best tool for the job versus sticking with something we understood well enough to deploy now.

In the end, the deciding factor came down to a combination of our specific needs and the learning curve. While Kubernetes was more complex, its ecosystem and community support were growing rapidly. We decided to go with Kubernetes because it aligned better with where we wanted to be in terms of infrastructure management and because Google’s backing gave us some peace of mind.

The Lesson

Looking back, choosing Kubernetes turned out to be a good decision for our team. It allowed us to build more robust and scalable applications as we continued to grow. However, the experience taught me an important lesson about evaluating tools not just based on their current state but also considering how they fit into our long-term strategy.

Closing Thoughts

As I reflect, I realize that while technology evolves quickly, the principles of choosing the right tool for the job still hold true. The path to success often involves making tough choices and being willing to adapt as you go. Kubernetes vs. Marathon was just one battle in a longer war of infrastructure evolution, but it made us stronger.

Stay tuned as we continue our journey with containers and orchestration!