10x Faster Spring Boot Startup Times

Spring Native Startup Performance

Applications based on spring-boot are not known for extremely fast startup times and low memory usage. Usually spring-boot application are meant for long running backend processes and we have learned to live with the startup time and higher memory usage. This is because leveraging spring-boot solves so many other problems for the developer and speeds up the overall development process. In other words, we are OK with more developer productivity at the cost of higher resource usage at runtime specially at application startup. [Read More]

k9s - My Favorite Kubernetes Tool

Kubernetes CLI To Manage Your Clusters In Style

If you work with Kubernetes clusters a lot, you are most probably used to typing a lot of kubectl commands. A while ago, I discovered k9s and it made working with Kubernetes clusters so much simpler. To quote the description directly from the k9s site: K9s is a terminal based UI to interact with your Kubernetes clusters Installing k9s is written in go-lang. The beauty of programs written in that language is that they are compiled down to a single binary with all the dependencies included. [Read More]

Kubernetes with Java - Handling Events

Handling Kubernetes API events in Java

This post is a continuation of Kubernetes with Java - Asynchronous APIs which showed us how to interact with the Kubernetes API to list deployment resources on demand. In this post, we will learn how to handle Kubernetes API events in near real-time. An example use case for this capability might be to send a notification to a slack channel whenever an app deployment is started or when it finishes and becomes ready to be consumed. [Read More]

Config Updates Without Redeployment for Spring and Kubernetes

Spring PropertySources and Kubernetes Configmaps

Here’s what you’ll accomplish by the end of this article: Create a small Spring Boot application that loads a property file from a configurable location overriding configuration that is packaged with the application. Package the application in a docker image and see how to override the config file via docker commands. Deploy the application to kubernetes. Use a Kubernetes Configmap to update your configuration without redeployment of your application. Learn about when using these methods together is recommended. [Read More]

Accelerate Your Deployment Velocity with Feature flags

Moving Beyond Environment Segmentation

Make Small Iterative Changes We wrote in How Many Deployments Amazon Does in a Day that your team is likely capable of deploying a million times in about 10 years with a little more than 55 engineers by making 2-3 changes per week per engineer to production. When you make that many changes per week, those changes likely aren’t complete features. Complete features may have hundreds of small iterative changes of that size with contributions from many people. [Read More]

Kubernetes with Java - Creating Images

Bundling your Java apps into OCI images to run under Kubernetes

Building production quality images for Java apps To run a spring-boot app on k8s, you need to create a container image. The images need to be in the Open Container Image format. In this article, we will review how to create OCI images two different ways: Using a Dockerfile Using Cloud Native Buildpacks Note: The Open Container Image (OCI) format antecedent of the Docker image format as a standard specification. [Read More]

You Can Match How Many Deployments Amazon Does in a Day

(Per Engineer)

Wonder how many deployments Amazon does in a day? In November 2014, Dr. Werner Vogels reported that Amazon achieves 50M deployments a year across their dev, test, and production environments. That’s 136k deployments per day or about 1.6 per second. His article describes the systems they created to automate deployment across their infrastructure. That is only one aspect of reaching that astronomical position. You also need a lot of engineers to reach that level of productivity. [Read More]

Kubernetes with Java - Running in the Cluster

Using Kubernetes API through a Java app from inside the Kubernetes cluster with RBAC

What are we going to do? This post builds on top of Kubernetes with Java - Introduction and Kubernetes with Java - Asynchronous APIs posts which showed us how to interact with the Kubernetes API to list deployment resources and provide an API of our own to list teams and apps belonging to those teams running in the cluster. In this post, we will Configure a spring-boot app to be able to access the Kubernetes API when running inside a Kubernetes cluster Learn how to package up a spring-boot app into an OCI image (aka Docker image) Configure RBAC with Role, RoleBinding, and ServiceAccount so our spring-boot app has the ability to run with only the Kubernetes APIs that we think it should have access to and nothing more Create Deployment and Service resources to deploy our spring-boot app and expose its API within the cluster Prerequisites Access to source code for the project - https://github. [Read More]

Kubernetes with Java - Asynchronous APIs

Choosing between synchronous and asynchronous Kubernetes API in Java

What are we going to do? This post builds on top of Kubernetes with Java - Introduction which relied on synchronous Kubernetes API to get information for apps runnings in Kubernetes cluster. In this post, we will Learn when to use synchronous and when to use asynchronous Kubernetes API mechanisms Learn how to use asynchronous Kubernetes API to exrtact deployments metadata How to use spring-boot profiles to conditionally enable functionality Synchronous vs asynchronous APIs Kubernetes API provides two mechanisms to consume information for the clients. [Read More]

Kubernetes with Java - Introduction

Getting started with the Kubernetes API client libraries for Java

What are we going to do? Learn how to initialize the k8s api client in a java spring-boot application Extract metadata from deployments in a namespace and transform that metadata into new views Prepare you for more sophisticated problem solving using the k8s API in future articles Motivation You have a few dozen different applications (as Kubernetes deployment resources) running in your cluster All of those applications use labels to designate the name of the team that manages that application, and the application name You want to provide APIs that: Lists all teams that have applications running in the cluster Lists all apps that belong to a team Scenario Assumption: you have minikube locally and you don’t already have a namespace called dev. [Read More]