[Talk] Moving Beyond Spaghetti Infrastructure [AOTB] 2024-07-04.pdf

KiefMorris 172 views 50 slides Jul 08, 2024
Slide 1
Slide 1 of 50
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45
Slide 46
46
Slide 47
47
Slide 48
48
Slide 49
49
Slide 50
50

About This Presentation

Kief Morris rethinks the infrastructure code delivery lifecycle, advocating for a shift towards composable infrastructure systems. We should shift to designing around deployable components rather than code modules, use more useful levels of abstraction, and drive design and deployment from applicati...


Slide Content

Rethinking the infrastructure
delivery lifecycle
Moving beyond
spaghetti infrastructure Kief Morris
Global Infrastructure Practice Lead
July, 2024

My journey
CFEngine
FAI
2000
Puppet
Chef
VMWare
DevOps
CD
Cloud
1st
Edition
2nd
Edition
2010 2020
Various digital startups and scaleups
Learning and
adopting
Thoughtworks consultant
Helping enterprises
with adoption
Thoughtworks global role
3rd
Edition
Exploring and
sharing what's next

Our
infrastructure
codebases are
spaghetti

Problems with
infrastructure
●Too much custom work
●Blocker rather than enabler
●Costs not well-aligned
●Lack of confidence
●Legacy accumulates

Goals
●Share more infrastructure code
●Empower teams
●Build governance in
●Lower the cost of scaling
●Continuously reduce legacy

How?

Rethink infrastructure code architecture
Rethink infrastructure code delivery
Rethink infrastructure code deployment

Rethinking
infrastructure code
architecture

Beyond monolithic
infrastructure
deployments

What is an infrastructure monolith?
Deploy
Infrastructure
project
and is deployed
as a single unit
that defines
infrastructure for
different workloads

What is an infrastructure monolith?
Deploy
Infrastructure
project
and is deployed
as a single unit
that defines
infrastructure for
different workloads
Low cohesion
High coupling

What is an infrastructure monolith?
Deploy
Infrastructure
project code
and is deployed
as a single unit
that defines
infrastructure for
different workloads
Low cohesion
High coupling
Barriers to change
Barriers to quality

Are code libraries the solution?
Deploy
Infrastructure
project code
Infrastructure
code libraries

Are code libraries the solution?
Deploy
Infrastructure
project code
Infrastructure
code libraries
Libraries are useful
for organizing and
sharing code
But they don't
reduce the size or
risk of deployments

From monolith to composable deployments


Deploy

From monolith to composable deployments
Separately
deployable
infrastructure
components
Separately
developed,
tested, and
delivered

We need more
helpful
abstractions

About
abstractions
●Abstractions that hide stuff are
unhelpful
●Abstractions that disempower
people are unhelpful
●Abstractions that support
cognitive focus are helpful

Current
infrastructure
abstractions are
not helpful enough
●Infrastructure code is super low
level
●Great for systems administrators,
who think at this level
●Not great for application owners,
who don't think at this level

Infrastructure
code abstractions
Workload
IaaS Resources

Stacks:
Deployable
components
Workload
IaaS Resources
Infrastructure stacks

Infrastructure
Products:
Consumable
components
Workload
IaaS Resources
Infrastructure stacks
Infrastructure products

Rethinking
infrastructure code
delivery

Common issues
●Environments are difficult and
expensive to create and change
●Environments are inconsistent
and outdated
●Not enough environments
available
●Environments are
over-provisioned and
under-utilized

ENVIRONMENT ENVIRONMENT ENVIRONMENT
Infrastructure delivery lifecycle
Develop Deploy
Use

Recoupling the
infrastructure
delivery lifecycle

ENVIRONMENT ENVIRONMENT ENVIRONMENT
Bespoke environments as code
Develop Deploy
Use
Infrastructure code
developed and deployed
for a specific workload
and its environments
Creates coupling across
the infrastructure
delivery lifecycle

ENVIRONMENT ENVIRONMENT ENVIRONMENT
Bespoke environments
Develop Deploy
Use
Infrastructure code
developed and deployed
for a specific workload
and its environments
Creates coupling across
the infrastructure
delivery lifecycle
This creates
issues at scale
Silos, bottlenecks

ENVIRONMENT
Development and deployment are coupled
Develop Deploy
Use
Responsibility for
developing, configuring,
and deploying
infrastructure code
Responsibility
for making
everything work

ENVIRONMENT
Decoupling development and deployment
Develop Deploy
Use
Responsibility for
developing
infrastructure code
Responsibility for
configuring,
deploying, and using
the infrastructure

Repository makes
components
available to deploy
ENVIRONMENT
Decoupling development and deployment
Develop Deploy
Use
Pipelines deliver
deployable infrastructure
components
Self-service
configuration and
deployment of
infrastructure
components

ENVIRONMENT
Decoupling development and deployment
Develop Deploy
Use
Multiple pipelines to
provide composable
infrastructure components
Infrastructure
components are
independently
deployed

Rethinking
infrastructure code
deployment

Application-
driven
infrastructure
deployment

Bottom-up infrastructure deployment
Deploy
Use
Configure and deploy
infrastructure in isolation
from deploying the
software that runs on it

Application-driven infrastructure deployment
Deploy
Use
Infrastructure deployment
is triggered when the
workload that uses it is
deployed

Application-driven infrastructure deployment
We can use this to deploy
different composable
infrastructure components
for multiple workloads
Infrastructure deployment
is triggered when the
workload that uses it is
deployed

Application-driven infrastructure deployment
But, how do we handle
deploying shared
infrastructure?
We can use this to deploy
different composable
infrastructure components
for multiple workloads
Infrastructure deployment
is triggered when the
workload that uses it is
deployed

Composable
deployment
contexts

Composable deployment contexts
Workload-specific
infrastructure
A context can include
multiple deployable
infrastructure
components

Composable deployment contexts
Workload-specific
infrastructure
Shared
infrastructure

Composable deployment contexts
Workload-specific
infrastructure
Shared
infrastructure
Workload groups

Composable deployment contexts
Workload-specific
infrastructure
Shared
infrastructure
Workload groups

Composable deployment contexts
Workload-specific
infrastructure
Shared
infrastructure
Platform services
Workload groups

Composable deployment contexts
Infrastructure should
be defined as close to
the workload as
possible
Lower contexts should
be ignorant of their
consumers

Deploying
infrastructure by
context

Options for
deploying
infrastructure by
context
●Application deployment trigger
●Pipeline stage
●Developer portal
●Platform framework

How can you use
these ideas?

Atlantis
Control Monkey
Crossplane
Digger
env0
Garden
Gruntwork DevOps
HCP Terraform
Harness
Pulumi Cloud
Scalr
Spacelift
Terrakube
Terramate
Terrateam
Infrablocks
Terragrunt
Terraspace
Cluster.dev
Gruntwork DevOps
Infrablocks
Resourcely
Tools and things that may or may not be useful
Codebase and builds
Deployment and
orchestration
Infrastructure products
and catalogs
http://infrastructure-as-code.com

Rethinking the infrastructure
delivery lifecycle
Moving beyond
spaghetti infrastructure
Global Infrastructure Practice Lead
July, 2024
http://infrastructure-as-code.com
Kief Morris
Thank
you!