It's not about the commands. `pulumi up` is what you are looking for and the k8s resources that accompany it.
kubectl apply, especially with server side apply is effective just a mechanism to push the declarative definition of your k8s objects to the server.
Pulumi instead tries to manage the lifecycle of each of those objects itself when it really has no business doing so. This results in a lot of roundtrips to the Pulumi state store (which is implemented horrendously inefficiently btw) and generally takes forever and a day compared to kubectl apply.
Most of this is down to an impedance mismatch between the models themselves. Pulumi + k8s works but it's just not a great experience. I say this with an absolute -ton- of experience with both options.
For instance Pulumi also generates random names for resources, again you can override these but again, not very ergonomic to work around etc.
IMO tools like Tanka + Jsonnet, or Cue are just better fit for k8s because you can stick with server side apply which is a much more native experience.
kubectl apply, especially with server side apply is effective just a mechanism to push the declarative definition of your k8s objects to the server.
Pulumi instead tries to manage the lifecycle of each of those objects itself when it really has no business doing so. This results in a lot of roundtrips to the Pulumi state store (which is implemented horrendously inefficiently btw) and generally takes forever and a day compared to kubectl apply.
Most of this is down to an impedance mismatch between the models themselves. Pulumi + k8s works but it's just not a great experience. I say this with an absolute -ton- of experience with both options.