Principles and patterns for building cloud native application using Spring Boot, containerizing them with Cloud Native Buildpacks, and deploying them on a Kubernetes cluster through a GitOps workflow.
Thomas Vitale @vitalethomas thomasvitale.comCloud NativeWith Spring Boot and KubernetesSystematic - 10/02/2021systematic.com
View Slide
Thomas Vitale• Senior Software Engineer atSystematic, Denmark.• Spring, Cloud Native, DevOps,Application Security.• Author of “Cloud Native Spring inAction - With Spring Boot andKubernetes” (Manning).About Me
Why Cloud Native?@SystematicGroup @vitalethomas
The Three P’s of Cloud Native ApplicationsPlacePrivate CloudPublic CloudHybrid CloudPropertiesScalabilityLoose CouplingResilienceManageabilityObservabilitySecurityPracticesAutomationContinuous DeliveryDevOps@SystematicGroup @vitalethomas
The GoalsSpeedFaster andflexible deliveryCostEfficiency and cost optimisationScaleElasticity and dynamic scalingResilienceAvailability and stability@SystematicGroup @vitalethomas
1. Application Server@SystematicGroup @vitalethomas
2 Embedded server3 Imperative vs. Reactive@SystematicGroup @vitalethomas1 “Make JAR, not WAR” (Josh Long)
@SystematicGroup @vitalethomasEmbedded Server + JAR PackagingEmbedded ServerBlocking + Servlet API(Tomcat, Undertow, Jetty)Spring WebEmbedded ServerNon-Blocking + Project Reactor(Netty)Spring WebFluxServerlessFunctions(AWS, Azure, GCP, Knative)Spring Cloud Functions
DemoEmbedded Server + JAR Packaginghttps://github.com/ThomasVitale/cloud-native-spring-webinar-feb-2021@SystematicGroup @vitalethomas
2. Containerization@SystematicGroup @vitalethomas
1 Don’t use fat JARs2 Optimize build/runtime performance3 Don’t run as root or include secrets@SystematicGroup @vitalethomas
Containerize Spring Boot Applications@SystematicGroup @vitalethomasDockerfilesCloud Native BuildpacksJib
DemoContainerizing Spring Boothttps://github.com/ThomasVitale/cloud-native-spring-webinar-feb-2021@SystematicGroup @vitalethomas
3. Kubernetes Deployment@SystematicGroup @vitalethomas
1 Define a Namespace manifest2 Define a Deployment manifest3 Define a Service manifest@SystematicGroup @vitalethomas
DemoKubernetes Deploymenthttps://github.com/ThomasVitale/cloud-native-spring-webinar-feb-2021@SystematicGroup @vitalethomas
4. Application Lifecycle@SystematicGroup @vitalethomas
123Fast start-up, graceful shutdownLiveness and readiness probesStateless and horizontally scalable@SystematicGroup @vitalethomas
Liveness and Readiness ProbesApplicationALIVE?READY?NONORestart might helpRestart won’t help@SystematicGroup @vitalethomas
DemoApplication Lifecyclehttps://github.com/ThomasVitale/cloud-native-spring-webinar-feb-2021@SystematicGroup @vitalethomas
5. Configuration@SystematicGroup @vitalethomas
Code, Configuration, CredentialsCodeConfiguration DeployCredentials@SystematicGroup @vitalethomas
Configuration StrategiesSpring Boot PropertiesPropertyfilesCommand line argumentsEnvironment variablesConfiguration ServicesSpring Cloud Config ServerSpring Cloud Consul ConfigSpring Cloud VaultSpring Cloud Zookeeper ConfigCloud Platform ServicesSpring Cloud AlibabaSpring Cloud AWSSpring Cloud AzureSpring Cloud GCPKubernetes PlatformConfigMapsSecretsEnvironment Variables@SystematicGroup @vitalethomas
DemoConfigurationhttps://github.com/ThomasVitale/cloud-native-spring-webinar-feb-2021@SystematicGroup @vitalethomas
Bonus: GitOps@SystematicGroup @vitalethomas
GitOps - Cloud Native Operationshttps://www.weave.works/technologies/gitops/
DemoGitOpshttps://github.com/ThomasVitale/cloud-native-spring-webinar-feb-2021@SystematicGroup @vitalethomas
GitOps - Configurationhelm upgrade -i flux fluxcd/flux \--set git.user=$GITHUB_USER \--set [email protected] \--set [email protected]:$GITHUB_USER/cloud-native-spring-webinar-feb-2021 \--set git.path="deployment" \--set git.branch="main" \--namespace flux@SystematicGroup @vitalethomas
What’s next?@SystematicGroup @vitalethomas
II. DependencymanagementI. One codebase, oneapplicationIII. Configuration,credentials, and codeV. Design, build,release, runIV. Backing servicesVI. StatelessprocessesVIII. ConcurrencyVII. Port binding IX. DisposabilityXI. LogsX. EnvironmentparityXII. AdministrativeprocessesXIV. TelemetryXIII. APIfirstXV. Authenticationand authorizationBeyond 12-Factors
More Spring and KubernetesResilienceResilience4JSpring Cloud Circuit BreakerDistributed systemsSpring Cloud GatewaySpring Cloud StreamSpring Security OAuthReactiveSpring WebFluxR2DBCProject ReactorKubernetesSpring BootSpring Cloud KubernetesSkaffold@SystematicGroup @vitalethomas
With Spring Boot and Kubernetes• 35% discount code, valid forall products in all format• mtpsystematic21• mng.bz/8N5DCloud Native Spring in Actionwww.thomasvitale.com @vitalethomas