Slide 1

Slide 1 text

Knative: A Kubernetes-based platform to manage modern serverless workloads GCPUG.TW

Slide 2

Slide 2 text

About Me 白凱仁(Kyle Bai) • Interested in emerging technologies. • COSCUP, Kubernetes Day and OpenStack Day Speaker. • OpenStack and Kubernetes Projects Contributor(100+ PR). • Certified Kubernetes Administrator. @kairen([email protected]) https://kairen.github.io/

Slide 3

Slide 3 text

Agenda Today We would like to talk about What is Knative? Knative Core Concepts Live Demo Summary

Slide 4

Slide 4 text

Knative Knative 是 Google Cloud Platform 與多家公司共同開發的開源 Serverless 架構方案︐ 目標是提供一套簡單易用的 Serverless︐並將之標準化。目前 OpenWhisk、Riff 與 Kyma 都跟 Knative 有密切的合作。 “Developed in close partnership with Pivotal, IBM, Red Hat, and SAP, Knative pushes Kubernetes-based computing forward by providing the building blocks you need to build and deploy modern, container-based serverless applications.”

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

https://github.com/kubeflow/kubeflow/issues/1317

Slide 9

Slide 9 text

Built on top of Kubernetes and Istio knative 是建立在 Kubernetes 和 Istio 平台之上的︐使用 Kubernetes 提供的容器管理 能力(Deployment、Replicaset、和 Pods 等)︐以及 Istio 提供的網路管理功能 (Ingress、LB、Dynamic route 等)。

Slide 10

Slide 10 text

Knative Goals Knative 類似其他 Serverless 平台透過自動化來處理以下事情︓ • 部署函式(應用程式)容器實例。 • 自動完成程式碼到容器的建構。 • 將函式(應用程式)與特定事件進行綁定︐一但觸發事件時︐將自動觸發函式(應用程式)。 • 路由、流量控制(blue/green deployment)等網路功能。 • 函式(應用程式)能夠自動伸縮實例。

Slide 11

Slide 11 text

Designed with different personas in mind

Slide 12

Slide 12 text

Knative Core Concepts 整個 Knative 把系統拆分成三個部分來實現 Serverless 應用的管理︐而這三個部分都 會透過許多 Kubernetes CRD 來建立抽象資源︓ • Build: 將使用者定義的函式與應用程式 build 成容器映像檔。 • Serving: 用來設定 Request-driven compute 、應用程式路由、升級策略與 Autoscale 等等功能。 • Eventing: 用來自動完成事件的綁定與觸發。

Slide 13

Slide 13 text

Kubernetes CRD CustomResourceDefinition(CRD) 是 v1.7+ 版本新加入的 Kubernetes API 擴展機制︐ 目標是無需修改核心程式碼就能對 Kubernetes 進行擴展。 • 使用自定義物件進行擴展 Kubernetes API • CRDs 能夠沿用熟悉的 UX 工具︐ex: kubectl • 能夠與 Custom Controllers 進行結合 • 支援 SubResources(v1.10+)

Slide 14

Slide 14 text

CRD Example

Slide 15

Slide 15 text

CRD Example

Slide 16

Slide 16 text

Knative Build Build 是 Knative 中的自定義資源︐並提供了 Build API object 來處理從原始碼 (Sources)建構容器的可插拔(Pluggable)模型︐這是基於 Google 的容器建構服務 (Container Build Service) 而來︐這允許開發者定義容器的來源來打包映像檔。

Slide 17

Slide 17 text

Knative 提供了 Build CRD 來讓使用者透過 YAML 檔案定義函式(應用程式)建構過程︓ Build CRDs

Slide 18

Slide 18 text

Simple build for Kaniko (Live Demo)

Slide 19

Slide 19 text

Knative Serving Knative Service 功能是基於 Kubernetes 和 Istio 開發的︐它使用 Kubernetes 來管理 容器(Deployment、Pod等)︐而利用 Istio 來管理網路路由(VirtualService、 DestinationRule 等等)。 • 自動化啟動與刪除容器 • 根據 Name 產生網路存取相關的 Service、Ingress 等 • 監控函式(應用程式的請求)︐並自動伸縮實例 • 支援 blue/green deployment、Rollback 等 Workflow。

Slide 20

Slide 20 text

Knative Serving Concepts • Route:函式(應用程式)的路由規則︐即進來的流量如何存取函式(應用程式)︐對應了 Istio 的流量管理(VirtualService 與 DestinationRoute)。 • Configuration: 函式(應用程式)的最新組態︐即函式(應用程式)目前期望的狀態︐對應了 Kubernetes 的容器管理(Deployment)。 • Revision: 記錄每個工作負載修改的程式碼與組態的時間點快照。 • Service: 管理整個函式(應用程式)的 Build、Route 與 Configuration 的建立流程。

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

Simple B/G Deployment (Live Demo)

Slide 24

Slide 24 text

Simple serving for Go app (Live Demo)

Slide 25

Slide 25 text

Knative Eventing Eventing 提供用於 Consuming 以及 Producing 的事件建構區塊︐並遵守著 CloudEvents 規範來實現︐而該元件目標是對事件進行抽象處理︐以讓開發者不 需要關注後端相關具體細節︐這樣開發者就不需要思考使用哪一套訊息佇列系 統。

Slide 26

Slide 26 text

Knative Eventing Concepts • EventSource:事件來源︐能夠產生事件的外部系統。 • Feed:把某種類型的 EventType 和 EventSource 和對應的 Channel 綁定在一起。 • Channel:訊息系統實的抽象層︐後端可以是 kafka、RabbitMQ、Google PubSub 作為具體 的實現。 channel name 類似於消息集群中的 topic︐可以用來解耦事件源和函數。 • Subscription:把 channel 和後端的函式綁定的一起︐一個 channel 可以綁定到多個 Knative service

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

Orchestrating a source-to-URL Live Demo

Slide 29

Slide 29 text

Summary • Knative 提供了一個 Serverless 標準化架構︐並希望透過 Kubernetes 與 Istio 來實 現運算與網路路由的功能。 • Knative 和標準化的 FaaS 不同︐knative 期望能夠運行所有的 Workload︐如 Traditional application、Function 與 Container。 • 透過實現 Kubernetes 抽象資源來簡化管理與部署流程。 • 提供了 Logging(EFK)、Metrics(Prometheus+Grafana)、Tracing(Jaeger)的功能。 • 目前 Knative 還在迭代︐有些元件都是 Hard-coded。

Slide 30

Slide 30 text

Refers • https://m.chmarny.com/build-deploy-manage-modern-serverless-workloads- using-knative-on-kubernetes-180c1a55e1b5 • https://medium.com/google-cloud/knative-408dacbc1953 • https://boxboat.com/2018/08/10/building-containers-with-kubernetes-and- knative/ • https://kairen.github.io/2018/07/27/kubernetes/knative-intro/ • https://medium.com/@pczarkowski/introduction-to-knative-b93a0b9aeeef • https://github.com/knative/docs