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.
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?
Our Kontemplate repository contains the state of an entire cluster, including all versions and all configuration.
A tag value is a single piece of mutable data that is in no relation to the other relevant data.
Still don't see any advantage to justify the additional complexity in your system.
I find it more complex to try and keep track of remote state modifications than to have a single source of truth, but whatever floats your boat ;-)
This predates infra-as-code.. it took years before someone wrote a clone that used Git instead of CVS
Made something stupidly similar for kubernetes: https://github.com/pieterlange/kube-backup