じゃあ、おうちで学べる

本能を呼び覚ますこのコードに、君は抗えるか

OpenFaaS/Kubernetesを支える技術

概要

OpenFaaSOSSで開発されているFaaSプラットフォームで,リクエストに応じてコードを実行,状況に応じて自動的にインスタンスをスケールさせるといった,FaaSで実現される機能を実装している.
本記事ではOpenFaaS/Kubernetesという技術で何ができるかという記事は無限に生成されているのでそれらがどのように実現されているのか説明していく.OpenFaaS/Kubernetes がどのような技術を用いてを支える技術である.

OpenFaaSについて日本語での資料はkenfdevさんの資料がとても分かりやすいです.

OpenFaaSの構成

OpenFaaSではKubernetesクラスタ上で様々な仕組みがマイクロサービスのように連携していてFaaSの仕組みを実現している.その中でもいくつか紹介していく.

Gateway について

Gatewayは,Functionへの外部ルートを提供し,プロメテウス経由でクラウドネイティブメトリックを収集します.GatewayにはUIが組み込まれており,OpenFaaS Function Storeから独自の関数や関数を展開して呼び出すことができます.Gatewayは,Docker SwarmまたはKubernetes APIのサービスレプリカ数を変更することによって,要求に応じて機能を拡張します.AlertManagerによって生成されたアラートは ,/system /alert endpointで受信できます. github.com Ingress - Kubernetes

CLI について

CLIを使用して,OpenFaaSに関数をビルドしてデプロイすることができます.サポートされている言語テンプレート(Node.js,Python,CSharp,Rubyなど)からOpenFaaS関数を構築できます.つまり,(handler.py / handler.js)のようなハンドラファイルを作成するだけで,CLIはDockerイメージを作成するために残りの処理を行います.kubectlなどのコマンドからデプロイすることもcurlコマンドで呼び出しも可能だがcliで実施したほうが圧倒的に楽.   github.com

Function Watchdogについて

API Gatewayで受け入れられたHTTPリクエストをいい感じに加工して,選択したアプリケーションを呼び出すことです.ウォッチドッグはGolangの小さなウェブサーバーです. github.com

Kubernetes で実現するために

faas-provider

OpenFaaSは,コンテナを用いてサーバレスFunctionを構築し,展開するためのフレームワークです.faas-providerは,独自のOpenFaaS Backendを構築するための共通のテンプレートまたはインターフェイスで,Kuberntetesでの(faas-netes)https://github.com/openfaas/faas-netesがあったり(faas-rancher)https://github.com/kenfdev/faas-rancherがあったりする. github.com

faas-netes

faas-providerに準拠したKubernetes実装で既存のREST APICLI,およびUIやデプロイに互換性があります. github.com

faas-idler

OpenFaaSは一定期間使用していない状態でレプリカを0にスケールする機能を提供します. github.com

nats-queue-worke

これは、関数要求の非同期処理を有効にする.queue-workeです. github.com

prometheus

監視するためのPrometeuthの設定集 github.com

alertmanager

Endpointする設定について github.com

Grafana

統計情報を集めたい時は入れて確認してください. github.com

最後

OpenFaaSはその他にも多くの技術スタックで成り立っていますが今回はこの辺で終わらせます.コードもアーキテクチャもとても面白いのでぜひコードリーディングしたら面白いと思います.

参照

Thanks for the reference