KEDA を使用した Kubernetes での Azure Functions
Azure Functions ランタイムにより、必要な場所と方法でのホスティングにおける柔軟性が提供されます。 KEDA (Kubernetes ベースのイベント ドリブン自動スケーリング) は、Azure Functions ランタイムおよびツールにシームレスに組み合わされ、Kubernetes でのイベント ドリブンな自動スケーリングを提供します。
重要
コンテナー化された関数アプリを Kubernetes 上で実行するには、KEDA を使用するか、直接デプロイを使用します。これは、無料で使用できるオープンソースの作業です。 ベスト エフォートのサポートは共同作成者とコミュニティから Azure Functions リポジトリでの GitHub の問題を使用して提供されています。 これらの問題を使用して、バグを報告し、機能要求を挙げてください。 マネージド Kubernetes のデプロイの場合は、代わりに「Azure Functions の Azure Container Apps ホスティング」を検討してください。
Kubernetes ベースの関数の動作
Azure Functions サービスは 2 つの主要コンポーネントで構成されています。ランタイムとスケール コントローラーです。 Functions ランタイムでは、ご自分のコードを実行します。 ランタイムには、関数の実行をトリガー、ログ、および管理する方法のロジックが含まれています。 Azure Functions ランタイムは、どこでも実行できます。 もう 1 つのコンポーネントは、スケール コントローラーです。 スケール コントローラーによって、関数をターゲットにしているイベントの割合が監視され、アプリを実行しているインスタンスの数がプロアクティブにスケーリングされます。 詳細については、「Azure Functions のスケールとホスティング」を参照してください。
Kubernetes ベースの Functions では、KEDA によるイベント ドリブン スケーリングを使用して、Docker コンテナー内に Functions ランタイムが提供されます。 KEDA では、0 インスタンスまでのスケールイン (インスタンスが発生していないとき) と n インスタンスまでのスケールアウトが可能です。 これは、Kubernetes 自動スケーラー (ポッドの水平自動スケーラー) 用のカスタム メトリックを公開することによって行われます。 KEDA で Functions のコンテナーを使用すると、任意の Kubernetes クラスターにおいてサーバーレス関数の機能をレプリケートできるようになります。 これらの関数は、サーバーレス インフラストラクチャ用の Azure Kubernetes Services (AKS) 仮想ノード機能を使用してデプロイすることもできます。
Kubernetes での KEDA と関数の管理
Kubernetes クラスター上で Functions を実行するには、KEDA コンポーネントをインストールする必要があります。 このコンポーネントは、次のいずれかの方法でインストールできます。
Azure Functions Core Tools:
func kubernetes install
コマンドを使用します。Helm: Kubernetes クラスターに KEDA をインストールするには、Helm を使用する方法を含め、さまざまな方法があります。 デプロイ オプションについては、KEDA サイトをご覧ください。
Kubernetes への関数アプリのデプロイ
KEDA を実行する Kubernetes クラスターには、あらゆる関数アプリをデプロイできます。 対象の関数は Docker コンテナー内で実行されるため、プロジェクトには Dockerfile が必要です。 Dockerfile は、func init
を呼び出してプロジェクトを作成するときに --docker
オプションを使用することで作成できます。 これを忘れた場合は、Functions プロジェクトのルートからいつでも func init
を再度呼び出すことができます。ただし、その際は、次の例に示すように --docker-only
オプションを使用します。
func init --docker-only
Dockerfile の生成の詳細については、func init
のリファレンスを参照してください。
イメージをビルドして関数を Kubernetes にデプロイするには、次のコマンドを実行します。
func kubernetes deploy --name <name-of-function-deployment> --registry <container-registry-username>
この例では、<name-of-function-deployment>
をお使いの関数アプリの名前に置き換えます。
deploy コマンドによって、次の処理が実行されます。
- 先ほど作成した Dockerfile は、関数アプリのローカル イメージを構築するために使用されます。
- ローカル イメージにタグが付けられ、ユーザーがログインしたコンテナー レジストリにプッシュされます。
- マニフェストが作成され、Kubernetes
Deployment
リソース、ScaledObject
リソース、local.settings.json
からインポートされた環境変数を含むSecrets
を定義するクラスターに適用されます。
詳細については、func kubernetes deploy
コマンドに関するセクションを参照してください。
プライベート レジストリから関数アプリをデプロイする
前述のフローは、プライベート レジストリにも使用できます。 コンテナー イメージをプライベート レジストリからプルする場合は、func kubernetes deploy
を実行する際に --pull-secret
フラグを指定して、プライベート レジストリの資格情報を保持する Kubernetes シークレットを参照します。
Kubernetes からの関数アプリの削除
デプロイ後は、作成された関連する Deployment
、ScaledObject
、Secrets
を削除することによって、関数を削除できます。
kubectl delete deploy <name-of-function-deployment>
kubectl delete ScaledObject <name-of-function-deployment>
kubectl delete secret <name-of-function-deployment>
Kubernetes からの KEDA のアンインストール
次のいずれかの方法で、対象のクラスターから KEDA を削除できます。
Azure Functions Core Tools:
func kubernetes remove
コマンドを使用します。Helm: KEDA のサイト上のアンインストール手順を参照してください。
KEDA でサポートされているトリガー
KEDA は、次の Azure Function トリガーをサポートしています。
HTTP トリガーのサポート
HTTP トリガーを公開する Azure Functions は使用することはできますが、KEDA では直接管理されません。 KEDA prometheus トリガーを利用すると、HTTP Azure Functions を 1 から n インスタンスにスケーリングできます。
次の手順
詳細については、次のリソースを参照してください。