サーバーレスからコンテナまで。Knativeのお話

 サーバーレスからコンテナまで。Knativeのお話

第38回PaaS勉強会で発表した資料です

Cbc297b07593321e52c75a9ebcc0f843?s=128

Kazuto Kusama

August 28, 2018
Tweet

Transcript

  1. © Copyright 2018 Pivotal Software, Inc. All rights Reserved. Version

    1.0 サーバーレスからコンテナまで。 Knativeのお話
  2. Pivotal Japan - Solutions Architect Kazuto Kusama @jacopen

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

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

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

  6. 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つあったりし ます
  7. 僕の考えた最強のクラウドネイティブ基盤 Microservices いろんな妄想が捗りますね。 まずはアプリをマイクロサービスで 作ってみて

  8. 僕の考えた最強のクラウドネイティブ基盤 Microservices Service Mesh Circuit Breaker Service Discovery Traffic Control

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

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

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

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

    Tracing Service Discovery Blue-Green Deployment Traffic Control 強そう
  13. コンテナをどうProductionに投入するか? どのくらい大きな規模で運用するか? を模索する時代 コンテナとは何か? どう活用するか? を模索する時代 世の中の興味の流れ 2013 2014 2015

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

    2016 2017 2018 2019 ? どうCloud Nativeな仕組みに していくか? おそらく、どうCloud Nativeな仕組み・プラットフォー ムにするかが焦点となるでしょう
  15. でもちょっとまって

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

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

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

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

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

  21. 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強
  22. さらに FaaS以外にもServerlessの概念が広がりつつある Amazon Aurora Serverless https://aws.amazon.com/jp/rds/aurora/serverless/

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

  24. None
  25. Kubernetes, Serverless, and You (Cloud Next '18) https://www.youtube.com/watch?v=LtELzpw1l1M Knative -

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

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

  28. テクノロジースタック

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

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

  31. 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すると なんか動いたっぽいぞ
  32. 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 実はこの時点で、自動で ドメインが払い出されており もうブラウザで繋ぎにいくことが出来 ます
  33. DEMO 現地でデモした再現 Kubernetesで同じことをやろうとすると、 Deployment、ReplicaSet、Pod、Service type:LoadBalancer、 Ingressなどなど、 定義しなきゃいけないもの沢山ありますよね。 それが10行ちょっとのYAMLで出来てしまうので、 これだけでも楽になっていることは分かるでしょう。

  34. Knativeのしくみ

  35. Serving Scale to zero, request-driven compute model • ゼロからスケールする、リクエストドリブンの コンピュートモデルを実現するコンポーネント

    ◦ サーバーレスのワークロードを素早くデプロイ ◦ 自動でスケールアップ・ダウン ◦ Istioを利用したルーティングの設定 ◦ デプロイされたコードや設定のスナップショット https://github.com/knative/docs/tree/master/serving ServingはKnativeのコンポーネン トで最も重要な存在です。
  36. 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が作成されました
  37. Builds Cloud-native source to container orchestration • ソースコードからのイメージ作成を実現するコンポーネント ◦ gitリポジトリからソースコードを取得

    ◦ 複数のジョブを実行(依存関係のインストールやテストの実行 など) ◦ コンテナイメージへの作成 ◦ イメージリポジトリへのpush • Build - Ship - RunのうちBuildとShipを担う • プラガブルであり、さまざまなイメージビルドの仕組みを利用可能 ◦ Buildpack (Cloud Foundry / Heroku) ◦ Google Container Builder ◦ Bazel ◦ Kaniko ◦ などなど
  38. 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
  39. 何か ”Serverless” とは違うような

  40. 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)
  41. “Building Block” https://content.pivotal.io/blog/knative-powerful-building-blocks-for-a-portable-function-platform

  42. Riff Riff for functions • Pivotalが中心になって開発しているFaaS ( https://projectriff.io/ ) •

    Kubernetes向けに作られていたが、Knativeを ベースにするように作り替え中
  43. Kwsk Apache OpenWhisk on Knative 詳しく Apache OpenWhisk on Knative

    https://github.com/projectodd/kwsk
  44. 所感 • 登場したときから異様にDocsが充実している ◦ とはいえ綺麗に整理されているわけではないので、色々漁る必要あり • 『一応動く』 ◦ GCPだとn1-standard-4 x3

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

    x3 (4Core 15GB) が必要 • Knative単体では、掲げているメリットの実現は難しい気がする ◦ 【理想】Kubernetes & Istioをラップして使いやすくする ◦ 【現実】Kubernetes + Istio + Knative + etc の知識が必要 • RiffやOpenWhiskなど、Knativeをベースにしたエコシステムの 充実を待つ必要がある
  46. 所感 • とはいえ、『2020年のプラットフォーム』を予想したときに 思いつく理想のプラットフォームは、Knativeのテクノロジースタックと ほぼ同じ構成になる (jacopenの主観) • あるべきプラットフォームを模索するのであれば、Knativeの動向は抑 えておくべき •

    Knativeコマンドが実装されたらPaaSライクに使えるかも?
  47. 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 [...]
  48. 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!
  49. GKE Serverless Addon GKEにKnativeの機能を加えるAddon early access request受付中

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

    = + + =
  51. もくもく会やってます

  52. その他詳しい情報 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の目指すモノの 参考に
  53. Transforming How The World Builds Software © Copyright 2017 Pivotal

    Software, Inc. All rights Reserved.