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
PaaSの歴史と、 アプリケーションプラットフォームのこれから
jacopen
7
1.5k
AI x インシデント管理で拡げるサービスオーナーシップ
jacopen
0
56
間違いだらけのポストモーテム - ホントに役立つレビューはこうだ!
jacopen
6
1.2k
2024/10 PagerDuty機能アップデート
jacopen
1
51
ゲームから学ぶ、いちばん速いインシデント対応
jacopen
1
94
PEK2024 Recap
jacopen
2
160
クラウドネイティブの本質から考える、生産性と信頼性の両立
jacopen
3
900
「責任ある開発」を!フルサービスオーナーシップが変えるエンジニアリング文化
jacopen
11
2k
手を動かさないインシデント対応〜自動化で迅速・正確な運用を目指す〜
jacopen
3
470
Other Decks in Technology
See All in Technology
Alignment and Autonomy in Cybozu - 300人の開発組織でアラインメントと自律性を両立させるアジャイルな組織運営 / RSGT2025
ama_ch
1
2.4k
ドメイン駆動設計の実践により事業の成長スピードと保守性を両立するショッピングクーポン
lycorptech_jp
PRO
12
2k
ABWGのRe:Cap!
hm5ug
1
120
あなたの人生も変わるかも?AWS認定2つで始まったウソみたいな話
iwamot
3
850
KMP with Crashlytics
sansantech
PRO
0
240
EMConf JP の楽しみ方 / How to enjoy EMConf JP
pauli
2
150
三菱電機で社内コミュニティを立ち上げた話
kurebayashi
1
360
メールヘッダーを見てみよう
hinono
0
110
AWS re:Invent 2024 re:Cap Taipei (for Developer): New Launches that facilitate Developer Workflow and Continuous Innovation
dwchiang
0
160
Docker Desktop で Docker を始めよう
zembutsu
PRO
0
170
CDKのコードレビューを楽にするパッケージcdk-mentorを作ってみた/cdk-mentor
tomoki10
0
210
Amazon Q Developerで.NET Frameworkプロジェクトをモダナイズしてみた
kenichirokimura
1
200
Featured
See All Featured
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
26
1.9k
Fashionably flexible responsive web design (full day workshop)
malarkey
406
66k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
Thoughts on Productivity
jonyablonski
68
4.4k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
Optimising Largest Contentful Paint
csswizardry
33
3k
Why Our Code Smells
bkeepers
PRO
335
57k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.6k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3.1k
KATA
mclloyd
29
14k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
120k
Done Done
chrislema
182
16k
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.