OOP Conference, February 2021, talk by Mario-Leander Reimer (@LeanderReimer, Chief Software Architect at QAware)
== Please download slides if blurred! ==
Abstract: YAML seems to be the predominant way to describe our Kubernetes workloads. For each and every microservice we have to declare pods, deployments, services and a lot more. Now multiply this by several environments and deployment variants. The result often is excessive YAML bloat that leads to insufficient dev-prod parity, frustration and low developer productivity. So make sure to join this talk if you want to learn how to continuously deliver quality software and have happy Cloud-native developers on your team again.
3. // OOP 2021 Digital // Ways Towards a Productive YAML-less Cloud-native DevEx // @LeanderReimer #cloudnativenerd #qaware #OOPdigital
3
Code & Demos
https://github.com/qaware/productive-cloud-native-devex
4. // OOP 2021 Digital // Ways Towards a Productive YAML-less Cloud-native DevEx // @LeanderReimer #cloudnativenerd #qaware #OOPdigital
DevEx in the good old days …
4
Spec Design Test Integrate Operate
Develop Deploy
5. // OOP 2021 Digital // Ways Towards a Productive YAML-less Cloud-native DevEx // @LeanderReimer #cloudnativenerd #qaware #OOPdigital
Cloud-native DevEx today?
5
Spec Design Test Integrate Operate
Develop Deploy
6. // OOP 2021 Digital // Ways Towards a Productive YAML-less Cloud-native DevEx // @LeanderReimer #cloudnativenerd #qaware #OOPdigital
Cloud-native DevEx today!
6
Spec Design Test Integrate Operate
Develop Deploy
Docker
K8S JSON
YAML
AWS
NFA
CI/CD
More
YAML
Even
More
YAML
Agile
Tracing
M
etrics
More
Stuff
Eve
More
Eve
More
Eve
More
7. // OOP 2021 Digital // Ways Towards a Productive YAML-less Cloud-native DevEx // @LeanderReimer #cloudnativenerd #qaware #OOPdigital
How do you organise and enable
technology teams for
fast
fl
ow and high productivity?
7
8. // OOP 2021 Digital // Ways Towards a Productive YAML-less Cloud-native DevEx // @LeanderReimer #cloudnativenerd #qaware #OOPdigital
Too much cognitive load will become a bottleneck
for fast
fl
ow and high productivity.
• Intrinsic Cognitive Load - relates to fundamental aspects
and knowledge in the problem space (e.g. used languages,
APIs, frameworks, micro architecture)
• Extraneous Cognitive Load - relates to the environment
(e.g. deployment, con
fi
guration, console commands)
• Germane Cognitive Load - relates to speci
fi
c aspects of the
business domain (aka. „value added“ thinking and learning)
8
https://teamtopologies.com
9. // OOP 2021 Digital // Ways Towards a Productive YAML-less Cloud-native DevEx // @LeanderReimer #cloudnativenerd #qaware #OOPdigital
Minimize
intrinsic cognitive load
(by training, peer programming, standards, languages, …)
9
10. // OOP 2021 Digital // Ways Towards a Productive YAML-less Cloud-native DevEx // @LeanderReimer #cloudnativenerd #qaware #OOPdigital
Eliminate
extraneous cognitive load
(automate, automate, standardize, automate, automate, …)
10
11. // OOP 2021 Digital // Ways Towards a Productive YAML-less Cloud-native DevEx // @LeanderReimer #cloudnativenerd #qaware #OOPdigital
Use the right tools for the job!
11
Getty Images Liliboas
Skaffold Tilt
kustomize
Buildpacks Pulumi
12. // OOP 2021 Digital // Ways Towards a Productive YAML-less Cloud-native DevEx // @LeanderReimer #cloudnativenerd #qaware #OOPdigital
What are Cloud-native Buildpacks?
• Buildpacks were
fi
rst introduced by
Heroku in 2011. Since then, adopted by
Cloud Foundry and other PaaS.
• CNCF Project initiated by Pivotal and
Heroku in January 2018
• Buildpacks are pluggable, modular tools
to translate source code into OCI images
• Reduces the operational burden on devs
• Support enterprise operators who
manage apps at scale
• Several default build packs and option to
build custom packs.
12
13. // OOP 2021 Digital // Ways Towards a Productive YAML-less Cloud-native DevEx // @LeanderReimer #cloudnativenerd #qaware #OOPdigital
Kubernetes native con
fi
guration management
• https://kustomize.io
• A template-free way to customize
your application con
fi
guration
• Now, built into kubectl as apply -k
• Try https://kustomize.io/tutorial
13
14. // OOP 2021 Digital // Ways Towards a Productive YAML-less Cloud-native DevEx // @LeanderReimer #cloudnativenerd #qaware #OOPdigital
Pulumi - Modern Infrastructure as Code.
• Imperative management and de
fi
nition of Kubernetes applications
and objects using familiar programming language
• Use the same tools to build your application and its con
fi
guration
• Compose and share reusable components through code libraries
• Terraform alternative: supports all major cloud providers (AWS, …)
• Similar projects: Amazon CDK, cdk8s
14
15. // OOP 2021 Digital // Ways Towards a Productive YAML-less Cloud-native DevEx // @LeanderReimer #cloudnativenerd #qaware #OOPdigital
Fast. Repeatable. Simple.
Local Kubernetes development.
• https://skaffold.dev
• Handles the work
fl
ow for building, pushing and deploying an app
• Watches local
fi
le system. Continuously triggers build & deploy on
code changes
• Allows to synchronize static resources without rebuilding the image
• Support for different environments with Pro
fi
les, Env Vars Templates
and kube-context activation
15
16. // OOP 2021 Digital // Ways Towards a Productive YAML-less Cloud-native DevEx // @LeanderReimer #cloudnativenerd #qaware #OOPdigital
The Scaffold Work
fl
ow in a Nutshell
16
17. // OOP 2021 Digital // Ways Towards a Productive YAML-less Cloud-native DevEx // @LeanderReimer #cloudnativenerd #qaware #OOPdigital
— Stressless Local Kubernetes Development
• https://tilt.dev
• Automatically handles all the expert tricks for working in a K8s
development environment
• Fire up and manage complex microservice constellations
• Watches your
fi
le system and update servers in seconds
• Streams logs, events, and pod changes so that it can show you the
problem when something breaks
• Provides console HUD and nice Web UI
17