Does anyone here have experience with both crosspl...
# kubernetes
m
Does anyone here have experience with both crossplane and Pulumi?
s
I haven’t used Crossplane, but my teammate @many-telephone-49025 has looked at it. He’s in EMEA and therefore it’s already the weekend for him, so he may not weigh in until he gets back to the office on Monday.
m
Thanks @salmon-account-74572 for tagging me! @millions-furniture-75402 any particular question around Crossplane and Pulumi?
m
I'm curious how they stack up against either. Crossplane would be considered more "first class" in the Kubernetes ecosystem, but the providers appear less developed than Pulumi. I'm curious if the Pulumi k8s Operator makes Pulumi a viable alternative to Crossplane. If I already have a number of stacks deployed through traditional pipelines using Pulumi, that I want to move into Kubernetes for delivery, then does it make more sense to use the Pulumi k8s Operator, or redeclare the stacks in Crossplane?
s
One thing Engin pointed out to me (which is obvious now in retrospect) is that Crossplane lacks any preview/plan functionality---this makes sense when you think about it leveraging the core K8s reconciliation loop, but I hadn’t considered that before he mentioned it. WRT to your question, to me it makes more sense to move to the Pulumi K8s Operator.
m
Is there any first class features in crossplane that Pulumi is missing in Kubernetes?
m
@millions-furniture-75402 I think there is no feature missing. It is just the way you can achieve them. For example: A composite Resource (XR) is defined in crossplane with the XRD and a Compostion. To create a similar abstraction, you have to use in Pulumi either Component Resources (for each language) or if yo want to stick in YAML land, by creating a multi language component.
m
Last question, if I may. Are there any pain points in the setup, usage or overall developer ergonomics?
m
What I saw in Crossplane with the latest releases, was a general shift to Pipelines in the composition and the usage of functions (in code) and go-template function. So as a Platform Engineer, with a more sophisticated use case, you will probably need to program your own functions or use some of the predefined functions of the upbound marketplace to create custom Compositions to your users which they can then Claim. Same you can do now in Pulumi without running in a challening YAML / code mixture as your MLC or Component Resource are available in the language of your choice. This helps for a great product thinking, when exposing them to consum efrom your internal teams. If you are a polyglot company, using MLC and generating SDKs for every language is a nice plus. From a setup point: Both use Kubernetes! Thats can be smooth if your chain is optimised for k8s or can be bad. Delivery: Pulumi Operatior supports GitOps and even has a native intergration with Flux
What I like much in Pulumi, and yes I am biased, is that Component Resources (or on Steroids MLC) are very powerful! I talked with engineering to see if we can create Component Resources in YAML also. This is currently only possible through MLCs .
But what I tried recently is using Pulumi YAML and KCL abstractions (https://kcl-lang.io/docs/user_docs/guides/abstraction) But had not time to write a post about it. But this looks also very intersting alternative to Cue.
m
Thank you, I appreciate your thorough feedback.
I talked with engineering to see if we can create Component Resources in YAML also. This is currently only possible through MLCs
I was hoping things would head this direction. I spoke elsewhere about how I'd love to start everything with YAML, and "eject" to a general purpose language if necessary. I tried porting our MVP microservice templates to YAML, but at the time I wasn't able to achieve feature parity.
m
Good thing is always to open a issue. With this, @salmon-account-74572 and I can take this internally and advocate for it with the engineering team. As mentioned, I would like to have this feature of creating component resources in yaml too. Either through CRDs on K8s or on a more generic way.