GitOps is a set of principles for operating and managing software systems. These principles are derived from modern software operations, but are also rooted in pre-existing and widely adopted best practices.
The desired state of a GitOps managed system must be:
-
Declarative
A system managed by GitOps must have its desired state expressed declaratively.
-
Versioned and Immutable
Desired state is stored in a way that enforces immutability, versioning and retains a complete version history.
-
Pulled Automatically
Software agents automatically pull the desired state declarations from the source.
-
Continuously Reconciled
Software agents continuously observe actual system state and attempt to apply the desired state.
-
Actual System State is Manageable "always"
System state manageability must meet users' SLA expectations to make changes to it. If the desired state store's availability is less that that SLA expectation, it should be possible to "break the glass" to update the system state directly and reconcile system state to desire state.