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

Developer Experience with Java on Kubernetes

Developer Experience with Java on Kubernetes

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 focuses on improving the inner development loop and continuous delivery on Kubernetes. The end goal is to deliver value continuously, quickly, and reliably.

First, I’ll present several techniques for working locally effectively and productively. Should you run Kubernetes in your development environment? I’ll cover a few different options. Using Java, 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, Tilt, Knative, 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 the GitOps principles, I’ll show you how to work with temporary environments created dynamically when a new pull request is opened.

Finally, we'll use Cartographer to glue together all these different tools and design a golden path to production on Kubernetes, providing a clear separation of concerns and letting developers focus on delivering value.

Thomas Vitale

May 10, 2023
Tweet

More Decks by Thomas Vitale

Other Decks in Technology

Transcript

  1. 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
  2. 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
  3. Developer Experience: Concept and De fi nition (F. Fagerholm, J.

    Münch) Developer Experience Conceptual Framework @vitalethomas
  4. Goals 2 Reduced cognitive load 3 Clear and safe path

    to production 1 Rapid and continuous feedback loop @vitalethomas
  5. From Traditional to Cloud Native Application Server, Embedded Server Runtime

    (JVM) Middleware (Application Server) Application (WAR/EAR) Runtime (JVM) Application (JAR) @vitalethomas
  6. 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
  7. 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
  8. 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
  9. Development on Kubernetes Spring Boot, Quarkus, Micronaut, Vert.x, OpenLiberty… Build

    k8sBuild Generate Manifests k8sResource @vitalethomas Apply Manifests k8sApply Watch k8sWatch
  10. 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
  11. 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
  12. Argo CD Continuous Deployment with GitOps @vitalethomas Developer App Repo

    Pull Request Sync changes Temporary Environment
  13. Serverless Architectures Developers focus on code Focus on business logic

    Developer Platform Infrastructure Provisioning Workload Management Dynamic Scaling @vitalethomas
  14. 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
  15. 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
  16. Goals 2 Reduced cognitive load 3 Clear and safe path

    to production 1 Rapid and continuous feedback loop @vitalethomas
  17. Resources Source code • 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 @vitalethomas