In Cloud Native Diary, I weekly (...ish) share my journey working with application development, platform engineering, and cloud native technologies.
So much has happened in the past few months. Many conferences about cloud native and Java, open-source contributions, Spring Boot, developer productivity tooling, and more. Let's get to it!
Developer Productivity Tooling
Since my last Cloud Native Diary update, I published an article about installing and configuring Podman Desktop for Java Development. Josh Long mentioned it in his blog series This Week in Spring and This Month in Spring. The article was also included in the Weekend Reading List #181 by Rodrigo Graciano.
Podman is a solution to manage containers, pods, and images in a container or Kubernetes environment. It complies with OCI standards and can be used as an alternative to Docker. Podman Desktop is a convenient GUI on top of Podman to simplify container management across different operating systems and runtimes, including Kubernetes.
Both Podman and Podman Desktop are fully open-source and free to use. They are part of a broader set of container tools backed by an active community and supported by Red Hat.
I've been using Podman Desktop for several months as my primary container management solution on my macOS and Windows machines. Seeing how fast it is evolving and improving is fantastic, and I can't recommend it enough! I use it not only for application development but also for running local Kubernetes clusters. Next, I plan to experiment with the extension framework in Podman Desktop and implement an extension myself to run my own engineering platform locally by clicking a button.
Another project that quickly caught my attention and won a spot in my personal toolbox is DevPod, a solution to manage remote environments that has been developed and open-sourced by Loft Labs. Based on the development containers specification (the same used by GitHub Codespaces), you can use DevPod to spin up a remote environment on your local container runtime (Podman or Desktop), in the cloud, or on Kubernetes. Out of the box, it supports Visual Studio Code and Jetbrains' IDEs, such as IntelliJ and GoLand.
I'm a big fan of Testcontainers, an open-source framework for running ephemeral containers as part of your development workflows or integration tests. The company behind the project, AtomicJar, has announced the donation of the Testcontainers Cloud desktop client to the community for free, making it even easier and convenient to work with Testcontainers. Check out the project website to learn how to install the desktop client and what new features are supported.
Maersk Dev Hangout
Maersk, the international shipping company, has a vibrant and active Java community. I was invited to join one of their Dev Hangouts in the Copenhagen headquarters and speak about "Observability and Efficiency with Spring Boot 3" (slides, source code).
I talked about some of the new features in Spring Boot 3.1, including support for Testcontainers and Docker Compose at development time. I also presented the new observability features based on Micrometer and the recent improvements for reactive applications. Finally, I demonstrated the new built-in support in Spring Boot for GraalVM and native executables.
It was interesting to hear about Maersk's experience in adopting a reactive-first approach with Spring Boot and how to embrace it at scale across the organization.
Devoxx UK celebrated its 10th edition this year, and I was happy to be part of it and meet with the amazing Java community in London. My presentation was "Developer Experience with Java on Kubernetes" (video, slides, source code). I demonstrated how to use tools like Buildpacks, Tilt, Knative, and Cartographer to improve the developer experience. But tools are not enough. We need the right processes in place and a proper organization supporting that.
I had the pleasure to attend Spring I/O again this year and join the celebrations for the 10th anniversary. Sergi Almar organized another fantastic edition! It's always great to catch up with old friends and meet new ones. I had the chance to engage in enlightening conversations with the community, the Spring team, and the Tanzu team about tools like Carvel, Kpack, and Cartographer.
Like last year, I had two presentations. The first was "Multitenant Mystery: Only Rockers In The Building" (video, slides, source code). I discussed strategies and best practices for building multitenant applications using Java, Spring Boot, Micrometer, and Keycloak. I've been sitting on this subject for a while since I thought it might be too niche for a conference, but I finally decided to bring it up this year. And the result was surprisingly good. The room was packed, and I got many questions, follow-ups, and interesting conversations after my presentation. I'm happy about the positive feedback!
I also closed the conference with one last presentation: "Developer Experience with Spring Boot on Kubernetes" (video, slides, source code) in the auditorium. I explained what developer experience is, going beyond the buzzword. I demonstrated how to improve the developer experience using tools like Buildpacks, Knative, Tilt, Cartographer, and DevPod.
My presentation was "Next-Generation Cloud Native Apps with Spring Boot 3" (slides, source code). I talked about all the latest and greatest features in Spring Boot 3.1, including the GraalVM built-in support, using Testcontainers and Docker Compose for development services, and observability with Micrometer. I also taught a full-day workshop expanding on these topics.
In the context of the conference, I was asked to host an episode of the GOTO Book Club and talk with Mauricio Salatino about his book "Platform Engineering on Kubernetes" (video). We had an interesting conversation about cloud native technologies, Kubernetes, platforms, and open source
In July, I was back in Barcelona for DevBcn, the evolution of the JBCNConf I attended for the past couple of years. It was great to catch up with friends and meet new ones. My presentation was "Serverless Java with Spring Boot" (slides, source code). I talked about five main themes usually relevant for serverless architectures: no infrastructure, scale from zero, functional programming paradigm, triggering functions, and events.
I very much enjoyed the Kubernetes Community Days Munich. Unique community vibes, exciting presentations, great people, and outstanding organization. My presentation was "Supercharge your Kubernetes Platform with Carvel" (slides, source code). I discussed the Carvel suite of tools and how they can help build and package capabilities for cloud native platforms.
Open Source Projects
On the open-source front, I was glad to see the new release of kpack, including my changes that added support for Cosign v2. When using kpack, you can now package applications as OCI images and sign them using the new certificate format introduced in Cosign v2.
I was also happy to see that the kpack donation by VMware to the Cloud Native Buildpacks has been accepted. The kpack project is now part of the Buildpacks community.
I've been experimenting with new ways to establish testing best practices when working with Carvel packages and identifying good conventions for standardizing how to add policies and dashboards. I'm also working on a series of articles going through the entire process of packaging capabilities in a Kubernetes-native way and building a composable cloud native platform, expanding on what I presented at KCD Munich.
Finally, I'm working on an RFC to improve the supply chain security posture of the Carvel tools regarding signatures and SLSA attestations. Stay tuned!
Cloud Native Spring in Action
My book "Cloud Native Spring in Action" keeps doing really well, and I'm so happy about it! I got more positive feedback through different channels and a full review by Saeed Zarinfam. Thanks a lot, Saeed!
I joined the team organizing the first Kubernetes Community Days Denmark. The conference will be in Aarhus on November 14th. The call for proposals opens on August 1st. All the profits from KCD Denmark will go to Coding Pirates, an organization dedicated to empowering kids through coding. Stay tuned for more information!