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
1.9k
手を動かさないインシデント対応〜自動化で迅速・正確な運用を目指す〜
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
ドメインの本質を掴む / Get the essence of the domain
sinsoku
2
150
Lambda10周年!Lambdaは何をもたらしたか
smt7174
2
110
AIチャットボット開発への生成AI活用
ryomrt
0
170
ISUCONに強くなるかもしれない日々の過ごしかた/Findy ISUCON 2024-11-14
fujiwara3
8
870
RubyのWebアプリケーションを50倍速くする方法 / How to Make a Ruby Web Application 50 Times Faster
hogelog
3
940
Terraform Stacks入門 #HashiTalks
msato
0
350
TanStack Routerに移行するのかい しないのかい、どっちなんだい! / Are you going to migrate to TanStack Router or not? Which one is it?
kaminashi
0
590
IBC 2024 動画技術関連レポート / IBC 2024 Report
cyberagentdevelopers
PRO
0
110
【Startup CTO of the Year 2024 / Audience Award】アセンド取締役CTO 丹羽健
niwatakeru
0
1k
SRE×AIOpsを始めよう!GuardDutyによるお手軽脅威検出
amixedcolor
0
110
テストコード品質を高めるためにMutation Testingライブラリ・Strykerを実戦導入してみた話
ysknsid25
7
2.6k
Can We Measure Developer Productivity?
ewolff
1
150
Featured
See All Featured
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
364
24k
How To Stay Up To Date on Web Technology
chriscoyier
788
250k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.7k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5k
Writing Fast Ruby
sferik
627
61k
Intergalactic Javascript Robots from Outer Space
tanoku
269
27k
Site-Speed That Sticks
csswizardry
0
25
How to Think Like a Performance Engineer
csswizardry
20
1.1k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
26
2.1k
Docker and Python
trallard
40
3.1k
BBQ
matthewcrist
85
9.3k
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.