Aleksandr Kalikov

Microservices: how to get started with Spring Boot and Kubernetes

A rolling update begins, but requests start failing. Learn how a preStop hook and graceful shutdown can save your microservices from this common race condition.

Microservices: how to get started with Spring Boot and Kubernetes
#1about 4 minutes

Understanding the complexity of microservice adoption

Microservices offer scalability but introduce significant complexity in distributed systems, requiring higher engineering expertise to manage.

#2about 6 minutes

Selecting a container orchestration and local environment tool

A comparison of orchestration tools like Kubernetes, Mesos, and Nomad leads to choosing Kubernetes for its maturity and Minikube for a developer-friendly local setup.

#3about 1 minute

Choosing a familiar Java framework for microservices

Spring Boot is selected over alternatives like Micronaut or Quarkus due to existing team familiarity and a wider talent pool, reducing initial adoption risks.

#4about 8 minutes

Building and containerizing a Spring Boot application

A new Spring Boot application is created, packaged as a fat JAR, and then containerized using a multi-stage Dockerfile that leverages Spring Boot's layered JARs for efficient image builds.

#5about 6 minutes

Deploying a containerized application to Kubernetes

The application is deployed to a local Minikube cluster by defining essential Kubernetes objects like Deployments, Services, and Ingress controllers in YAML files.

#6about 4 minutes

Externalizing configuration with Kubernetes ConfigMaps

Application properties are externalized using Kubernetes ConfigMaps, which are accessed by the Spring Boot service via the Spring Cloud Kubernetes library and appropriate RBAC permissions.

#7about 13 minutes

Implementing observability with Prometheus and Grafana

Observability is added by integrating Spring Boot Actuator and Micrometer to expose metrics, which are then scraped by Prometheus and visualized in a Grafana dashboard.

#8about 1 minute

Configuring JVM memory for containerized applications

To prevent out-of-memory errors, JVM memory settings like heap percentage and metaspace size are explicitly configured in the Kubernetes deployment to respect container resource limits.

#9about 3 minutes

Setting up Kubernetes health and readiness probes

Kubernetes liveness, readiness, and startup probes are configured using Spring Boot Actuator's health endpoints to automate application health monitoring and traffic management.

#10about 11 minutes

Ensuring graceful shutdown during rolling updates

A combination of Spring Boot's graceful shutdown feature and a Kubernetes preStop hook is used to prevent dropped requests during rolling deployments by allowing network changes to propagate before the pod terminates.

#11about 6 minutes

Security best practices for containers and Kubernetes

Key security practices include scanning Docker images for vulnerabilities, using minimal base images, and configuring Kubernetes with least-privilege principles to reduce the attack surface.

Related jobs
Jobs that call for the skills explored in this talk.

Software Engineer

tree-IT GmbH
Bad Neustadt an der Saale, Germany

Remote
Intermediate
Senior

Featured Partners

From learning to earning

Jobs that call for the skills explored in this talk.