Slightly offtopic from what the article focuses on, but the thing that bothers me about all these built-in CI/CD things in software like Gitlab is that people seem to be perfectly content with building an artifact and then just ... pushing it out. In traditional deployments that may be some kind of "copy this thing over SSH and make it go!", in Kubernetes-land it's more like "lets just modify this API-state to point…
Sorry but it's not clear what you are saying. What is the fundamental difference between modifying your k8s deployment to point to a new tag and your solution? You can easily roll back (except with database migrations) and easily see what version is deployed when.
You're also only modifying a single piece of your whole state at any given time, meaning that if you have the services A and B and their deployment pipelines independently modify state - you have nothing that declares any relationship between which versions of these should be deployed together.
There's a little piece of infrastructure wisdom I've learned over the years, I refer to it sometimes as "tazjin's law":
Any infrastructure component not controlled by a reconciliation process will eventually fail.
Versions of dependent components will get out of sync, configuration is being deployed independently of the application, and so on.
In order to reconcile your current state with your desired state you must know what your desired state is.
Does that explain it?