DevOps/GitOps v1.0.0 | CNCF Landscape

Overview

DevOps is about automation across the lifecycle of an application. GitOps extends that with disciplined methods —Git as the single Source of Truth (SoT) —across all layers of all components, from infra to services, with the goal of repeatable, verifiable deployment states.

GitOps is an operational framework that takes DevOps best practices used for application development such as version control, collaboration, compliance and such, and applies them to infrastructure automation. GitOps consists of Infrastructure as Code (IaC), configuration management (CM) by Git, Platform Engineering, and Continuous Integration and Continuous Delivery (CI/CD).

Why

Configuration Management.

The number of configurations in a system with many options grows exponentially. For example, a system with N binary configuration options has 2^{N} possible configurations. This exponential growth percipitates the configuration explosion problem, where a system's behavior under all possible configurations is untestable

DevOps and GitOps use a combination of principles and practices, such as Configuration as Code (CaC), to mitigate the risk posed by the vast configuration space.

Q:

How many possible configurations are there for 3 hosts, each having 6 services, each having 6 parameters, each having only two possible settings?

This scenario is an artificially simple infrastructure to steelman the argument against DevOps/GitOps/IaC. So, let's see what we may see …

A:

  1. Parameters per service: Each service has 6 parameters, and each parameter has 2 settings. So, the number of configurations for one service is:
    2^6 = 64

  2. Services per host: Each host has 6 services, so the number of configurations for one host is:
    64^6 = (2^6)^6 = 2^36 = 68,719,476,736

  3. Total hosts: There are 3 hosts, so the total number of configurations is:
    (68,719,476,736)^3 = (2^36)^3 = 2^108

  4. Final calculation: (2^36)^3 = 2^108

So, the number of possible configurations is:
324,518,553,658,426,726,783,156,020,576,256
(~ 3.2 x 10^32)

That's many more than a trillion trillion possible configurations.

More than the estimated number of stars in the Universe. Not the galaxy. The entire Universe.

And only one of those is the one you want. All the others are some kind of misconfiguration.

Do you like those odds?

DevOps/GitOps with its IaC/CaC is an upfront cost that pays dividends each time it is applied. And the more your infa builds out, the larger those per-build dividends grow.

Conversely, absent these practices, every stage of the build out is levied a tax dwarfing that of the prior stage. The resulting explosion of misconfigurations is merciless. It grinds down productivity along with morale, and does so ever more as the project progresses.

Principles

  1. Declarative
    A system managed by GitOps must have its desired state expressed declaratively.
  2. Versioned and Immutable
    Desired state is stored in a way that enforces immutability, versioning and retains a complete version history.
  3. Pulled Automatically
    Software agents automatically pull the desired state declarations from the source.
  4. Continuously Reconciled
    Software agents continuously observe actual system state and attempt to apply the desired state.

Results

Methods

Tools | CNCF Landscape

Environments

Upon what infrastructure does the app AKA workload AKA service run?

Configuration

Schemes for Unique Identifier

Key points to consider when choosing a unique identifier scheme: