Slide 1

Slide 1 text

Thomas Vitale Spring I/O May 19th, 2023 Developer Experience With Spring Boot on Kubernetes @vitalethomas

Slide 2

Slide 2 text

Systematic • Software Engineer and Cloud Architect. • Author of “Cloud Native Spring in Action” (Manning). • OSS contributor (Java, Spring, Cloud Native Technologies) Thomas Vitale thomasvitale.com @vitalethomas

Slide 3

Slide 3 text

Problem @vitalethomas

Slide 4

Slide 4 text

Value @vitalethomas

Slide 5

Slide 5 text

Delivering Value From idea to production Developer Production Idea @vitalethomas ?

Slide 6

Slide 6 text

Developer Experience @vitalethomas

Slide 7

Slide 7 text

Developer Experience “…developer experience could be defined as a means for capturing how developers think and feel about their activities within their working environments, with the assumption that an improvement of the developer experience has positive impacts on characteristics such as sustained team and project performance.” (F. Fagerholm, J. Münch) Developer Experience: Concept and De fi nition (F. Fagerholm, J. Münch) @vitalethomas

Slide 8

Slide 8 text

Developer Experience: Concept and De fi nition (F. Fagerholm, J. Münch) Developer Experience Conceptual Framework @vitalethomas

Slide 9

Slide 9 text

Value @vitalethomas

Slide 10

Slide 10 text

Developer Experience Tools are not enough ORGANIZATION PROCESSES TECHNOLOGY CULTURE @vitalethomas

Slide 11

Slide 11 text

Technologies Developer experience with Java on Kubernetes @vitalethomas

Slide 12

Slide 12 text

Team Topologies Organisational design for software @vitalethomas

Slide 13

Slide 13 text

Continuous Delivery Better software faster @vitalethomas

Slide 14

Slide 14 text

Goals 2 Reduced cognitive load 3 Clear and safe path to production 1 Rapid and continuous feedback loop @vitalethomas

Slide 15

Slide 15 text

Development Workflow @vitalethomas

Slide 16

Slide 16 text

Cloud Native @vitalethomas

Slide 17

Slide 17 text

From Traditional to Cloud Native Application Server, Embedded Server Runtime (JVM) Middleware (Application Server) Application (WAR/EAR) Runtime (JVM) Application (JAR) @vitalethomas

Slide 18

Slide 18 text

Containers @vitalethomas

Slide 19

Slide 19 text

Moving to Containers Application Server, Embedded Server, Container Runtime (OCI) Application (Container) Runtime (JVM) Middleware (Application Server) Application (WAR/EAR) Runtime (JVM) Application (JAR) @vitalethomas

Slide 20

Slide 20 text

Dockerfiles “Dockerfiles are easy to write, but the current development guidelines do not produce containers that are repeatable and hardened.” CNCF Software Supply Chain Security Paper https://github.com/cncf/tag-security/tree/main/supply-chain-security @vitalethomas

Slide 21

Slide 21 text

Cloud Native Buildpacks @vitalethomas

Slide 22

Slide 22 text

Image pack build Cloud Native Buildpacks From source code to container image @vitalethomas

Slide 23

Slide 23 text

Kubernetes @vitalethomas

Slide 24

Slide 24 text

Moving to Kubernetes Application Server, Embedded Server, Container, Kubernetes Runtime (OCI) Middleware (Kubernetes) Application (Container) Runtime (JVM) Middleware (Application Server) Application (WAR/EAR) Runtime (JVM) Application (JAR) Runtime (OCI) Application (Container) @vitalethomas

Slide 25

Slide 25 text

Working with Kubernetes Manifests for application deployment Deployment Deploy the application and con fi gure replication Service Expose the application from within the cluster @vitalethomas Ingress Expose the application from outside the cluster

Slide 26

Slide 26 text

Tilt @vitalethomas

Slide 27

Slide 27 text

Tilt Continuous development on Kubernetes @vitalethomas CODE BUILD RUN TEST Inner Development Loop

Slide 28

Slide 28 text

Development Workflow Inner Loop and Outer Loop Inner Loop ‣Code ‣Build ‣Run ‣Test Outer Loop ‣CI/CD ‣Compliance, security ‣Con fi guration, monitoring ‣Production deployment git push @vitalethomas

Slide 29

Slide 29 text

Inner Development Loop Code, build, test E ffi cient Inner Development Loops for Cloud Native Applications https://www.getambassador.io/resources/inner-dev-loop/ @vitalethomas

Slide 30

Slide 30 text

Skaffold @vitalethomas

Slide 31

Slide 31 text

Skaffold Continuous development on Kubernetes @vitalethomas CODE BUILD RUN TEST Inner Development Loop

Slide 32

Slide 32 text

Argo CD @vitalethomas

Slide 33

Slide 33 text

Argo CD Continuous Deployment with GitOps @vitalethomas Developer App Repo Pull Request Sync changes Temporary Environment

Slide 34

Slide 34 text

Knative @vitalethomas

Slide 35

Slide 35 text

Knative Serverless experience on Kubernetes @vitalethomas

Slide 36

Slide 36 text

Serverless Architectures Developers focus on code Focus on business logic Developer Platform Infrastructure Provisioning Workload Management Dynamic Scaling @vitalethomas

Slide 37

Slide 37 text

Knative Serving Serverless Experience on Kubernetes Developer-friendly abstractions From image to URL Autoscaling Scaling to zero Progressive Rollouts Request-driven Event-driven Cloud agnostic @vitalethomas

Slide 38

Slide 38 text

“Something a bit different than what today’s world is trying to offer - LESS tools!” @vitalethomas What does Developer Experience mean to you?

Slide 39

Slide 39 text

Capabilities over responsibilities @vitalethomas

Slide 40

Slide 40 text

Developer @vitalethomas

Slide 41

Slide 41 text

Developer Platform @vitalethomas

Slide 42

Slide 42 text

Developer Platform @vitalethomas

Slide 43

Slide 43 text

Cartographer @vitalethomas

Slide 44

Slide 44 text

Delivering Value From code to production Developer Production Application Operator Security Expert Platform Engineer @vitalethomas

Slide 45

Slide 45 text

“Something a bit different than what today’s world is trying to offer - LESS tools!” @vitalethomas “Let developers be professionals and do what they do best. Let them be proud of their work!” What does Developer Experience mean to you?

Slide 46

Slide 46 text

Kubernetes Native Choreographer Framework to build paved paths to production @vitalethomas

Slide 47

Slide 47 text

Workload API Developer-friendly interface @vitalethomas apiVersion: carto.run/v1alpha1 kind: Workload metadata: name: band-service labels: apps.kadras.io/workload-type: web spec: source: git: url: https://github.com/ThomasVitale/band-service ref: branch: main

Slide 48

Slide 48 text

Watch Source Code Testing Build Con fi guration Deployment @vitalethomas

Slide 49

Slide 49 text

cartographer.sh

Slide 50

Slide 50 text

Goals 2 Reduced cognitive load 3 Clear and safe path to production 1 Rapid and continuous feedback loop @vitalethomas

Slide 51

Slide 51 text

Backstage @vitalethomas

Slide 52

Slide 52 text

backstage.io

Slide 53

Slide 53 text

DevPod @vitalethomas

Slide 54

Slide 54 text

devpod.sh

Slide 55

Slide 55 text

Resources @vitalethomas

Slide 56

Slide 56 text

Resources • Presentation source code • Kadras: Cloud Native Platforms Toolkit • Cloud Native Buildpacks for ARM64 • Software Supply Chain Choreography • Cartographer • Cartographer CLI • Knative and Spring: Bringing back the func • Tanzu Application Platform @vitalethomas

Slide 57

Slide 57 text

https://github.com/ThomasVitale/awesome-spring

Slide 58

Slide 58 text

Thomas Vitale Spring I/O May 19th, 2023 Developer Experience With Spring Boot on Kubernetes @vitalethomas