News for hackers. Stuff that matters.
Re:Ask HN: If Kubernetes is the solution, why are there so m... by jen20 on Wednesday June 01, 2022 @11:37AM (#31583438)
I find this to be a common misconception, stemming from a misunderstanding of what "declarative" means (especially common when people are discussing tools like Terraform).

Firstly as you point out, there is a record of the state Kubernetes is being asked to maintain: it's in the API server as the spec of each resource.

Secondly, using `kubectl` "patch" in the manner described is not making changes to the cluster state directly, it's making changes to the specification of what should be maintained, and the various controllers effect the state changes.

Fundamentally, the argument seems to come down to "you don't have a record of what you once asked the API server to do", and that's fair enough - you don't. But that has nothing to do with imperative or declarative models.

I'm not advocating actually doing this on a day-to-day basis, but the arguments against it are not ones of imperative vs declarative.

Re:Ask HN: If Kubernetes is the solution, why are there so m... by throwaway894345 on Wednesday June 01, 2022 @01:20PM (#31585072)
> Fundamentally, the argument seems to come down to "you don't have a record of what you once asked the API server to do", and that's fair enough - you don't. But that has nothing to do with imperative or declarative models.

You do actually have this record. First of all, because k8s has an audit log, and secondly because deployments maintain a revision history (so you can always rollback--kubectl even supports this via `kubectl rollback undo`).

Re:Ask HN: If Kubernetes is the solution, why are there so m... by alias_neo on Wednesday June 01, 2022 @06:25PM (#31588919)
You're correct, but, when approaching this from the human perspective, it's less about the technology and the reality and more about "do I have a record of the last state I asked the cluster to be in before I fucked it up?". Ultimately that's what matters. Auditability is great, but in practice, when the shit hits the fan, can I get the application that brings in our company's money, and our customers rely on to breath, back to the state it was after 5 years and 73 updates?

Updating the manifests, pushing them to version control and having CD deploy them encourages humans to "do the right thing".

It would be quite easy though to just tweak that one environment variable though while I patch in the new image version to update that one service; until the entire cluster dies and I can't retrieve the last definition and need an equivalent cluster up within the hour.

This is really more about the practice of writing down the state you want the cluster to be in (the spec) and showing it to the cluster, than just ordering it to do one thing without context.

In this sense, Declarative Vs Imperative is just a proxy term for "do I have a record of the state I asked the cluster to keep?"

Re:Ask HN: If Kubernetes is the solution, why are there so m... by sgarland on Wednesday June 01, 2022 @11:56AM (#31583776)
Given that Kubernetes' docs[0] discuss using imperative commands, I think it's a fairly reasonable way to describe it.

[0] https://kubernetes.io/docs/tasks/manage-kubernetes-objects/i...

Re:Ask HN: If Kubernetes is the solution, why are there so m... by throwaway894345 on Wednesday June 01, 2022 @12:53PM (#31584658)
Why is applying a full manifest “declarative” but applying a patch is “imperative”? That’s clearly an error.
Re:Ask HN: If Kubernetes is the solution, why are there so m... by tbrownaw on Wednesday June 01, 2022 @02:30PM (#31586099)
Applying a full manifest is "this is your state now".

Applying a patch is "make these changes to your existing state".

That dependency on existing state is a difference, and it seems to map reasonably well to what declarative/imperative seem to usually be used to mean in this context.

Re:Ask HN: If Kubernetes is the solution, why are there so m... by throwaway894345 on Wednesday June 01, 2022 @02:38PM (#31586227)
1. A strategic merge patch says "this is your state now" (the only difference is the scope of the state in question, with a full manifest including a bunch of extraneous stuff)

2. "make these changes to your existing state" is still declarative

Re:Ask HN: If Kubernetes is the solution, why are there so m... by jen20 on Wednesday June 01, 2022 @04:55PM (#31587964)
> Applying a full manifest is "this is your state now".

It isn’t though. It’s “please make the state look like this eventually”. You do not patch state, just spec. Controllers effect the changes.

Re:Ask HN: If Kubernetes is the solution, why are there so m... by throwaway894345 on Thursday June 02, 2022 @01:12PM (#31597684)
You're both correct, but you're talking about different states. The parent's "state" is the state of the etcd database and your state is the actual state of the resources that the controllers are managing.

That said, the parent is wrong that a full manifest is declaring the (etcd) state in a way that a (strategic merge) patch isn't--both are declaring etcd state, but a strategic merge patch is doing so in finer-grained increments. A strategic merge patch can declare zero state or many full manifests, while applying full manifests can only work in increments of complete resource manifests. But both are telling Kubernetes "this is your (etcd) state now".

Re:Ask HN: If Kubernetes is the solution, why are there so m... by sgarland on Wednesday June 01, 2022 @01:45PM (#31585407)
Then open a PR.
Re:Ask HN: If Kubernetes is the solution, why are there so m... by throwaway894345 on Thursday June 02, 2022 @09:59AM (#31594972)
This is a strange way to concede an argument, but I’ll take it.