August 23rd, 2024

Show HN: Kardinal – Building light-weight Kubernetes dev ephemeral environments

Kardinal is an open-source framework that consolidates pre-production Kubernetes clusters, enabling isolated development workflows and simplifying environment management with single-command setups and integration with tracing systems.

Read original articleLink Icon
FrustrationInterestSkepticism
Show HN: Kardinal – Building light-weight Kubernetes dev ephemeral environments

Kardinal is an open-source multitenancy framework designed to optimize Kubernetes development environments by allowing users to consolidate pre-production clusters into a single, lightweight cluster. This approach minimizes resource duplication and enables the isolation of development, testing, and staging workflows within one environment. Users can create logical environments that separate traffic and data access, facilitating a more efficient development process. Kardinal simplifies the setup and teardown of these environments, requiring only a single command to spin up a development flow. It also integrates seamlessly with existing distributed tracing systems and automates the configuration of service meshes for traffic routing. The framework aims to enhance confidence in feature testing by providing isolated traffic flows and state management through a service sidecar. Interested users can request a personalized demo to explore Kardinal's capabilities further.

- Kardinal consolidates multiple pre-production clusters into a single Kubernetes environment.

- It allows for the isolation of development, testing, and staging workflows.

- Users can create isolated environments with a single command.

- The framework integrates with existing distributed tracing and automates service mesh configuration.

- Personalized demos are available for interested users.

AI: What people are saying
The comments on the Kardinal article reflect a mix of technical insights, concerns, and comparisons with other tools in the Kubernetes ecosystem.
  • Several users express concerns about the reliance on Istio, with some preferring alternatives like Cilium or questioning the necessity of a service mesh.
  • There are discussions about the challenges of implementing 12-factor applications and the importance of proper labeling and version tracking in Kubernetes environments.
  • Some commenters highlight the potential for Kardinal to simplify development workflows and reduce resource waste compared to traditional methods.
  • Users are curious about how Kardinal compares to other tools like Tilt and vcluster, seeking clarity on its unique value proposition.
  • Overall, there is enthusiasm for Kardinal's approach to multi-tenancy and environment management, with suggestions for emphasizing these benefits further.
Link Icon 13 comments
By @clvx - 5 months
Not gonna lie. I designed a system that looks exactly like this. However, the plugin system was an operator instead of annotating a service which is kinda cleaner but it still felt dirty. A better approach is having a service registry to track the versions, values and clusters where this has been pushed but that means you needed a different API or extend the k8s API and deal with the whole auth/authz system.

I think the biggest hurdle to implement a solution like this is your application MUST be a 12 factor app which sadly is not the case from what I've seen. Many devs hardcode values when shipping their code and containers which make it really difficult to add nodes to a DAG. Had this change, SDLC testing would be waaay easier.

In the same space, labeling of all services is a thing. As you are annotating it can be tracked but if you had different gateways or destination routes or other things that need to be tweaked at the mesh level, it could be daunting to track it. In my case, I ensure the whole mesh representation of a version could be tracked by a label so if you had a app=vote1,version=release-4,feature=shiny you could track the shiny components across the whole cluster.

Another hurdle is you are tied to a service mesh implementation. Istio is ok but it can be a beast. It also constraints your org to implement other networking alternatives which is something we wanted to explore.

I do like the project uses Nix =).

By @marvin-hansen - 5 months
Man this brilliant and goes straight to test it with my development workflow. Namespace isolation was always PITA,but full isolation would require a dedicated clusters so having a best of both solution really changes the game for lean and cost effective continues delivery.

As for value prop, maybe emphasize multi tenancy a bit more as this has the most cost saving potential at scale.

By @pastage - 5 months
Reading the docs, I consistently get blank page with an error after less than 30s: "Application error: a client-side exception" it feels strange that a text document needs to be an Application. I feel so old.
By @shane_kerns - 5 months
How is this different from vcluster? In fact vcluster has no dependency on Istio which I think is a huge detriment to kardinal. We use cilium so the istio requirement becomes a non starter for us.
By @juansebastianl - 5 months
I'm kind of new to the k8 world, can I ask how this compares to the approach taken by Tilt?
By @aliasxneo - 5 months
Looks great. Unfortunately, I have no desire to manage Istio in my clusters. Would be interested one alternative methods are available.
By @slillibri - 4 months
This looks interesting, but is there a reason the kardinal-cli deploys kardinal-manager into the default namespace rather than taking a --namespace argument (for example)? Personally I never run anything in the default namespace but I am probably an outlier.
By @p-o - 5 months
Congratulations on shipping! I like how opinionated Kardinal is, which means it should work nicely for anyone who shares the same kind of infras vision as you.

It's also such an interesting moment for you folks to show up on HN, I just shipped the first preview version of my Kubernetes operator(https://github.com/pier-oliviert/sequencer) that manages ephemeral environments. I can see some things that are similar with both our options as well as some things that are quite different.

Maybe if I had one question is: What made you go for Istio as the main network mesh?

Good luck with the launch!

By @globular-toast - 5 months
Looks interesting. I currently deploy dev instances as a single pod with everything in it, basically exactly the same as what devs get if they run docker compose locally. It works but pretty wasteful for many cases that don't need their own db etc. Is this supposed to make that less wasteful? Is it any different in the "full app"/end to end mode?
By @dimitar - 5 months
There is an alternative and complementary approach worth considering - instead of duplicating infrastructure in a smaller scale, you can simplify it to the simplest possible requirements needed to make your service run. Consider an old shared hosting - a single server could run 100s of wordpress websites just as well.
By @amne - 5 months
unfortunately, this tool assumes full coverage with k8. but let's say you have an external pub/sub solution and your services are decoupled. that's a pretty low bar.

sidenote: I noticed Istio (envoy actually) has some weird non-deterministic behavior when you hit pod resource limits (504 bad gateway, 0DC)

By @siliconc0w - 5 months
Maybe I am misunderstanding the value prop but how does this compare to namespaces?
By @AeZ1E - 5 months
wow, kardinal sounds cool for consolidating pre-production clusters! let's stop duplicating and start simplifying our kubernetes environments. who else is all in for the hyper-lightweight multitenancy framework trend? let's discuss!