Traditional DevOps wisdom is to utilize automation tools for configuring all the systems, so all pieces of configuration should be described with code stored in version control. Then the people responsible for these systems can use standard Dev practices to collaborate on this code (reviews, tests, quality gates, etc.).
With the advent of cloud native systems, we now utilize containers and orchestrators to define how our applications should be operated.
Kubernetes provides a declarative API, so you can describe the desired state of the system. And then it is the role of the control plane to operate the cluster (make the actual state match the desired state).
But we still need config mgmt for API objects to the point when they are applied to the cluster.
Helm helps organizing these configs into charts, template them, and manage releases. And GitOps lets you use a git repo as a single source of truth for the desired state of the whole system. Then all changes to this state are delivered as git commits instead of using kubectl apply or helm upgrade.
In this talk I will introduce the GitOps model for operating cloud native environments and give a short demo.
4. Puppet
@ttarczynski
● DSL: a simple and constrained language
● Declarative: describe the desired state
● Templates: ERB
● Modules: public and private
5. Kubernetes
@ttarczynski
● Control plane provides a Declarative API
● Declare the desired state
● Control plane makes sure that the actual
state converges to the desired state
18. GitOps: Why Helm
@ttarczynski
● Manage complexity: describe complex apps
● Easy updates: in-place upgrades and custom hooks
● Simple sharing: public / private repo
● Rollbacks: roll back to an older version with ease
23. GitOps
@ttarczynski
● The entire system is described declaratively
● The canonical desired system state is
versioned (with Git)
● Approved changes to the desired state are
automatically applied to the system
● Software agents ensure correctness