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

Top 10 Kubernetes Native Java Quarkus Features

  • 1.
    J4K 2020 OneK8s ◆ 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 aNutshell Top 10 Kubernetes Features
  • 3.
    www.j4k.io Quarkus in aNutshell Java Runtime Support standards and best of breed frameworks
  • 4.
    www.j4k.io Quarkus in aNutshell Developer Joy
  • 5.
    www.j4k.io Quarkus in aNutshell Unifies imperative and reactive
  • 6.
    www.j4k.io Quarkus in aNutshell Container First
  • 7.
    www.j4k.io 1) One-step KubernetesDeployment ● 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 Codingin 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 ConfigMapand 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 KnativeDeployment ● 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 asa 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
  • 16.
  • 17.
  • 18.
    www.j4k.io Source available atgithub.com/jclingan/quarkus-kube-top10
  • 19.
    J4K 2020 OneK8s ◆ One Java ◆ All Clouds www.j4k.io @j4kio FOLLOW US ON www.linkedin.com/ company / j4k / www.facebook.com / j4kio / The End