Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Efficient DevOps Tooling with Java and GraalVM

Efficient DevOps Tooling with Java and GraalVM

Ops tooling has so far been the domain of shell scripts, interpreted languages like Python or statically compile languages like Go. But with the advent of GraalVM this situation has changed significantly. So behold: it is now possible to apply the power of the Java language and its ecosystem to your DevOps tooling problems and yet get optimal performance and efficiency by using GraalVM native images. In this session we will show that versatile 12-Factor CLI tools and powerful Kubernetes operators can be implemented in Java super easy in no time.

M.-Leander Reimer

October 29, 2020
Tweet

More Decks by M.-Leander Reimer

Other Decks in Programming

Transcript

  1. Efficient DevOps Tooling with Java and GraalVM JCON2020 # www.jcon.one

    Mario-Leander Reimer Principal Software Architect, QAware GmbH Our Partners 2020:
  2. // JCON 2020 // Efficient DevOps Tooling with Java and

    GraalVM // @LeanderReimer #cloudnativenerd #qaware #JCON2020 How do you organise and enable DevOps teams for fast flow and high productivity? 3
  3. // JCON 2020 // Efficient DevOps Tooling with Java and

    GraalVM // @LeanderReimer #cloudnativenerd #qaware #JCON2020 Too much cognitive load will become a bottleneck for fast flow and high productivity. • Instrinsic Cognitive Load - relates to fundamental aspects and knowledge in the problem space (e.g. used languages, APIs, frameworks) • Extraneous Cognitive Load - relates to the environment (e.g. deployment, configuration, console commands) • Germane Cognitive Load - relates to specific aspects of the business domain (aka. „value added“ thinking) 4 https://teamtopologies.com
  4. // JCON 2020 // Efficient DevOps Tooling with Java and

    GraalVM // @LeanderReimer #cloudnativenerd #qaware #JCON2020 Eliminate extraneous cognitive load Minimize intrinsic cognitive load 5
  5. // JCON 2020 // Efficient DevOps Tooling with Java and

    GraalVM // @LeanderReimer #cloudnativenerd #qaware #JCON2020 6
  6. // JCON 2020 // Efficient DevOps Tooling with Java and

    GraalVM // @LeanderReimer #cloudnativenerd #qaware #JCON2020 Use the right language for the job!? 7 Getty Images Liliboas Ansible Shell Scripts Ruby Python
  7. // JCON 2020 // Efficient DevOps Tooling with Java and

    GraalVM // @LeanderReimer #cloudnativenerd #qaware #JCON2020 8
  8. // JCON 2020 // Efficient DevOps Tooling with Java and

    GraalVM // @LeanderReimer #cloudnativenerd #qaware #JCON2020 GraalVM to the Rescue! 9
  9. // JCON 2020 // Efficient DevOps Tooling with Java and

    GraalVM // @LeanderReimer #cloudnativenerd #qaware #JCON2020 GraalVM in a Nutshell • Polyglot Runtime: runs all JVM languages, R, JavaScript, NodeJS, Ruby, Python, C/C++ via LLVM with full interop • Ahead-of-time (AOT) Compilation: memory management, thread scheduling via SubstrateVM • GraalVM as a Platform: embed and extend GraalVM with Truffle, implement your own language and tools 10
  10. // JCON 2020 // Efficient DevOps Tooling with Java and

    GraalVM // @LeanderReimer #cloudnativenerd #qaware #JCON2020 Polyglot Mayhem • The Graal Polyglot API allows you to embed and use different languages with full bidirectional interop. • This is not the same as with the Java Scripting API (JSR 223)! 11 private static void helloPython(PolyglotMessage message) { try (Context context = Context.newBuilder().allowAllAccess(true).build()) { context.getPolyglotBindings().putMember("message", message); context.eval("python", "import polyglot\n" + "message = polyglot.import_value('message')\n" + "message['invocations'] += 1\n" + "print(message['text'])"); } }
  11. // JCON 2020 // Efficient DevOps Tooling with Java and

    GraalVM // @LeanderReimer #cloudnativenerd #qaware #JCON2020 The Swiss Army Knife of Operations. 12 CLIs - The Swiss Army Knife of Operations
  12. // JCON 2020 // Efficient DevOps Tooling with Java and

    GraalVM // @LeanderReimer #cloudnativenerd #qaware #JCON2020 The basics of 12-factor CLI apps • Great help is essential. What version am I on? • Prefer flags to positional arguments. • Mind the streams. stdout is for output, stderr is for messaging. • Handle things going wrong: error code, title, how to fix, URL, … • Be fancy: use colours, have shell completion. • Prompt if you can. • Be speedy. CLIs need to start fast. • Be clear about subcommands. 13 For complete list and info, read https://medium.com/@jdxcode/12-factor-cli-apps-dd3c227a0e46
  13. // JCON 2020 // Efficient DevOps Tooling with Java and

    GraalVM // @LeanderReimer #cloudnativenerd #qaware #JCON2020 Build CLIs with Picocli and GraalVM • Native DevOps tools, CLIs or sidecar containers can now also be build using Java! Golang is still cool. • Picoli is a small framework to easily build JVM command line apps. • Support for ANSI colors, tab completion, sub commands and other 12-factor CLI app principles • In-built support for GraalVM AOT compilation to native images via the ReflectionConfigGenerator utility. 14
  14. // JCON 2020 // Efficient DevOps Tooling with Java and

    GraalVM // @LeanderReimer #cloudnativenerd #qaware #JCON2020 Container Orchestration Patterns 16 Sidecar Container Extended Container Behaviour • Log Extraction / Reformatting (fluentd, file beat) • Scheduling (cron, quartz) Ambassador Container Proxy Communication • TLS Tunnel (ghostunnel, Istio) • Circuit Breaking (linked, Istio) • Request Monitoring (linked, Istio) Adapter Container Standardized Ops Interfaces • Monitoring (Prometheus) • Configuration (ConfigMaps, Secrets, …)
  15. // JCON 2020 // Efficient DevOps Tooling with Java and

    GraalVM // @LeanderReimer #cloudnativenerd #qaware #JCON2020 17 Operator. - Do stuff to my Kubernetes.
  16. // JCON 2020 // Efficient DevOps Tooling with Java and

    GraalVM // @LeanderReimer #cloudnativenerd #qaware #JCON2020 What are operators? • Operators are codified Ops procedures! • Operators are the path towards Zero-Ops. They enable auto-updating, self-monitoring and self-healing infrastructure and applications. • The concept was coined in the Kubernetes world. It’s now been adopted and used widespread in the cloud native world. • Examples: OKD, Sealed Secrets, Kube Monkey, Weave Flux 18
  17. // JCON 2020 // Efficient DevOps Tooling with Java and

    GraalVM // @LeanderReimer #cloudnativenerd #qaware #JCON2020 Kubernetes Operators in a Nutshell 19
  18. // JCON 2020 // Efficient DevOps Tooling with Java and

    GraalVM // @LeanderReimer #cloudnativenerd #qaware #JCON2020 The Kill Pod Operator 20 • Super simple Chaos monkey style operator inspired by Kubemonkey • Regularly kills pods of deployments that are killpod/enabled apiVersion: apps/v1 kind: Deployment metadata: name: nginx-killpod-enabled labels: killpod/enabled: "true" killpod/application: nginx-killpod-enabled killpod/delay: "30" killpod/amount: "2" spec: ...
  19. // JCON 2020 // Efficient DevOps Tooling with Java and

    GraalVM // @LeanderReimer #cloudnativenerd #qaware #JCON2020 The Super Secret Operator 21 • Apply asymmetrical encrypted secrets, the operator will decrypt and manage ordinary K8s secrets under the hood • Inspired by Sealed Secrets from Bitnami https://github.com/bitnami-labs/sealed-secrets apiVersion: operators.on.hands/v1alpha1 kind: SuperSecret metadata: name: supersecret-test spec: secretData: password: eV7YoQXyZlY+y51RWXEqyu0U44EPEPwEz+fZvGo+7McOTA4wQYCdxXMANtab3aW8 ... ywqpkHYtSLvrPgFnbcuSvD2UzuUNeE2qkh6SAM1z9Lpfwi+IUZjaY34Z+RjEL5OZFPYkQ==
  20. // JCON 2020 // Efficient DevOps Tooling with Java and

    GraalVM // @LeanderReimer #cloudnativenerd #qaware #JCON2020 The Microservice Operator 22 apiVersion: operators.on.hands/v1alpha1 kind: Microservice metadata: name: microservice-test labels: app: nginx spec: replicas: 2 image: nginx:1.17.6 ports: - containerPort: 80 serviceType: LoadBalancer • Abstracting the usual Deployment, Service and ConfigMap definitions using a simple and unified Microservice CRD
  21. Thank You ! JCON2020 # www.jcon.one Our Partners 2020: Mario-Leander

    Reimer Principal Software Architect, QAware GmbH [email protected] https://www.qaware.de https://speakerdeck.com/lreimer/ https://github.com/lreimer/