Slide 1

Slide 1 text

Environment as Code: Moving away from Imperative Pipelines Adarsh Shah Engineering Leader, Coach, Public Speaker Founder & CEO at CloudKnit @shahadarsh 
 https://cloudknit.io @shahadarsh https://bit.ly/eac-ghent Open Source Repo: https://github.com/cloudknit-io/cloudknit

Slide 2

Slide 2 text

@shahadarsh https://bit.ly/eac-ghent https://github.com/cloudknit-io/cloudknit Some of the Current Tools AWS SDK

Slide 3

Slide 3 text

@shahadarsh https://bit.ly/eac-ghent https://github.com/cloudknit-io/cloudknit CNCF Landscape

Slide 4

Slide 4 text

@shahadarsh https://bit.ly/eac-ghent https://github.com/cloudknit-io/cloudknit CNCF Landscape

Slide 5

Slide 5 text

@shahadarsh https://github.com/cloudknit-io/cloudknit https://bit.ly/eac-ghent

Slide 6

Slide 6 text

@shahadarsh https://bit.ly/eac-ghent https://github.com/cloudknit-io/cloudknit Evolution of Environment Setup networking + eks + …. Monolith Deployment networking eks website postgres networking networking + eks + …. ec2 website eks postgres ec2 Breaking into Separate & Smaller components + +

Slide 7

Slide 7 text

@shahadarsh https://bit.ly/eac-ghent https://github.com/cloudknit-io/cloudknit Evolution of Environment Execution From Engineers machine Deployment Pipeline/GitOps execution from a Shared Environment

Slide 8

Slide 8 text

@shahadarsh https://bit.ly/eac-ghent https://github.com/cloudknit-io/cloudknit • Option 1 • Create a Monolith IaC • Option 2 • Hand-roll Pipelines - Imperative • Manage Complex Dependencies Options for Entire Environment Provisioning

Slide 9

Slide 9 text

@shahadarsh https://bit.ly/eac-ghent https://github.com/cloudknit-io/cloudknit Other Challenges scaling IaC Replicating Environments is a pain Not easy to visualize/understand Environments Drift Detection Not straightforward to 
 promote changes Dev QA Prod

Slide 10

Slide 10 text

@shahadarsh https://bit.ly/eac-ghent https://github.com/cloudknit-io/cloudknit Terminologies Components: A logical grouping of 1 or more Infrastructure Resources or Applications that get provisioned together. For example, Networking is an Infrastructure Component with various Infrastructure resources like Virtual Private Cloud(VPC), Subnets, Internet Gateways, Route Tables, etc. Environment: A logical grouping of all the Components that are needed to run business applications. The grouping includes components like networking, eks, database, k8s apps, etc.

Slide 11

Slide 11 text

@shahadarsh https://github.com/cloudknit-io/cloudknit https://bit.ly/eac-ghent What is Environment as Code?

Slide 12

Slide 12 text

@shahadarsh https://bit.ly/eac-ghent https://github.com/cloudknit-io/cloudknit Environment as Code networking eks website postgres networking website eks postgres Declarative Environment as Code +

Slide 13

Slide 13 text

@shahadarsh https://github.com/cloudknit-io/cloudknit https://bit.ly/eac-ghent Environment as Code

Slide 14

Slide 14 text

@shahadarsh https://bit.ly/eac-ghent https://github.com/cloudknit-io/cloudknit IaC vs EaC Infrastructure as Code Automates various Lego Pieces 
 (i.e. Infrastructure Resources) Environment as Code Automates how those Lego Pieces 
 are connected to make up a Lego Toy 
 (i.e. Entire Environment)

Slide 15

Slide 15 text

@shahadarsh https://bit.ly/eac-ghent https://github.com/cloudknit-io/cloudknit Environment as Code Environment as Code (EaC) is an abstraction over Cloud native tools that provides a declarative way of de fi ning an entire Environment. It has a Control Plane that manages the state of the environment, including relationships between various resources, Detects Drift as well enables Reconciliation.

Slide 16

Slide 16 text

@shahadarsh https://github.com/cloudknit-io/cloudknit https://bit.ly/eac-ghent Imperative to Declarative HOW Pipelines EaC WHAT

Slide 17

Slide 17 text

@shahadarsh https://github.com/cloudknit-io/cloudknit https://bit.ly/eac-ghent Provision Environment Environment as Code Environment State (Manages dependencies, status etc. ) State networking eks State website postgres State networking website eks postgres Provision Reconcile Declarative Detect Drift Control Plane +

Slide 18

Slide 18 text

@shahadarsh https://github.com/cloudknit-io/cloudknit https://bit.ly/eac-ghent networking website eks postgres Teardown Environment Environment as Code Environment State (Manages dependencies, status etc. ) State networking State website eks postgres State Teardown Reconcile Declarative Detect Drift Control Plane +

Slide 19

Slide 19 text

@shahadarsh https://github.com/cloudknit-io/cloudknit https://bit.ly/eac-ghent Attributes of Environment as Code

Slide 20

Slide 20 text

@shahadarsh https://bit.ly/eac-ghent https://github.com/cloudknit-io/cloudknit Ability to de fi ne Entire Environment

Slide 21

Slide 21 text

@shahadarsh https://github.com/cloudknit-io/cloudknit https://bit.ly/eac-ghent Environment as Code networking platform-k8s k8s-addons postgres networking eks website postgres Declarative Loosely Coupled

Slide 22

Slide 22 text

@shahadarsh https://github.com/cloudknit-io/cloudknit https://bit.ly/eac-ghent Manage State for the entire Environment Example Environment State File

Slide 23

Slide 23 text

@shahadarsh https://github.com/cloudknit-io/cloudknit https://bit.ly/eac-ghent Idempotent and Immutable for entire Environment

Slide 24

Slide 24 text

@shahadarsh https://bit.ly/eac-ghent https://github.com/cloudknit-io/cloudknit Non-Idempotent Provision VM VM VM { } IaC 3 VMs End State
 Expected = 3 Actual = 6 Idempotent End State
 Expected = 3 Actual = 3 Reapply VM VM VM Provision VM VM VM Reapply No change { } IaC 3 VMs

Slide 25

Slide 25 text

@shahadarsh https://bit.ly/eac-ghent https://github.com/cloudknit-io/cloudknit Provision v1 v1 v1 User Mutable Infrastructure { } IaC Apply changes v2 v2 v2 Change { } IaC v1 v1 v1 Provision User Provision v2 v2 v2 User Immutable Infrastructure { } IaC Change { } IaC Deploys v2 to same Infrastructure Provisions new Infrastructure with v2

Slide 26

Slide 26 text

@shahadarsh https://bit.ly/eac-ghent https://github.com/cloudknit-io/cloudknit Visualize and Understand Environments

Slide 27

Slide 27 text

@shahadarsh https://bit.ly/eac-ghent https://github.com/cloudknit-io/cloudknit Drift Detection and Reconciliation Reconcile (Preferably with Approval step that shows the plan) Desired State Current State Control Loop Observe/Detect Drift

Slide 28

Slide 28 text

@shahadarsh https://bit.ly/eac-ghent https://github.com/cloudknit-io/cloudknit Compare and Promote Changes between Environments Compare & promote changes across environments GitOps for Entire Environment

Slide 29

Slide 29 text

@shahadarsh https://github.com/cloudknit-io/cloudknit https://bit.ly/eac-ghent Create Pull Request, EaC Validate Validate Approve & 
 Merge PR Control Plane Reconcile GitOps for Environment EaC Trunk networking platform-k8s k8s-addons postgres Observe Branch networking eks website postgres

Slide 30

Slide 30 text

CloudKnit Open Source Repo: https://github.com/cloudknit-io/cloudknit

Slide 31

Slide 31 text

Thank You @shahadarsh https://bit.ly/eac-ghent Adarsh Shah Engineering Leader, Coach, Public Speaker Founder & CEO at CloudKnit @shahadarsh 
 https://cloudknit.io Open Source Repo: https://github.com/cloudknit-io/cloudknit