Slide 1

Slide 1 text

Kubernetes as a Streaming Data Platform A Federated Operator Approach Scala in the City Meetup - London, July 25, 2019 Gerard Maas Principal Engineer, Lightbend, Inc. @maasg

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

Gerard Maas Principal Engineer [email protected] @maasg https://github.com/maasg https://www.linkedin.com/ in/gerardmaas/ https://stackoverflow.com /users/764040/maasg

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

Self-Contained Immutable deployments Single Responsibility Principle: 1 Process/Container

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

The Operator Pattern The operator pattern is a way of packaging operational knowledge of an application and make it native to Kubernetes. Builds on the concepts of controllers and resources. OBSERVE EVALUATE ACT

Slide 14

Slide 14 text

Operators An operator is an application-specific controller that extends the Kubernetes API to create, configure, and manage instances of complex stateful applications on behalf of a Kubernetes user.

Slide 15

Slide 15 text

Operators in the Wild https://github.com/operator-framework/awesome-operators

Slide 16

Slide 16 text

$>demo(operators(kafka,spark))

Slide 17

Slide 17 text

Operators • Defines CustomResourceDefinitions (CRDs) to represent a custom resource. • CRDs make custom features native citizens in Kubernetes. • Custom Resources (CRs) streamlines the creation and management of the added functionality in a declarative way.

Slide 18

Slide 18 text

Example: Spark Operator Spark Operator [IMG] spark-job .yaml CR Operator Controller Spark Yaml-> spark-submit-params Spark-k8s-impl -> fabric8 -> k8s ./bin/spark-submit (params) --cluster Spark App Pod. [from spark-k8s-img] entrypoint.sh Spark Spark-k8s-impl -> fabric8 -> executors(k8s) ./bin/spark-submit (params) --client kubectl apply (* this goes first to the k8s controller. We are obviating that step) K8s-api :: create pod from image Spark Exec Pod. [from spark-k8s-img] Spark Spark Exec Pod. [from spark-k8s-img] Spark Spark Exec Pod. [from spark-k8s-img] Spark params= parse(cmd-line) ./bin/spark-submit (params)

Slide 19

Slide 19 text

Operator Federation

Slide 20

Slide 20 text

Spark Operator Spark Driver Spark submit monitor Executor pod Executor pod Executor pod submit, monitor Operator Federation: Achieving Higher Levels of Abstraction Topic Operator Kafka CRUD

Slide 21

Slide 21 text

Custom Operator Spark Operator Spark Driver Spark submit monitor Executor pod Executor pod Executor pod submit, monitor Operator Federation: Achieving Higher Levels of Abstraction Topic Operator Kafka CRUD

Slide 22

Slide 22 text

How Are We Using This Approach?

Slide 23

Slide 23 text

Develop Pipelines Development Lifecycle SBT Pipelines Components Platform Streamlets Streamlets Docker Repo Blueprint build&publishImage CLI > kubectl pipelines ... Runtime Pipelines Operator AkkaStreams Operator Spark Operator Kafka Operator UI Pipelines CRD CR

Slide 24

Slide 24 text

$>demo(pipeline(kafka,spark))

Slide 25

Slide 25 text

Pipelines Design Principles Blueprints Holistic view of the application Schema-driven Provide consistency across components sbt Assembles the pieces and generates meta-data cli Hook into kubectl for K8S-native interactions Operator Puts all the operational pieces together

Slide 26

Slide 26 text

Harnessing the power of existing Operators through a Custom Operator provides a scalable and composable way to transform Kubernetes into a __ platform.

Slide 27

Slide 27 text

lightbend.com Learn more Kafka Operator (Strimzi) webinar - https://www.youtube.com/watch?v=rzHQvImn2XY demo - https://www.youtube.com/watch?v=KEPB7iG5Fgc Website - https://strimzi.io/ Spark Operator Video - https://www.youtube.com/watch?v=SKXQwTItQf0 Github: https://github.com/GoogleCloudPlatform/spark-on-k8s-operator Pipelines Blog - https://www.lightbend.com/blog/pipelines

Slide 28

Slide 28 text

$>Ask(Questions)

Slide 29

Slide 29 text

Gerard Maas Principal Engineer [email protected] @maasg https://github.com/maasg https://www.linkedin.com/ in/gerardmaas/ https://stackoverflow.com /users/764040/maasg