Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Developer Experience with Java on Kubernetes (JBCNConf 2022)

Developer Experience with Java on Kubernetes (JBCNConf 2022)

In the cloud-native world, being a developer might be challenging. The number of technologies and patterns to know can be overwhelming. This session presents an approach based on open-source technologies and focused on improving the inner development loop and continuous delivery on Kubernetes. The end goal is delivering value continuously, quickly, and reliably.

First, I’ll present several techniques for working locally in an effective and productive way. Should you run Kubernetes in your development environment? I’ll cover a few different options. Using Java and Spring Boot, we’ll build a cloud native application following the principles of test-driven development. The inner development loop will be enhanced with Cloud Native Buildpacks, Skaffold, and Telepresence.

Continuous integration is a crucial practice for continuous delivery. We’ll check in code regularly, triggering an automated process to build, test, and package the application. Do you use pull requests? Relying on ArgoCD and Knative, I’ll show you how to work with temporary environments created dynamically when a new pull request is opened. Next, further acceptance tests will be carried on in a production-like environment to ensure the mainline is always in a releasable state. Finally, we’ll deploy and release the new changes to production following the GitOps principles.

Thomas Vitale

July 18, 2022
Tweet

More Decks by Thomas Vitale

Other Decks in Technology

Transcript

  1. Thomas Vitale
    JBCNConf
    Jul 18th, 2022
    Developer Experience
    With Java on Kubernetes
    @vitalethomas

    View full-size slide

  2. Systematic
    • Software Architect at
    Systematic, Denmark.

    • Author of “Cloud Native Spring
    in Action” (Manning).

    • Spring Security and Spring
    Cloud contributor.
    Thomas Vitale
    thomasvitale.com @vitalethomas

    View full-size slide

  3. Developer Experience
    #jbcn22 @vitalethomas

    View full-size slide

  4. #jbcn22 @vitalethomas
    Developer Experience
    “Top of mind for everyone”

    View full-size slide

  5. #jbcn22 @vitalethomas
    Developer Experience
    “Fast feedback loops”
    "Easiness of doing one’s job”
    “How quick I can be productive


    with a tool”
    “Happy developers create exceptional software


    in the log term”
    “It’s reduced time to find things,


    tools downtime”
    “Means to be flexible for new paradigms and be
    able to integrate many frameworks and tools”
    Your answers

    View full-size slide

  6. Developer Experience
    “…developer experience could be defined as a means for
    capturing how developers think and feel about their
    activities within their working environments,

    #jbcn22 @vitalethomas
    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)

    View full-size slide

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

    View full-size slide

  8. Value
    #jbcn22 @vitalethomas

    View full-size slide

  9. #jbcn22 @vitalethomas
    Developer Experience
    Tools are not enough
    ORGANIZATION
    PROCESSES
    TECHNOLOGY
    CULTURE

    View full-size slide

  10. #jbcn22 @vitalethomas
    Technologies
    Developer experience with Java on Kubernetes

    View full-size slide

  11. #jbcn22 @vitalethomas
    Team Topologies
    Organisational design for software

    View full-size slide

  12. #jbcn22 @vitalethomas
    Continuous Delivery
    Better software faster

    View full-size slide

  13. Development Workflow
    #jbcn22 @vitalethomas

    View full-size slide

  14. #jbcn22 @vitalethomas
    Development Workflow
    Inner Loop and Outer Loop
    Inner Loop
    ‣Code


    ‣Build


    ‣Deploy


    ‣Debug
    Outer Loop
    ‣CI/CD


    ‣Compliance, security


    ‣Con
    fi
    guration, monitoring


    ‣Production deployment
    git push

    View full-size slide

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

    View full-size slide

  16. Goals
    #jbcn22 @vitalethomas
    2 Reduced cognitive load
    3 Clear path to production
    1 Rapid and continuous feedback loop

    View full-size slide

  17. Cloud Native
    #jbcn22 @vitalethomas

    View full-size slide

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

    View full-size slide

  19. Containers
    #jbcn22 @vitalethomas

    View full-size slide

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

    View full-size slide

  21. Cloud Native Buildpacks
    #jbcn22 @vitalethomas

    View full-size slide

  22. Image
    #jbcn22 @vitalethomas
    pack build
    Cloud Native Buildpacks
    From source code to container image

    View full-size slide

  23. Kubernetes
    #jbcn22 @vitalethomas

    View full-size slide

  24. #jbcn22 @vitalethomas
    Moving to Kubernetes
    Application Server, Embedded Server, Container, Kubernetes
    Runtime (JVM)
    Middleware


    (Application Server)
    Application (WAR/EAR)
    Runtime (JVM)
    Application (JAR)
    Runtime (OCI)
    Application (Container)
    Runtime (OCI)
    Middleware


    (Kubernetes)
    Application (Container)

    View full-size slide

  25. Tilt
    #jbcn22 @vitalethomas

    View full-size slide

  26. Tilt
    Continuous development on Kubernetes
    #jbcn22 @vitalethomas

    View full-size slide

  27. Tilt
    Continuous development on Kubernetes
    #jbcn22 @vitalethomas

    View full-size slide

  28. Skaffold
    #jbcn22 @vitalethomas

    View full-size slide

  29. Skaffold
    Continuous development on Kubernetes
    #jbcn22 @vitalethomas

    View full-size slide

  30. Telepresence
    #jbcn22 @vitalethomas

    View full-size slide

  31. Telepresence
    Local-to-remote bridges for fast iterations
    #jbcn22 @vitalethomas

    View full-size slide

  32. Knative
    #jbcn22 @vitalethomas

    View full-size slide

  33. Knative
    Serverless experience on Kubernetes
    #jbcn22 @vitalethomas

    View full-size slide

  34. Serverless Architectures
    Developers focus on code
    Focus on business logic
    Developer
    Platform
    Infrastructure

    Provisioning
    Workload

    Management
    Dynamic

    Scaling
    #jbcn22 @vitalethomas

    View full-size slide

  35. 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
    #jbcn22 @vitalethomas

    View full-size slide

  36. Argo CD
    #jbcn22 @vitalethomas

    View full-size slide

  37. Argo CD
    Continuous Deployment with GitOps
    #jbcn22 @vitalethomas

    View full-size slide

  38. Cartographer
    #jbcn22 @vitalethomas

    View full-size slide

  39. Cartographer
    Golden paths to production
    #jbcn22 @vitalethomas

    View full-size slide

  40. Example: Minimal Path
    Source -> Image -> URL
    Deploy to
    Kubernetes
    Package as
    container image
    Checkout

    source code

    View full-size slide

  41. Delivering Value
    From code to production
    Developer
    App Repo Production
    Application


    Operator
    Security


    Expert
    Platform


    Engineer

    View full-size slide

  42. Resources
    #jbcn22 @vitalethomas

    View full-size slide

  43. Resources
    Source code
    • Presentation source code

    • The developer experience and the inner dev loop

    • Docker
    fi
    les vs. Cloud Native Buildpacks

    • Knative and Spring: Bringing back the func

    • Developer Work
    fl
    ow

    • Software Supply Chain Choreography
    #jbcn22 @vitalethomas

    View full-size slide

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

    View full-size slide

  45. Enlightning
    Learn cloud concepts with Whitney and her lightboard
    #jbcn22 @vitalethomas
    Tomorrow, 16:55

    View full-size slide

  46. Discount codes
    Manning
    • 35% discount code, valid for
    all products in all format

    • ctwjbcn22


    • manning.com
    thomasvitale.com @vitalethomas

    View full-size slide

  47. Thomas Vitale
    JBCNConf
    Jul 18th, 2022
    Developer Experience
    With Java on Kubernetes
    @vitalethomas

    View full-size slide