SlideShare a Scribd company logo
J4K 2020 One K8s ◆ One Java ◆ All Clouds
www.j4k.io
Quarkus -
Top 10 Kubernetes Features
John Clingan
Sr Principal Product Manager, Red Hat
MicroProfile Co-Founder and Committer
All around nice guy
@jclingan
www.j4k.io
Agenda
Quarkus in a Nutshell
Top 10 Kubernetes Features
www.j4k.io
Quarkus in a Nutshell
Java Runtime
Support standards and best of breed frameworks
www.j4k.io
Quarkus in a Nutshell
Developer Joy
www.j4k.io
Quarkus in a Nutshell
Unifies imperative and reactive
www.j4k.io
Quarkus in a Nutshell
Container First
www.j4k.io
1) One-step Kubernetes Deployment
● Deploys application to Kubernetes (and OpenShift )
● Generates deployment YAML for target Kubernetes environment
○ Customizes deployment YAML
■ Creates Service, ServiceAccount, RoleBinding
○ Add quarkus-kubernetes dependency
■ Add quarkus-kubernetes-minikube dependency for minikube customizations
■ Add quarkus-kubernetes-openshift dependency for openshift customizations
○ Add image-builder dependency
■ Add quarkus-container image docker
● Customize generated YAML (and JSON) using properties
● Deploy
mvn clean install -Dquarkus.kubernetes.deploy=true
www.j4k.io
2) Live Coding in Kubernetes
● Add quarkus-kubernetes extension dependency
● Configure remote development
quarkus.package.type=mutable-jar
quarkus.live-reload.password=abc123
quarkus.kubernetes.env.vars.QUARKUS_LAUNCH_DEVMODE=true
● Deploy to Kubernetes
mvn clean install -Dquarkus.kubernetes.deploy=true
● Start quarkus in remote-dev mode
mvn quarkus:remote-dev -Dquarkus.live-reload.url=<url>
www.j4k.io
3) Direct ConfigMap and Secrets Access
● Reads properties from a Kubernetes ConfigMap
● Overrides values in application.properties
● Usage:
○ Add quarkus-kubernetes-config extension to
dependencies
○ quarkus.kubernetes-config.enabled=true
○ quarkus.kubernetes-config.config-maps=map1,map2,...
○ quarkus.kubernetes-config.secrets.enabled=true
○ quarkus.kubernetes-config.secrets=secret1,secret2
Kubernetes Cluster
Master Node
Etcd API Server
Worker Node
app.jar
www.j4k.io
4) Health Endpoints
● Expose application availability and status
● Create custom application health checks
● Built-in health status for "client" extensions
○ Amazon services, Kafka, JMS, JDBC datasources,
○ Reactive SQL clients, Mongodb, Neo4j, Vault, gRPC
○ Elasticsearch, Redis, Cassandra
● Most built-in health checks are enabled by default
● Usage: Add quarkus-smallrye-health extension
www.j4k.io
5) Kubernetes Client
● Interact with Kubernetes API server / cluster using Fabric8 Kubernetes client
● CRUD Kubernetes objects
● Useful to create Kubernetes Operators in Java instead of Go
● Usage:
○ Add quarkus-kubernetes-client dependency
www.j4k.io
6) OpenMetrics Support
● Expose application metrics for external collection and monitoring
● Supports MicroProfile Metrics
○ Application Metrics, vendor metrics, JVM/system metrics
● New! Micrometer metrics extension
● Many Quarkus extensions provide their own metrics
○ Most disabled by default for performance; see extension guide for property enable
● Quarkus Grafana dashboard generator: http://quarkusdemos.net/
● Usage: Add quarkus-smallrye-metrics (or micrometer metrics) extension
www.j4k.io
7) OpenTracing Support
● Trace flow across service boundaries
● Supports MicroProfile OpenTracing
○ JAX-RS and MicroProfile Rest Client support
● No code
○ Optional: @Traced annotation to enable/disable class/method tracing
● Usage: Add quarkus-smallrye-opentracing extension
○ quarkus.jaeger.service-name=j4k
○ quarkus.jaeger.sampler-type=const
○ quarkus.jaeger.sampler-param=1
○ quarkus.kubernetes.annotations."sidecar.jaegertracing.io/inject"=true
www.j4k.io
8) One-step Knative Deployment
● Kubernetes extensions to deploy and manage serverless workloads
○ Knative Serving - autoscaling, scaling to zero
○ Knative Eventing - Universal delivery and management of events
● Usage
○ Add quarkus-kubernetes extension
○ quarkus.kubernetes.deployment-target=knative
www.j4k.io
9) Functions as a Service (Funqy)
● Portable Java API to write functions deployable to various FaaS environments
○ AWS Lambda
○ Azure Functions
○ Google Cloud Functions
○ Knative, CloudEvents
○ Standalone
● Usage
○ Add @Funq annotation to a method
○ Add quarkus-funqy-[binding] extension
○ quarkus.kubernetes.deployment-target=knative
www.j4k.io
10a) Efficiency: Fast Startup Time
www.j4k.io
10b) Efficiency: Low Memory Utilization
www.j4k.io
Source available at github.com/jclingan/quarkus-kube-top10
J4K 2020 One K8s ◆ One Java ◆ All Clouds
www.j4k.io
@j4kio
FOLLOW US ON
www.linkedin.com/ company / j4k /
www.facebook.com / j4kio /
The End

More Related Content

Top 10 Kubernetes Native Java Quarkus Features

  • 1. J4K 2020 One K8s ◆ One Java ◆ All Clouds www.j4k.io Quarkus - Top 10 Kubernetes Features John Clingan Sr Principal Product Manager, Red Hat MicroProfile Co-Founder and Committer All around nice guy @jclingan
  • 2. www.j4k.io Agenda Quarkus in a Nutshell Top 10 Kubernetes Features
  • 3. www.j4k.io Quarkus in a Nutshell Java Runtime Support standards and best of breed frameworks
  • 4. www.j4k.io Quarkus in a Nutshell Developer Joy
  • 5. www.j4k.io Quarkus in a Nutshell Unifies imperative and reactive
  • 6. www.j4k.io Quarkus in a Nutshell Container First
  • 7. www.j4k.io 1) One-step Kubernetes Deployment ● Deploys application to Kubernetes (and OpenShift ) ● Generates deployment YAML for target Kubernetes environment ○ Customizes deployment YAML ■ Creates Service, ServiceAccount, RoleBinding ○ Add quarkus-kubernetes dependency ■ Add quarkus-kubernetes-minikube dependency for minikube customizations ■ Add quarkus-kubernetes-openshift dependency for openshift customizations ○ Add image-builder dependency ■ Add quarkus-container image docker ● Customize generated YAML (and JSON) using properties ● Deploy mvn clean install -Dquarkus.kubernetes.deploy=true
  • 8. www.j4k.io 2) Live Coding in Kubernetes ● Add quarkus-kubernetes extension dependency ● Configure remote development quarkus.package.type=mutable-jar quarkus.live-reload.password=abc123 quarkus.kubernetes.env.vars.QUARKUS_LAUNCH_DEVMODE=true ● Deploy to Kubernetes mvn clean install -Dquarkus.kubernetes.deploy=true ● Start quarkus in remote-dev mode mvn quarkus:remote-dev -Dquarkus.live-reload.url=<url>
  • 9. www.j4k.io 3) Direct ConfigMap and Secrets Access ● Reads properties from a Kubernetes ConfigMap ● Overrides values in application.properties ● Usage: ○ Add quarkus-kubernetes-config extension to dependencies ○ quarkus.kubernetes-config.enabled=true ○ quarkus.kubernetes-config.config-maps=map1,map2,... ○ quarkus.kubernetes-config.secrets.enabled=true ○ quarkus.kubernetes-config.secrets=secret1,secret2 Kubernetes Cluster Master Node Etcd API Server Worker Node app.jar
  • 10. www.j4k.io 4) Health Endpoints ● Expose application availability and status ● Create custom application health checks ● Built-in health status for "client" extensions ○ Amazon services, Kafka, JMS, JDBC datasources, ○ Reactive SQL clients, Mongodb, Neo4j, Vault, gRPC ○ Elasticsearch, Redis, Cassandra ● Most built-in health checks are enabled by default ● Usage: Add quarkus-smallrye-health extension
  • 11. www.j4k.io 5) Kubernetes Client ● Interact with Kubernetes API server / cluster using Fabric8 Kubernetes client ● CRUD Kubernetes objects ● Useful to create Kubernetes Operators in Java instead of Go ● Usage: ○ Add quarkus-kubernetes-client dependency
  • 12. www.j4k.io 6) OpenMetrics Support ● Expose application metrics for external collection and monitoring ● Supports MicroProfile Metrics ○ Application Metrics, vendor metrics, JVM/system metrics ● New! Micrometer metrics extension ● Many Quarkus extensions provide their own metrics ○ Most disabled by default for performance; see extension guide for property enable ● Quarkus Grafana dashboard generator: http://quarkusdemos.net/ ● Usage: Add quarkus-smallrye-metrics (or micrometer metrics) extension
  • 13. www.j4k.io 7) OpenTracing Support ● Trace flow across service boundaries ● Supports MicroProfile OpenTracing ○ JAX-RS and MicroProfile Rest Client support ● No code ○ Optional: @Traced annotation to enable/disable class/method tracing ● Usage: Add quarkus-smallrye-opentracing extension ○ quarkus.jaeger.service-name=j4k ○ quarkus.jaeger.sampler-type=const ○ quarkus.jaeger.sampler-param=1 ○ quarkus.kubernetes.annotations."sidecar.jaegertracing.io/inject"=true
  • 14. www.j4k.io 8) One-step Knative Deployment ● Kubernetes extensions to deploy and manage serverless workloads ○ Knative Serving - autoscaling, scaling to zero ○ Knative Eventing - Universal delivery and management of events ● Usage ○ Add quarkus-kubernetes extension ○ quarkus.kubernetes.deployment-target=knative
  • 15. www.j4k.io 9) Functions as a Service (Funqy) ● Portable Java API to write functions deployable to various FaaS environments ○ AWS Lambda ○ Azure Functions ○ Google Cloud Functions ○ Knative, CloudEvents ○ Standalone ● Usage ○ Add @Funq annotation to a method ○ Add quarkus-funqy-[binding] extension ○ quarkus.kubernetes.deployment-target=knative
  • 17. www.j4k.io 10b) Efficiency: Low Memory Utilization
  • 18. www.j4k.io Source available at github.com/jclingan/quarkus-kube-top10
  • 19. J4K 2020 One K8s ◆ One Java ◆ All Clouds www.j4k.io @j4kio FOLLOW US ON www.linkedin.com/ company / j4k / www.facebook.com / j4kio / The End