Hacker News new | past | comments | ask | show | jobs | submit login
Show HN: Kardinal–The lightest-weight Kubernetes dev environment in the world (github.com/kurtosis-tech)
29 points by grogu88 27 days ago | hide | past | favorite | 10 comments



At first I thought this was about setting up Kubernetes clusters, but that is not what this is about at all. The cluster is just providing resources, the actual thing here is multiple environments within that cluster. So you might have your chain of services (frontends, backends, event based services) and instead of duplicating all of them you somewhat nest them blue-green style in the same cluster.

In theory you could just use ingress and a special URL to deploy a single service as a special one-off deviation, but when you want to have an entire chain of services adjusted for a separate virtual environment that no longer works (unless you duplicate all services and rewrite all dependant service URLs for example).


founder/dev on this project here - exactly!! still trying to figure out the wording between "kubernetes development environment", "kubernetes-based application deploys", "application environments in-cluster", etc...i can tell it's not quite coming across clearly in the first go, but yeah you got the idea

you can even use ingress and special URL for multiple services in a one-off deviation, but things get really messy when you want to test state-level things too like db migrations.

besides making it more convenient to handle the chain of dependencies and duplicating all the services, we also want to make it easier to test db/state migrations and larger features without having to do an expensive e2e application deploy


I think there isn't an exact term for this yet, it's a bit of a blend between ephemeral environments and skaffold. There have been a few in-house implementations at various companies where they use Istio and combinations of VirtualService and DestinationRule resources to create multi version environment and nested environments without having to change the application code, and this seems to be something like that, but local (hence the Skaffold reference).

Your project is probably going to be useful for some (who want it locally), and an inspiration for others (who want to build something similar but for their custom platform) as it can be pretty tricky in a world were we still have people doing things manually (i.e. running kubectl apply in production).


> Kardinal is a framework for creating extremely lightweight ephemeral development environments within a shared Kubernetes cluster.

I was expecting something like kind. This is still useful, just not what the title made me think of, though fitting everything into the title is sometimes impossible.


founder/developer here - yeah, in the last couple weeks I've had in the back of my mind switching the wording to "lightest-weight application deploys on Kubernetes" or something like that.

environment is an incredibly overused word for devs. development environment might even mean IntelliJ, not a k8s cluster with your dev versions inside of it

been going back and forth a lot on how to make this more clear without introducing additional confusion


that's a bold claim, why is this any more lightweight than doing namespace-based deploys or just using telepresence for development?

like the name though


founder/developer on Kardinal here - that's a good question

in reality what you're doing with namespace-based deploys or telepresence is equally "lightweight" to what you're doing with Kardinal. it's just that (at least in our phrasing), those don't quite constitute a separate "environment" as state is shared between any developers working at the same time

Kardinal matches those approaches in terms of light-weightedness, but offers state isolation guarantees too (like isolation for your dbs, queues, caches, managed services, etc). so in comparison to "ephemeral environment" approaches that give state isolation, we do believe we're doing this in the most lightweight way possible by implementing that isolation at the layer of the network request rather than by duplicating deployed resources

and thanks for the +1 on the name haha, we called it Kardinal because the goal is to deploy only "unique elements of your ephemeral environments" across the organization, i.e. number of services deployed equals the "cardinality" of service versions


I don't think thats what they meant by namespaced deploys. I think they meant an entire copy of the environemnt contained in separate namespaces.

How do you handle requests going from service A to B and then to database C vs A2 -> B -> C2?. How does service B know to route to a different database based on the version of A thats different?


service B doesn't actually know that - it happens at the level of the service mesh (you have to have a service mesh installed, right now just supporting istio but we plan on making that configurable)

we use trace headers to keep track of where the request originally came from to route it to the right database. it's transparent to service B as long as service B is properly propagating the request context from incoming request to outgoing requests


Is that at the TCP level or the http level?




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: