Slide 1

Slide 1 text

Knativeで作るDIY FaaS
 @toshi0607


Slide 2

Slide 2 text

※https://fukuoka.serverlessdays.io/

Slide 3

Slide 3 text

Knativeで作るDIY FaaS
 ● ワークショップ
 ○ https://bit.ly/35SATGr
 ○ GitHub toshi0607
 ● スライド
 ○ https://bit.ly/2P9SWls
 ○ SpeakerDeck toshi0607


Slide 4

Slide 4 text

ワークショップの楽しみ方
 ● 自分のペースでやりたい方
 ○ どんどん進めて行ってください!
 ○ 各Stepに「参考」セクション
 ○ いますぐ着手しても大丈夫です!
 ● 解説を聞きながらじっくり進めたい方
 ○ 僕と一緒に手を動かしていきましょう!
 ○ ゆっくり目にやります
 ○ ワークショップの前にKubernetes、Knativeの概要説明します


Slide 5

Slide 5 text

自己紹介
 ● 杉田 寿憲
 ○ Toshinori Sugita
 ○ toshi0607
 ● Software Engineer@メルペイ
 ○ Go、gPRC、GKEなマイクロサービスのバックエンド開発
 ● 本
 ○ 『Knativeソースコードリーディング入門』
 ○ 『Knativeの歩き方 KubernetesからServerlessを訪ねて』
 ○ 『GoとSAMで学ぶAWS Lambda』
 ○ 『Extensive Xamarin(共著)』


Slide 6

Slide 6 text

メルペイでのマイクロサービス開発
 各機能を実現する マイクロサービス開発チーム ● バックエンドエンジニア ● フロントエンドエンジニア ● iOS/Androidエンジニア ● デザイナー ● PM 共通基盤とサービス全体を 見る横串チーム ● SRE ● アーキテクトチーム ● Microservices Platformチーム ● Data platformチーム ● ソリューションチーム

Slide 7

Slide 7 text

Kubernetesとは?
 Kubernetes (K8s) is an open-source system for automating deployment, scaling, and management of containerized applications.
 ※https://kubernetes.io/

Slide 8

Slide 8 text

Kubernetesのコンセプト
 ● 「あるべきリソースの状態」を宣言的 に定義した設定を適用
 ● K8sのコントローラーがリソースを監 視し、「あるべきリソースの状態」を維 持し続ける
 →故障時の自動復旧や高負荷時のオー トスケールなどで運用負荷を低減
 ※https://kubernetes.io/docs/concepts/workloads/controllers/deployment/

Slide 9

Slide 9 text

ワークショップで登場するリソース
 ● Pod(Workload)
 ○ 1つ以上のコンテナから成る最小実行単位
 ● ReplicaSet(Workload)
 ○ Podの数量管理
 ● Deployment(Workload)
 ● ReplicaSet、Podのデプロイ戦略管理
 ● Service(LB)
 ○ Podへのロードバランシングとエンドポイントの提供
 ● Secret(Config)
 ○ Podが参照する機密情報
 ※https://kubernetes.io/docs/concepts/

Slide 10

Slide 10 text

ワークショップで登場するリソース
 ※https://kubernetes.io/docs/concepts/ Deployment
 Service
 ReplicaSet
 Pod
 Pod
 Secret


Slide 11

Slide 11 text

Kubernetesのアーキテクチャ
 worker node2
 worker node1
 kubectl
 etcd
 kube-
 apiserver
 kube-
 scheduler
 kube-
 controller-
 manager
 kube-proxy
 kubelet
 kube-proxy
 kubelet
 Docker etc...
 Docker etc...
 ・・・ ※https://kubernetes.io/docs/concepts/architecture/cloud-controller/ master node

Slide 12

Slide 12 text

カスタムリソース
 ● 独自のリソースを追加できる
 ○ CustomResourceDefinition
 ○ API server aggrigation
 ● バリデーションやその他メタ情報を定 義
 ● CRDで定義したカスタムリソースに対 するCRUDが可能になる
 ※https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/

Slide 13

Slide 13 text

カスタムコントローラー
 ● 独自のコントローラーを追加できる
 ● 既存のリソースやカスタムリソースの変更を検知し、理想状態にな るよう調整する
 ● カスタムコントローラーのDockerイメージをDeploymentでK8sクラス ター上にデプロイする
 ※https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/

Slide 14

Slide 14 text

Kubernetesでのアプリケーション開発
 ● コードを書く
 ● Dockerfileを書く
 ● Dockerイメージをビルドする
 ● Dockerイメージをレジストリにプッシュする
 ● サービスをデプロイする
 ● サービスをインターネットに公開する
 ● モニタリングの設定
 ● オートスケールの設定
 →開発者はビジネスロジックの実装により集中したい


Slide 15

Slide 15 text

Knativeとは?
 Kubernetes-based platform to build, deploy, and manage modern serverless workloads
 ※https://github.com/knative

Slide 16

Slide 16 text

Knativeとは?
 ● Kubernetesのリソースを抽象化する
 ○ 開発者から見てよりシンプルに
 ● 独自のPaaS/FaaSを構築するためのパーツを提供
 ○ Serving、Eventingから構成される
 ● よくあるが難しい課題を解決
 ○ コンテナのデプロイ
 ○ ソースコードからURLでアクセスできるアプリケーションへ
 ○ ブルー/グリーンデプロイを伴うルーティングとトラフィック管理
 ○ オートスケーリングと需要に基づくワークロードのサイズ設定
 ○ 実行中のサービスをイベントエコシステムに結び付ける
 ※https://github.com/knative/docs 開発者・運用者がよりビジネス価値に集中できるプラットフォームを構築する


Slide 17

Slide 17 text

Knativeスタック
 ※https://github.com/knative/docs/tree/master/docs Kubernetes
 Istio, Gloo, Ambassador or Kourier 
 Serving
 Build
 Eventing
 Platform
 Gateway
 Primitives
 GitLab Serverless
 Your Own!
 Pivotal Function Service
 Cloud Run
 SAP Kyma
 Knative Lambda Runtimes
 Products


Slide 18

Slide 18 text

ロールによるメリットの違い
 ※https://github.com/knative/docs/tree/master/docs

Slide 19

Slide 19 text

ワークショップの構成
 ※https://github.com/toshi0607/build-your-own-platform-with-knative Step コンテンツ 想定ロール 0 クラスタの構築 プラットフォーム 1 各コンポーネントの理解 プラットフォーム 2 Knativeベースのプラットフォーム利用 開発者 3 DIY FaaS Platform プラットフォーム 4 Knativeベースのマネージドサービス利用 開発者 5 後片付けと参考情報 -

Slide 20

Slide 20 text

※https://techbookfest.org/event/tbf07

Slide 21

Slide 21 text

ご参加ありがとうございました!
 Knativeで作るDIY FaaS