Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
サーバーレスからコンテナまで。Knativeのお話
Search
Kazuto Kusama
August 28, 2018
Technology
11
1.9k
サーバーレスからコンテナまで。Knativeのお話
第38回PaaS勉強会で発表した資料です
Kazuto Kusama
August 28, 2018
Tweet
Share
More Decks by Kazuto Kusama
See All by Kazuto Kusama
2024/10 PagerDuty機能アップデート
jacopen
1
32
ゲームから学ぶ、いちばん速いインシデント対応
jacopen
1
57
PEK2024 Recap
jacopen
2
130
クラウドネイティブの本質から考える、生産性と信頼性の両立
jacopen
3
840
「責任ある開発」を!フルサービスオーナーシップが変えるエンジニアリング文化
jacopen
11
2k
手を動かさないインシデント対応〜自動化で迅速・正確な運用を目指す〜
jacopen
3
430
エンジニアとしてのキャリアを支える自宅サーバー
jacopen
12
7.3k
Grafana x PagerDuty Better Together
jacopen
1
710
「共通基盤」を超えよ! 今、Platform Engineeringに取り組むべき理由
jacopen
27
10k
Other Decks in Technology
See All in Technology
Engineer Career Talk
lycorp_recruit_jp
0
190
10XにおけるData Contractの導入について: Data Contract事例共有会
10xinc
6
660
Introduction to Works of ML Engineer in LY Corporation
lycorp_recruit_jp
0
140
RubyのWebアプリケーションを50倍速くする方法 / How to Make a Ruby Web Application 50 Times Faster
hogelog
3
950
B2B SaaSから見た最近のC#/.NETの進化
sansantech
PRO
0
880
Why App Signing Matters for Your Android Apps - Android Bangkok Conference 2024
akexorcist
0
130
AWS Lambdaと歩んだ“サーバーレス”と今後 #lambda_10years
yoshidashingo
1
180
Shopifyアプリ開発における Shopifyの機能活用
sonatard
4
250
『Firebase Dynamic Links終了に備える』 FlutterアプリでのAdjust導入とDeeplink最適化
techiro
0
120
AWS Media Services 最新サービスアップデート 2024
eijikominami
0
200
Lambda10周年!Lambdaは何をもたらしたか
smt7174
2
110
OCI Network Firewall 概要
oracle4engineer
PRO
0
4.2k
Featured
See All Featured
Building Adaptive Systems
keathley
38
2.3k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
840
Intergalactic Javascript Robots from Outer Space
tanoku
269
27k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
246
1.3M
Teambox: Starting and Learning
jrom
133
8.8k
Side Projects
sachag
452
42k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
47
2.1k
Building Your Own Lightsaber
phodgson
103
6.1k
Why Our Code Smells
bkeepers
PRO
334
57k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Embracing the Ebb and Flow
colly
84
4.5k
Transcript
© Copyright 2018 Pivotal Software, Inc. All rights Reserved. Version
1.0 サーバーレスからコンテナまで。 Knativeのお話
Pivotal Japan - Solutions Architect Kazuto Kusama @jacopen
こういう勉強会の運営やってます
クラウドネイティブ時代 平成も終わろうとしていますが、この 業界の今を表すとしたらこういう感じ でしょうか
https://www.cncf.io/projects/ さまざまなツール・ プラットフォーム CNCFを中心として クラウドネイティブにまつわるツール がだいぶ出揃いました
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つあったりし ます
僕の考えた最強のクラウドネイティブ基盤 Microservices いろんな妄想が捗りますね。 まずはアプリをマイクロサービスで 作ってみて
僕の考えた最強のクラウドネイティブ基盤 Microservices Service Mesh Circuit Breaker Service Discovery Traffic Control
サービスメッシュなんかも入れたりし て
僕の考えた最強のクラウドネイティブ基盤 Microservices Service Mesh Circuit Breaker Canary Release Service Discovery
Blue-Green Deployment Traffic Control カナリアリリースやBlue Green Deploymentもプラットフォーム側で やれるようにして
僕の考えた最強のクラウドネイティブ基盤 Microservices Service Mesh Circuit Breaker Canary Release Distributed Tracing
Service Discovery Blue-Green Deployment Traffic Control ついでに分散トレーシング入れたり
僕の考えた最強のクラウドネイティブ基盤 Microservices Service Mesh Circuit Breaker Canary Release Serverless Distributed
Tracing Service Discovery Blue-Green Deployment Traffic Control さらにはサーバーレス的な要素いれ たりして
僕の考えた最強のクラウドネイティブ基盤 Microservices Service Mesh Circuit Breaker Canary Release Serverless Distributed
Tracing Service Discovery Blue-Green Deployment Traffic Control 強そう
コンテナをどうProductionに投入するか? どのくらい大きな規模で運用するか? を模索する時代 コンテナとは何か? どう活用するか? を模索する時代 世の中の興味の流れ 2013 2014 2015
2016 2017 2018 2019 ? 興味の流れとしてはこんな感じでしょうか。今は コンテナをどう実戦投入するかでKubernetesを 検討されているのでは。 では、2019年以降はどうでしょうか?
コンテナをどうProductionに投入するか? どのくらい大きな規模で運用するか? を模索する時代 コンテナとは何か? どう活用するか? を模索する時代 世の中の興味の流れ 2013 2014 2015
2016 2017 2018 2019 ? どうCloud Nativeな仕組みに していくか? おそらく、どうCloud Nativeな仕組み・プラットフォー ムにするかが焦点となるでしょう
でもちょっとまって
こんなのやりました Japan Container Daysでこんな 発表やってみたワケですけど、 結構好評でした。
『コンテナ疲れ』と戦う、k8s・PaaS・Serverlessの活用法 https://www.slideshare.net/jacopen/k8spaasserverless コンテナつらい・・・
『コンテナ疲れ』と戦う、k8s・PaaS・Serverlessの活用法 https://www.slideshare.net/jacopen/k8spaasserverless Kubernetes難しい・・・
で、その状態でさらにIstio入れる? さらにIstioの概念覚えて、 Manifest書きたいですか?
もっとシンプルに使える仕組みが必要
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強
さらに FaaS以外にもServerlessの概念が広がりつつある Amazon Aurora Serverless https://aws.amazon.com/jp/rds/aurora/serverless/
そんな状況で誕生したのが・・・
None
Kubernetes, Serverless, and You (Cloud Next '18) https://www.youtube.com/watch?v=LtELzpw1l1M Knative -
Serverless workloadのためのBuilding Block
Knative [kay-nay-tiv] ケイネイティブ 発音 “K”を発音せず『ネイティブ』と読ませる案もありま したが、公式に『ケイネイティブ』と 定められています。
誰が作っている? Google Pivotal IBM Red Hat SAP など
テクノロジースタック
テクノロジースタック Kubernetesの上で動くこと Istioを内包していること が大きなポイントです
Knativeでは 何ができるのか コンテナのデプロイ ソースコードからのデプロイ Blue-GreenデプロイやCanary Release ワークロードに応じたオートスケール イベントドリブンなワークロードの実行
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すると なんか動いたっぽいぞ
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 実はこの時点で、自動で ドメインが払い出されており もうブラウザで繋ぎにいくことが出来 ます
DEMO 現地でデモした再現 Kubernetesで同じことをやろうとすると、 Deployment、ReplicaSet、Pod、Service type:LoadBalancer、 Ingressなどなど、 定義しなきゃいけないもの沢山ありますよね。 それが10行ちょっとのYAMLで出来てしまうので、 これだけでも楽になっていることは分かるでしょう。
Knativeのしくみ
Serving Scale to zero, request-driven compute model • ゼロからスケールする、リクエストドリブンの コンピュートモデルを実現するコンポーネント
◦ サーバーレスのワークロードを素早くデプロイ ◦ 自動でスケールアップ・ダウン ◦ Istioを利用したルーティングの設定 ◦ デプロイされたコードや設定のスナップショット https://github.com/knative/docs/tree/master/serving ServingはKnativeのコンポーネン トで最も重要な存在です。
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が作成されました
Builds Cloud-native source to container orchestration • ソースコードからのイメージ作成を実現するコンポーネント ◦ gitリポジトリからソースコードを取得
◦ 複数のジョブを実行(依存関係のインストールやテストの実行 など) ◦ コンテナイメージへの作成 ◦ イメージリポジトリへのpush • Build - Ship - RunのうちBuildとShipを担う • プラガブルであり、さまざまなイメージビルドの仕組みを利用可能 ◦ Buildpack (Cloud Foundry / Heroku) ◦ Google Container Builder ◦ Bazel ◦ Kaniko ◦ などなど
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
何か ”Serverless” とは違うような
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)
“Building Block” https://content.pivotal.io/blog/knative-powerful-building-blocks-for-a-portable-function-platform
Riff Riff for functions • Pivotalが中心になって開発しているFaaS ( https://projectriff.io/ ) •
Kubernetes向けに作られていたが、Knativeを ベースにするように作り替え中
Kwsk Apache OpenWhisk on Knative 詳しく Apache OpenWhisk on Knative
https://github.com/projectodd/kwsk
所感 • 登場したときから異様にDocsが充実している ◦ とはいえ綺麗に整理されているわけではないので、色々漁る必要あり • 『一応動く』 ◦ GCPだとn1-standard-4 x3
(4Core 15GB) が必要 • Knative単体では、掲げているメリットの実現は難しい気がする ◦ 【理想】Kubernetes & Istioをラップして使いやすくする ◦ 【現実】Kubernetes + Istio + Knative + etc の知識が必要 • RiffやOpenWhiskなど、Knativeをベースにしたエコシステムの 充実を待つ必要がある
所感 • 現時点(2018年8月時点)では、正確にメリット・デメリットを 語れるレベルまで成熟していない ◦ 今すぐに導入して使えるようなものではない • Istio必須のため、軽く試すには敷居が高い ◦ GCPだとn1-standard-4
x3 (4Core 15GB) が必要 • Knative単体では、掲げているメリットの実現は難しい気がする ◦ 【理想】Kubernetes & Istioをラップして使いやすくする ◦ 【現実】Kubernetes + Istio + Knative + etc の知識が必要 • RiffやOpenWhiskなど、Knativeをベースにしたエコシステムの 充実を待つ必要がある
所感 • とはいえ、『2020年のプラットフォーム』を予想したときに 思いつく理想のプラットフォームは、Knativeのテクノロジースタックと ほぼ同じ構成になる (jacopenの主観) • あるべきプラットフォームを模索するのであれば、Knativeの動向は抑 えておくべき •
Knativeコマンドが実装されたらPaaSライクに使えるかも?
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 [...]
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!
GKE Serverless Addon GKEにKnativeの機能を加えるAddon early access request受付中
Pivotal Function Service Pivotal Container Service(PKS) の上で動作 Knative+Riffによる商用Serverless Platform +
= + + =
もくもく会やってます
その他詳しい情報 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の目指すモノの 参考に
Transforming How The World Builds Software © Copyright 2017 Pivotal
Software, Inc. All rights Reserved.