ぼうけんにでかけよう
Kubernetes KEDA
2019-12-14
Tsukasa Kato
Profile
• Tsukasa Kato / 加藤 司
• 株式会社オルターブース
テクニカルアーキテクト
• Microsoft MVP for Microsoft Azure
• https://tsukatoh.hatenablog.com/
• https://www.slideshare.net/tsukasakatou9
Agenda
• Kubernetes
• Kubernetes-based Serverless
• KEDA
上記を用いたFaaSを知っていただく
Kubernetes
Kubernetes
• コンテナーアプリケーションを管理するためのオーケスト
レーションツール
• 自動デプロイ、スケーリング、アプリ・コンテナーの運用
自動化
• Webコンソールが用意されており、GUIでの管理が可能
• Google が社内のオーケストレーションツール「Borg」を
元に開発
• CNCFに寄贈され管理されておりオープンソースで提供さ
れている
• マイクロサービスを構築する基盤として採用される事が多
い
Kubernetes Architecture
でもKubernetesって構築が面倒…
Kubernetes
managed
services
Google Kubernetes Engine
Azure Kubernetes Service
Amazon Elastic Container Service for Kubernetes
IBM Cloud Kubernetes Service
Alibaba Cloud Container Service for Kubernetes
Rancher
NetApp Kubernetes Service
そうは言ってもマスターノードだけが
マネージドでしょ?
Cluster Autoscaler
• 追加容量が必要になった場合は新しいノードが自動的に追
加され、不要になれば削除される
• 実行するワークロードの量に基づいてクラスタのサイズを
自動的に変更
• リソース制約のためにノードでスケジュールできないPod
を監視
• ノードプール単位で機能
• Horizontal Pod Autoscaler(HPA)と連携して機能してノー
ドとポッドの管理を行う
Horizontal Pod Autoscaler(HPA)
• Kubernetes クラスターのメトリック サーバーを使用して、
Podのリソースの需要をモニターし、 アプリケーションで
必要なリソースが増えるとその需要を満たすためにレプリ
ケーションコントローラー、デプロイ、レプリカセット内
のポッドの数を自動的にスケーリング
• また、リソースが不要になったときにスケールインできる
• Kubernetes 標準APIオブジェクトとコントローラとして実
装されている
Kubernetes-based
Serverless
Knative KEDA Virtual Kubelet
Kubernetes-based Serverless
Knative
• Serverless ワークロードをビルド、デプロイ、管理機能を提
供するKubernetesベースのプラットフォーム
• Scale-to-zero、自動
スケーリング、クラ
スタ内ビルド、
Kubernetes 上のク
ラウド ネイティブ
アプリケーション用
のイベント フレーム
ワークなどの機能が
ある
https://github.com/knative
Knative Components
Serving
•スケール
•カナリアリース
•ルーティング
•リクエスト受信
Building
•コンテナのビルド
•パッケージング
Eventing
•イベントソースの抽
象化
•コードの発火
Virtual Kubelet
• Kubeletの仮想実装で、汎用的にk8sクラスタから外部リソー
スを利用できる
• バースティングなど
を目的として利用す
るのがベター
• Microsoftが始めた
OSSプロジェクトで、
現在はCNCFによっ
て管理されている
https://github.com/virtual-kubelet/virtual-kubelet
Virtual
Kubelet
Alibaba Cloud ECI Provider
Azure Container Instances Provider
Azure Batch GPU Provider
AWS Fargate Provider
HashiCorp Nomad
OpenStack Zun
Serverless Container
Serverless Containers = Nodeless Containers
VM、クラスタ
(ノード)が不要
コンピュート課金
オンデマンド実行
可能
AWS FargateAzureContainer
Instances
Alibaba Elastic
Container Instance
KEDA
KEDA
(Kubernetes-based Event Driven Autoscaling Component)
K8sでイベント駆動型の
Podレベルオートスケールを可能にするフレームワーク
• Red HatとMicrosoftのエンジニアリングチームのコラボ
レーションの結果として開始されたプロジェクト
• Kubernetesクラスターにインストールしてイベントベース
のコンテナースケーリングを有効にすることができるオープ
ンソースコンポーネントとして定義される
• CPUメトリックスとメモリを活用してコンテナをゼロからス
ケーリングし、Kubernetes機能を拡張する
KEDAの特徴
イベント
ドリブン
オート
スケーリング
ビルトイン
スケーラー
複数のワーク
ロードタイプ
非ベンダー依存
Azure Functions
サポート
Architecture
• Scaler:選択したソースに接続
して、メトリックを読み取る
• Metrics adapter:Scalerに
よって読み取られたメトリック
をHorizontal Pod Autoscaler
に転送して、アプリの自動ス
ケーリングを有効にする
• Controller:0⇔1のスケーリン
グを提供する
https://keda.sh/concepts/overview/#how-keda-works
KEDA
• Kubernetesのスケーリング「Horizontal pod autoscaler
(HPA)」はPodのCPUやメモリ消費量で調整される
• KEDAは非HTTPなイベントに連動してクラスターへのデプロ
イを自動スケールできる
• HPAなどのKubernetesコンポーネントとネイティブに統合
され、クラウドとエッジの両方で実行できる
• KEDAがZero Scale in/outを行い、他はHPAがScale in/out
する
• 様々なスケーラーが用意されており、今後も追加予定
• MIT Licenseで提供され、CNCFへの登録も進められている
Scalers
Scalers
• Apache Kafka Topic
• AWS Cloudwatch
• AWS SQS Queue
• Azure Event Hubs
• Azure Service Bus
• Azure Storage Queue
• External
• Google Cloud Platform
Pub/Sub
• Huawei Cloudeye
• Liiklus Topic
• NATS Streaming
• Prometheus
• RabbitMQ Queue
• Redis Lists
KEDAを使用するには
以下の方法でデプロイすることで利用可能
• HelmでKEDAをデプロイ
→通常はこちら
• Kubectlでyamlからのデプロイ
→minikubeなどHelmを使わない場合はこちら
HelmでKEDAをデプロイ
1. Helm repoを追加
2. Helm repoをアップデート
3. KEDAのHelm chartをインストール
$ helm repo add kedacore https://kedacore.github.io/charts
$ helm repo update
$ helm install kedacore/keda --namespace keda --name keda
$ kubectl create namespace keda
$ helm install keda kedacore/keda --namespace keda
Helm 2.x
Helm 3.x
Kubectlでyamlからのデプロイ
1. Githubからサンプルをダウンロードしてインストール
https://github.com/kedacore/keda
$ kubectl create namespace keda
$ kubectl apply -f deploy/crds/keda.k8s.io_scaledobjects_crd.yaml
$ kubectl apply -f deploy/crds/keda.k8s.io_triggerauthentications_crd.yaml
$ kubectl apply -f deploy/
KEDAをデプロイ
• keda-operator podが追加される
Azure Functions Core Toolsのインストール
• Azure Functions Core Toolsをインストールすることで
Kubernetes上でAzure Functionsが利用可能となる
• 以前はスケールも自分での実装が必要だったが、KEDAを使
うことでスケールの実装が不要となった
• インストールするには以下のコマンドを投入する
※要作業端末へのAzure Functions Core Toolsインストール
$ func kubernetes install --namespace keda
Azure Functions Core Toolsをデプロイ
• kedaとosiris関連の podが追加される
DEMO
DEMO Architecture
Azure Kubernetes Service
Azure Storage Queue
まとめ
• KEDAはKubernetesの上で実行できるFaaS
• 各クラウドはもちろんオンプレミスでも実行が可能
• Virtual Kubelet + KEDAはバースティングな状況には向いて
いる
• KEDAはまだまだ発展途上のプロダクトなので今後に期待
• Serverlessの仕様が標準化され、ベンダーを意識しない世界
が来てほしい
ご清聴ありがとうございました

ぼうけんにでかけよう Kubernetes KEDA