1
Kubernetes Serverless
With Knative, Tekton
Burr Sutter (burrsutter.com)
@burrsutter - bit.ly/serverlesskube
http://www.fanpop.com/clubs/bruce-lee/images/27605335/title/way-dragon-photo
http://gonewiththetwins.com/new/way-dragon-return-dragon-1972/
@burrsutter - bit.ly/serverlesskube
Burr Sutter (burrsutter.com)
@burrsutter
Labs
https://dn.dev/kube-tutorial (Alex)
https://dn.dev/istio-tutorial (Alex)
https://dn.dev/knative-tutorial (Kamesh, Sebi)
https://dn.dev/quarkus-tutorial (Sebi, Edson)
https://dn.dev/kafka-tutorial (Edson, Alex)
https://dn.dev/tekton-tutorial (Kamesh)
Learning Resources
@burrsutter
@burrsutter
Kubernetes Serverless with Knative
Kubernetes Basics
(9 Steps to Awesome)
Istio
(Enter the Service Mesh)
Knative
(Kubernetes Serverless)
Microservices
Serverless/PaaS
https://www.oreilly.com/live-training/
Control-F and search for "burr"
@burrsutter - bit.ly/serverlesskube
@burrsutter - bit.ly/serverlesskube
Exercise Setup
https://github.com/redhat-developer-demos/knative-tutorial
Testing/Demo Scripts
https://github.com/burrsutter/scripts-knative
@burrsutter - bit.ly/serverlesskube
Knative Tutorial Exercises (bit.ly/knative-tutorial)
@burrsutter - bit.ly/serverlesskube
Knative's Primary Components
Serving
Build
Eventing
X
Replaced by Tekton
@burrsutter - bit.ly/serverlesskube
Agenda
@burrsutter - bit.ly/serverlesskube
Are custom software Apps/APIs a key strategic advantage for your organization?
OR
Do you regard IT as a cost center that must be better streamlined?
@burrsutter - bit.ly/serverlesskube
Your Journey to Awesomeness
Self-Service,
On-Demand,
Elastic Infrastructure
Automation
CI & CD
Deployment Pipeline
Advanced
Deployment
Techniques
Microservices
Re-Org to
DevOps
@burrsutter - bit.ly/serverlesskube
We cannot solve our problems with the same thinking we used when we created them. �Albert Einstein �(Theoretical Physicist)
@burrsutter - bit.ly/serverlesskube
Monolith
MyApp
@burrsutter - bit.ly/serverlesskube
The Application
@burrsutter - bit.ly/serverlesskube
Modules
@burrsutter - bit.ly/serverlesskube
Microservices
@burrsutter - bit.ly/serverlesskube
Microservices
@burrsutter - bit.ly/serverlesskube
Microservices
@burrsutter - bit.ly/serverlesskube
Microservices
@burrsutter - bit.ly/serverlesskube
Network of Services
@burrsutter - bit.ly/serverlesskube
Microservices own their Data
@burrsutter - bit.ly/serverlesskube
Multiple Points of Entry
@burrsutter - bit.ly/serverlesskube
Teams & Pipelines
@burrsutter - bit.ly/serverlesskube
“Change is the essential process of all of existence.”��—Spock
@burrsutter - bit.ly/serverlesskube
Let there be Functions?
@burrsutter - bit.ly/serverlesskube
Love Thy Mono
Every 4 months Every week/day/hour
@burrsutter - bit.ly/serverlesskube
Serverless
@burrsutter - bit.ly/serverlesskube
Cloud Native Computing Foundation
“Serverless computing refers to the concept of building and running applications that do not require server management. It describes a finer-grained deployment model where applications, bundled as one or more functions, are uploaded to a platform and then executed, scaled, and billed in response to the exact demand needed at the moment.”
https://www.cncf.io/blog/2018/02/14/cncf-takes-first-step-towards-serverless-computing/
@burrsutter - bit.ly/serverlesskube
Serverless vs FaaS
'...are application designs that incorporate third-party “Backend as a Service” (BaaS) services, and/or that include custom code run in managed, ephemeral containers on a “Functions as a Service” (FaaS) platform'
�https://martinfowler.com/articles/serverless.html
'The survey defined FaaS as typically providing event-driven computing where developers run and manage application code with functions that are triggered by events'
@burrsutter - bit.ly/serverlesskube
Short History of Serverless
@burrsutter - bit.ly/serverlesskube
The first question is “is there a suitable service I can consume?” before “is there something I can buy and set up using a cloud provider?”.
@burrsutter - bit.ly/serverlesskube
It is Serverless�because of BaaS/SaaS
(managed by another party services).
@burrsutter - bit.ly/serverlesskube
It is all about the Services
@burrsutter - bit.ly/serverlesskube
HTTP Input/Output Service
API
Gateway�-as-a-�Service
@burrsutter - bit.ly/serverlesskube
Authentication Service
API
Gateway�-as-a-�Service
SSO-as-a-�Service
A
P
I
@burrsutter - bit.ly/serverlesskube
File Storage Service
Storage-as-a-Service
A
P
I
API
Gateway�-as-a-�Service
SSO-as-a-�Service
A
P
I
@burrsutter - bit.ly/serverlesskube
Data Services
Storage-as-a-Service
A
P
I
API
Gateway�-as-a-�Service
��Cache-as-a-�Service
API
DB-as-a-�Service
API
SSO-as-a-�Service
A
P
I
@burrsutter - bit.ly/serverlesskube
Connectivity Services
Storage-as-a-Service
A
P
I
API
Gateway�-as-a-�Service
Messaging�-as-a-�Service
A
P
I
��Cache-as-a-�Service
API
DB-as-a-�Service
API
Notifications�-as-a-�Service
A
P
I
A
P
I
SSO-as-a-�Service
A
P
I
@burrsutter - bit.ly/serverlesskube
Your Containerized Services
Storage-as-a-Service
A
P
I
API
Gateway�-as-a-�Service
My
Microservice
A
My
Microservice
B
My
Microservice
C
Messaging�-as-a-�Service
A
P
I
��Cache-as-a-�Service
API
DB-as-a-�Service
API
Notifications�-as-a-�Service
A
P
I
A
P
I
SSO-as-a-�Service
A
P
I
@burrsutter - bit.ly/serverlesskube
Event-Driven Input
Storage-as-a-Service
A
P
I
API
Gateway�-as-a-�Service
My
Microservice
A
Function
1
My
Microservice
B
My
Microservice
C
Function
2
Function
3
Function
4
Messaging�-as-a-�Service
A
P
I
��Cache-as-a-�Service
API
DB-as-a-�Service
API
Notifications�-as-a-�Service
A
P
I
A
P
I
SSO-as-a-�Service
A
P
I
Function
5
@burrsutter - bit.ly/serverlesskube
Event-Driven Output
Storage-as-a-Service
A
P
I
API
Gateway�-as-a-�Service
My
Microservice
A
Function
1
My
Microservice
B
My
Microservice
C
Function
2
Function
3
Function
7
Function
4
Function
6
Messaging�-as-a-�Service
A
P
I
��Cache-as-a-�Service
API
DB-as-a-�Service
API
Notifications�-as-a-�Service
A
P
I
A
P
I
SSO-as-a-�Service
A
P
I
Function
5
@burrsutter - bit.ly/serverlesskube
Synergy
Storage-as-a-Service
A
P
I
API
Gateway�-as-a-�Service
My
Microservice
A
Function
1
My
Microservice
B
My
Microservice
C
Function
2
Function
3
Function
7
Function
4
Function
6
Messaging�-as-a-�Service
A
P
I
��Cache-as-a-�Service
API
DB-as-a-�Service
API
Notifications�-as-a-�Service
A
P
I
A
P
I
SSO-as-a-�Service
A
P
I
Function
5
@burrsutter - bit.ly/serverlesskube
Microservices
Serverless
Functions
Your Control
Long-Lived Processes
Known Programming Model
Often Sync Request-Response
Mature:
IDE Integration
Debuggers
Tracers
Monitoring
CI/CD
Cloud Control
Short-Lived Processes
New Programming Model
Event-Driven Async
Immature:
?
@burrsutter - bit.ly/serverlesskube
Microservices
Serverless
Functions
Your Control
Long-Lived Processes
Known Programming Model
Often Sync Request-Response
Mature:
IDE Integration
Debuggers
Tracers
Monitoring
CI/CD
Cloud Control
Short-Lived Processes
New Programming Model
Event-Driven Async
Immature:
?
Knative
@burrsutter - bit.ly/serverlesskube
FaaS
@burrsutter - bit.ly/serverlesskube
FaaS Kubernetes Players
@burrsutter - bit.ly/serverlesskube
Kubernetes/OpenShift
Review
mvn package
docker build
kubectl apply -f deploy.yml
kubectl apply -f service.yml
@burrsutter - bit.ly/serverlesskube
Knative
https://github.com/knative
@burrsutter - bit.ly/serverlesskube
Knative Announced July 24 2018
@burrsutter - bit.ly/serverlesskube
FaaS Kubernetes Players
Why?
@burrsutter - bit.ly/serverlesskube
Primitives
Kubernetes
Deployment
Replicaset
Pod
Service
(tekton)
Autoscaling
Invokers
Event Binding
Routing
Observability
DX
Functions
Event Sources
Build Tools
Knative
Vendors
FaaS Stuff
Serverless
Stuff
@burrsutter - bit.ly/serverlesskube
What is Knative?
"Kubernetes-based platform to build, deploy, and manage modern serverless workloads."
"Essential base primitives for all"
"Knative provides a set of middleware components that are essential to build modern, source-centric, and container-based applications that can run anywhere: on premises, in the cloud, or even in a third-party data center"
@burrsutter - bit.ly/serverlesskube
Interesting Capabilities
@burrsutter - bit.ly/serverlesskube
@burrsutter - bit.ly/serverlesskube
@burrsutter - bit.ly/serverlesskube
Knative Serving
�
@burrsutter - bit.ly/serverlesskube
Knative Serving
kubectl get crd | grep serving
configurations.serving.knative.dev
revisions.serving.knative.dev
routes.serving.knative.dev
services.serving.knative.dev
@burrsutter - bit.ly/serverlesskube
Knative Serving Autoscaler
kubectl -n knative-serving edit configmap config-autoscaler
container-concurrency-target-default: "100"
scale-to-zero-grace-period: 60s
stable-window: 30s
@burrsutter - bit.ly/serverlesskube
kubectl apply -f Deployment.yaml
Deployment
Replicaset
Pod
Service
Pod
Pod
@burrsutter - bit.ly/serverlesskube
kubectl apply -f ksvc.yaml
Deployment N
Replicaset N
Pod
Service
Pod
Pod N
Configuration
Revision N
serving.knative.dev/v1alpha1
Service
Route
Service
@burrsutter - bit.ly/serverlesskube
kubectl apply -f ksvc.yaml
Deployment N
Replicaset N
Pod
Service
Pod
Pod N
Configuration
Revision N
Knative Gateway
VirutalService
Activator
serving.knative.dev/v1alpha1
Service
Route
ImageCache
PodAutoscaler
ClusterIngress
Service
@burrsutter - bit.ly/serverlesskube
Demo/Labs
@burrsutter - bit.ly/serverlesskube
Knative Eventing�
@burrsutter - bit.ly/serverlesskube
Knative Eventing
kubectl get crd | grep eventing
channels.eventing.knative.dev
subscriptions.eventing.knative.dev
cronjobsources.sources.eventing.knative.dev
githubsources.sources.eventing.knative.dev
kuberneteseventsources.sources.eventing.knative.dev
containersources.sources.eventing.knative.dev
@burrsutter - bit.ly/serverlesskube
Knative Eventing Sources
Github�Websockets�AWS SQS�GCP PubSub�Apache Kafka�Apache Camel
https://github.com/knative/eventing-contrib
https://github.com/knative/eventing-sources
@burrsutter - bit.ly/serverlesskube
Sink
Source to Sink
Knative Event Source
Knative Service (ksvc)
@burrsutter - bit.ly/serverlesskube
Channel and Subscription
Knative Event Source
Sink
Knative Service A (ksvc)
Sink
Channel
Knative Service B (ksvc)
Cloud Event Message
Sub
Sub
@burrsutter - bit.ly/serverlesskube
Broker and Trigger
Knative Event Source
Knative Eventing Trigger
Sink
broker
Knative Eventing Trigger
Sub
Sub
Filtered messages
@burrsutter - bit.ly/serverlesskube
Demo/Labs
@burrsutter - bit.ly/serverlesskube
Knative Build
�
Moving to Tekton
@burrsutter - bit.ly/serverlesskube
@burrsutter - bit.ly/serverlesskube
Pipelines - Tekton
@burrsutter - bit.ly/serverlesskube
Pipelines, Tasks, Steps, Resources
Pipeline
Task
Step
Step
Task
Step
git
image
cluster
Task
Step
Step
Pipeline
Resource
Pipeline
Resource
@burrsutter - bit.ly/serverlesskube
Pipeline: Tasks & Steps -> Pods & Containers
Pipeline
Task
Step
Step
Task
Step
Step
Pod
Container
Container
Pod
Container
Container
@burrsutter - bit.ly/serverlesskube
@burrsutter - bit.ly/serverlesskube
Resources
https://github.com/burrsutter/sidebyside
https://github.com/burrsutter/knative-kafka
@burrsutter - bit.ly/serverlesskube
@burrsutter - bit.ly/serverlesskube
@burrsutter - bit.ly/serverlesskube