Slide 1

Slide 1 text

© Copyright 2018 Pivotal Software, Inc. All rights Reserved. Version 1.0 サーバーレスからコンテナまで。 Knativeのお話

Slide 2

Slide 2 text

Pivotal Japan - Solutions Architect Kazuto Kusama @jacopen

Slide 3

Slide 3 text

こういう勉強会の運営やってます

Slide 4

Slide 4 text

クラウドネイティブ時代 平成も終わろうとしていますが、この 業界の今を表すとしたらこういう感じ でしょうか

Slide 5

Slide 5 text

https://www.cncf.io/projects/ さまざまなツール・ プラットフォーム CNCFを中心として クラウドネイティブにまつわるツール がだいぶ出揃いました

Slide 6

Slide 6 text

Cloud Native Developers JP https://cnd.connpass.com/ Cloud Native Meetup Tokyo https://cloudnative.connpass.com/ Cloud Native Deep Dive https://www.meetup.com/ja-JP/Cloud-Native-Deep-Dive/ 国内だと、 Cloud Nativeと名の付く勉 強会だけでも3つあったりし ます

Slide 7

Slide 7 text

僕の考えた最強のクラウドネイティブ基盤 Microservices いろんな妄想が捗りますね。 まずはアプリをマイクロサービスで 作ってみて

Slide 8

Slide 8 text

僕の考えた最強のクラウドネイティブ基盤 Microservices Service Mesh Circuit Breaker Service Discovery Traffic Control サービスメッシュなんかも入れたりし て

Slide 9

Slide 9 text

僕の考えた最強のクラウドネイティブ基盤 Microservices Service Mesh Circuit Breaker Canary Release Service Discovery Blue-Green Deployment Traffic Control カナリアリリースやBlue Green Deploymentもプラットフォーム側で やれるようにして

Slide 10

Slide 10 text

僕の考えた最強のクラウドネイティブ基盤 Microservices Service Mesh Circuit Breaker Canary Release Distributed Tracing Service Discovery Blue-Green Deployment Traffic Control ついでに分散トレーシング入れたり

Slide 11

Slide 11 text

僕の考えた最強のクラウドネイティブ基盤 Microservices Service Mesh Circuit Breaker Canary Release Serverless Distributed Tracing Service Discovery Blue-Green Deployment Traffic Control さらにはサーバーレス的な要素いれ たりして

Slide 12

Slide 12 text

僕の考えた最強のクラウドネイティブ基盤 Microservices Service Mesh Circuit Breaker Canary Release Serverless Distributed Tracing Service Discovery Blue-Green Deployment Traffic Control 強そう

Slide 13

Slide 13 text

コンテナをどうProductionに投入するか? どのくらい大きな規模で運用するか? を模索する時代 コンテナとは何か? どう活用するか? を模索する時代 世の中の興味の流れ 2013 2014 2015 2016 2017 2018 2019 ? 興味の流れとしてはこんな感じでしょうか。今は コンテナをどう実戦投入するかでKubernetesを 検討されているのでは。 では、2019年以降はどうでしょうか?

Slide 14

Slide 14 text

コンテナをどうProductionに投入するか? どのくらい大きな規模で運用するか? を模索する時代 コンテナとは何か? どう活用するか? を模索する時代 世の中の興味の流れ 2013 2014 2015 2016 2017 2018 2019 ? どうCloud Nativeな仕組みに していくか? おそらく、どうCloud Nativeな仕組み・プラットフォー ムにするかが焦点となるでしょう

Slide 15

Slide 15 text

でもちょっとまって

Slide 16

Slide 16 text

こんなのやりました Japan Container Daysでこんな 発表やってみたワケですけど、 結構好評でした。

Slide 17

Slide 17 text

『コンテナ疲れ』と戦う、k8s・PaaS・Serverlessの活用法 https://www.slideshare.net/jacopen/k8spaasserverless コンテナつらい・・・

Slide 18

Slide 18 text

『コンテナ疲れ』と戦う、k8s・PaaS・Serverlessの活用法 https://www.slideshare.net/jacopen/k8spaasserverless Kubernetes難しい・・・

Slide 19

Slide 19 text

で、その状態でさらにIstio入れる? さらにIstioの概念覚えて、 Manifest書きたいですか?

Slide 20

Slide 20 text

もっとシンプルに使える仕組みが必要

Slide 21

Slide 21 text

Serverless≒ AWS Lambda Cloud Native Technologies Are Scaling Production Applications https://www.cncf.io/blog/2017/12/06/cloud-native-technologies-scaling-production-applications/ のデータを元に作成 Serverless Computingの重要性は 日に日に増しているが、現状としてAWS1強

Slide 22

Slide 22 text

さらに FaaS以外にもServerlessの概念が広がりつつある Amazon Aurora Serverless https://aws.amazon.com/jp/rds/aurora/serverless/

Slide 23

Slide 23 text

そんな状況で誕生したのが・・・

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

Kubernetes, Serverless, and You (Cloud Next '18) https://www.youtube.com/watch?v=LtELzpw1l1M Knative - Serverless workloadのためのBuilding Block

Slide 26

Slide 26 text

Knative [kay-nay-tiv] ケイネイティブ 発音 “K”を発音せず『ネイティブ』と読ませる案もありま したが、公式に『ケイネイティブ』と 定められています。

Slide 27

Slide 27 text

誰が作っている? Google Pivotal IBM Red Hat SAP など

Slide 28

Slide 28 text

テクノロジースタック

Slide 29

Slide 29 text

テクノロジースタック Kubernetesの上で動くこと Istioを内包していること が大きなポイントです

Slide 30

Slide 30 text

Knativeでは 何ができるのか コンテナのデプロイ ソースコードからのデプロイ Blue-GreenデプロイやCanary Release ワークロードに応じたオートスケール イベントドリブンなワークロードの実行

Slide 31

Slide 31 text

DEMO 現地でデモした再現 apiVersion: serving.knative.dev/v1alpha1 kind: Service metadata: name: helloworld-go namespace: default spec: runLatest: configuration: revisionTemplate: spec: container: image: gcr.io/knative-samples/helloworld-go env: - name: TARGET value: "Go Sample v1" k8sよりシンプルな Manifestを用意して $ kubectl apply -f deploy-container.yml service.serving.knative.dev/helloworld-go created $ kubectl get pods NAME READY STATUS RESTARTS AGE helloworld-go-00001-deployment-6df677c5cd-6h4kd 3/3 Running 0 40s kubectlでapplyすると なんか動いたっぽいぞ

Slide 32

Slide 32 text

DEMO 現地でデモした再現 $ knctl route list Routes in namespace 'default' Name Traffic All Traffic Assigned Ready Domain Age helloworld-go 100% -> helloworld-go: - - helloworld-go.default.knative.udcp.info 4s 実はこの時点で、自動で ドメインが払い出されており もうブラウザで繋ぎにいくことが出来 ます

Slide 33

Slide 33 text

DEMO 現地でデモした再現 Kubernetesで同じことをやろうとすると、 Deployment、ReplicaSet、Pod、Service type:LoadBalancer、 Ingressなどなど、 定義しなきゃいけないもの沢山ありますよね。 それが10行ちょっとのYAMLで出来てしまうので、 これだけでも楽になっていることは分かるでしょう。

Slide 34

Slide 34 text

Knativeのしくみ

Slide 35

Slide 35 text

Serving Scale to zero, request-driven compute model ● ゼロからスケールする、リクエストドリブンの コンピュートモデルを実現するコンポーネント ○ サーバーレスのワークロードを素早くデプロイ ○ 自動でスケールアップ・ダウン ○ Istioを利用したルーティングの設定 ○ デプロイされたコードや設定のスナップショット https://github.com/knative/docs/tree/master/serving ServingはKnativeのコンポーネン トで最も重要な存在です。

Slide 36

Slide 36 text

Serving Scale to zero, request-driven compute model ● 4つのCustom Resourceを用いて実現 ○ Service - service.serving.knative.dev ○ Route - route.serving.knative.dev ○ Configuration - configuration.serving.knative.dev ○ Revision - revision.serving.knative.dev https://github.com/knative/docs/tree/master/serving さっきのデモでは、このServiceを 定義してデプロイしました。 それにより自動でRouteと Configurationが作成されました

Slide 37

Slide 37 text

Builds Cloud-native source to container orchestration ● ソースコードからのイメージ作成を実現するコンポーネント ○ gitリポジトリからソースコードを取得 ○ 複数のジョブを実行(依存関係のインストールやテストの実行 など) ○ コンテナイメージへの作成 ○ イメージリポジトリへのpush ● Build - Ship - RunのうちBuildとShipを担う ● プラガブルであり、さまざまなイメージビルドの仕組みを利用可能 ○ Buildpack (Cloud Foundry / Heroku) ○ Google Container Builder ○ Bazel ○ Kaniko ○ などなど

Slide 38

Slide 38 text

Eventing Universal subscription, delivery and management of events ● よくあるイベント処理周り イベントソース メッセージバス コード Publish Subscribe いろんなソース いろんなバス (Kafka, NATS, GCP PubSub) https://github.com/knative/docs/tree/master/eventing 現時点での実装 K8sevents GitHub GCP PubSub ● Sources, Buses, Flowsというリソースで抽象化 現時点での実装 Stub Kafka GCP PubSub

Slide 39

Slide 39 text

何か ”Serverless” とは違うような

Slide 40

Slide 40 text

KnativeのいうServerless ≠ FaaS ● ServerlessといってもAWS LambdaやGoogle Cloud Functionsのよ うなFaaSを指すわけではない ● Knativeが指すServerless Workloadとは ○ ステートレス ○ プロセスのスケールアウトモデルが適用可能 ○ 主にアプリケーションレベル(L7、例えばHTTP)から リクエストされるトラフィックによって駆動 ● CNCF Serverless Whitepapterの定義とはズレるかもしれない (https://github.com/cncf/wg-serverless/tree/master/whitepapers/serverless-overview)

Slide 41

Slide 41 text

“Building Block” https://content.pivotal.io/blog/knative-powerful-building-blocks-for-a-portable-function-platform

Slide 42

Slide 42 text

Riff Riff for functions ● Pivotalが中心になって開発しているFaaS ( https://projectriff.io/ ) ● Kubernetes向けに作られていたが、Knativeを ベースにするように作り替え中

Slide 43

Slide 43 text

Kwsk Apache OpenWhisk on Knative 詳しく Apache OpenWhisk on Knative https://github.com/projectodd/kwsk

Slide 44

Slide 44 text

所感 • 登場したときから異様にDocsが充実している ○ とはいえ綺麗に整理されているわけではないので、色々漁る必要あり • 『一応動く』 ○ GCPだとn1-standard-4 x3 (4Core 15GB) が必要 • Knative単体では、掲げているメリットの実現は難しい気がする ○ 【理想】Kubernetes & Istioをラップして使いやすくする ○ 【現実】Kubernetes + Istio + Knative + etc の知識が必要 • RiffやOpenWhiskなど、Knativeをベースにしたエコシステムの 充実を待つ必要がある

Slide 45

Slide 45 text

所感 • 現時点(2018年8月時点)では、正確にメリット・デメリットを 語れるレベルまで成熟していない ○ 今すぐに導入して使えるようなものではない • Istio必須のため、軽く試すには敷居が高い ○ GCPだとn1-standard-4 x3 (4Core 15GB) が必要 • Knative単体では、掲げているメリットの実現は難しい気がする ○ 【理想】Kubernetes & Istioをラップして使いやすくする ○ 【現実】Kubernetes + Istio + Knative + etc の知識が必要 • RiffやOpenWhiskなど、Knativeをベースにしたエコシステムの 充実を待つ必要がある

Slide 46

Slide 46 text

所感 • とはいえ、『2020年のプラットフォーム』を予想したときに 思いつく理想のプラットフォームは、Knativeのテクノロジースタックと ほぼ同じ構成になる (jacopenの主観) • あるべきプラットフォームを模索するのであれば、Knativeの動向は抑 えておくべき • Knativeコマンドが実装されたらPaaSライクに使えるかも?

Slide 47

Slide 47 text

Knativeコマンド https://github.com/knative/serving/blob/master/docs/spec/normative_examples.md Knative Servingのドキュメントにある使い方イメージ 実装はまだない $ knative deploy --service my-service Deploying app to service [my-service]: ✓ Starting ✓ Promoting Done. Deployed to https://my-service.default.mydomain.com $ knative revisions list --service my-service Name Traffic Id Date Deployer Git SHA next 0% v3 2018-01-19 12:16 user1 a6f92d1 current 100% v2 2018-01-18 20:34 user1 a6f92d1 v1 2018-01-17 10:32 user1 33643fc $ knative rollout next percent 5 [...] $ knative rollout next percent 50 [...] $ knative rollout finish [...]

Slide 48

Slide 48 text

knctl https://github.com/cppforlife/knctl knativeコマンドの構想に近いモノを実装しているCLI $ knctl deploy --service hello --image gcr.io/knative-samples/helloworld-go --env TARGET=new-value $ knctl curl --service hello Running: curl '-H' 'Host: hello.default.example.com' 'http://0.0.0.0:80' Hello World: new-value!

Slide 49

Slide 49 text

GKE Serverless Addon GKEにKnativeの機能を加えるAddon early access request受付中

Slide 50

Slide 50 text

Pivotal Function Service Pivotal Container Service(PKS) の上で動作 Knative+Riffによる商用Serverless Platform + = + + =

Slide 51

Slide 51 text

もくもく会やってます

Slide 52

Slide 52 text

その他詳しい情報 docs https://github.com/knative/docs Knative Serving https://github.com/knative/docs/tree/master/serving Riff https://projectriff.io/ Knativeが目指すもの、考え方を見てみよう https://repl.info/archives/2137/ まずは試そう Servingのドキュメントも 有用 Knativeの活用 イメージとして Knativeの目指すモノの 参考に

Slide 53

Slide 53 text

Transforming How The World Builds Software © Copyright 2017 Pivotal Software, Inc. All rights Reserved.