$30 off During Our Annual Pro Sale. View Details »

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

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

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

Kazuto Kusama

August 28, 2018
Tweet

More Decks by Kazuto Kusama

Other Decks in Technology

Transcript

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

    View Slide

  2. Pivotal Japan - Solutions Architect
    Kazuto Kusama
    @jacopen

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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つあったりし
    ます

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  15. でもちょっとまって

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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強

    View Slide

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

    View Slide

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

    View Slide

  24. View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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すると
    なんか動いたっぽいぞ

    View Slide

  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
    実はこの時点で、自動で
    ドメインが払い出されており
    もうブラウザで繋ぎにいくことが出来
    ます

    View Slide

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

    View Slide

  34. Knativeのしくみ

    View Slide

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

    View Slide

  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が作成されました

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

  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)

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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
    [...]

    View Slide

  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!

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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の目指すモノの
    参考に

    View Slide

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

    View Slide