|
| 1 | +# GitOps Principles v0.1.0 |
| 2 | + |
| 3 | +## Summary |
| 4 | + |
| 5 | +GitOps is a set of principles for operating and managing software systems. |
| 6 | + |
| 7 | +When using GitOps, the _Desired State_ of a system or subsystem is defined declaratively as versioned, immutable data, and the running system's configuration is continuously derived from this data. |
| 8 | + |
| 9 | +These principles were derived from modern software operations but are rooted in pre-existing and widely adopted best practices. |
| 10 | + |
| 11 | +## Principles |
| 12 | + |
| 13 | +1. **The principle of declarative desired state** |
| 14 | + |
| 15 | + A system managed by GitOps must have its _Desired State_ expressed declaratively as data in a format writable and readable by both humans and machines. |
| 16 | + |
| 17 | +2. **The principle of immutable desired state versions** |
| 18 | + |
| 19 | + _Desired State_ is stored in a way that supports versioning, immutability of versions, and retains a complete version history. |
| 20 | + |
| 21 | +3. **The principle of continuous state reconciliation** |
| 22 | + |
| 23 | + Software agents continuously, and automatically, compare a system's _Actual State_ to its _Desired State_. |
| 24 | + If the actual and desired states differ for any reason, automated actions to reconcile them are initiated. |
| 25 | + |
| 26 | +4. **The principle of operations through declaration** |
| 27 | + |
| 28 | + The only mechanism through which the system is intentionally operated on is through these principles. |
| 29 | + |
| 30 | +## Notes |
| 31 | + |
| 32 | +### Principle 3 Notes |
| 33 | + |
| 34 | +- These differences could be due to the actual state drifting from the desired state, or the desired state changing intentionally. |
| 35 | +- The source of drift doesn't matter. Contrary to CIops, _any_ drift will trigger a reconciliation |
| 36 | + |
| 37 | +### Principle 4 Notes |
| 38 | + |
| 39 | +- We talk here about "regular operations." In an emergency, other modes of operations, e.g. manual intervention, should be considered - followed by a reconciliation of the "tainted" system with the declared state. → resolve the conflict between "GitOps principle" and "I need to deal with problems that GitOps doesn't cover" |
| 40 | + |
| 41 | +## Glossary |
| 42 | + |
| 43 | +- ### Continuous |
| 44 | + |
| 45 | + By "continuous" we adopt the industry standard term to mean reconciliation continues to happen, not that it must be instantaneous. |
| 46 | + |
| 47 | +- ### Declarative Description |
| 48 | + |
| 49 | + Describing the desired state or behavior of a system without specifying how that state will be achieved, thereby separating between configuration - the desired state - and implementation - the commands, API calls, scripts ... that actually achieve the desired state described in the declarative description. |
| 50 | + |
| 51 | +- ### Desired State |
| 52 | + |
| 53 | + The aggregate of all configuration data for a system form its _Desired State_ which is defined as data sufficient to recreate the system so that instances of the system are behaviourally indistinguishable. |
| 54 | + |
| 55 | +- ### Software System |
| 56 | + |
| 57 | + One or more Runtime environments consisting of resources under management. |
| 58 | + In each Runtime, management Agents to act on resources according to security policies. |
| 59 | + One or more software Repositories for storing deployable artifacts that may be loaded into the runtime environments, eg. configuration files, code, binaries and packages. |
| 60 | + One or more Administrators who are responsible for operating the runtime environments ie. installing, starting, stopping and updating software, code, configuration, etc. |
| 61 | + A set of policies controlling access and management of repositories, deployments, runtimes. |
| 62 | + |
| 63 | +- #### State Store |
| 64 | + |
| 65 | + A system for storing versioned, immutable Desired States that provides access control and auditing on the changes to the Desired State. Git may be configured as a State Store, but [special precautions must be taken](recipes/SETTING_UP_GIT.md). |
0 commit comments