次の方法で共有


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 では、ゼロ インスタンスまでのスケールイン (インスタンスが発生していないとき) と 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 オプションを使用することで作成できます。 Dockerfile の作成を忘れた場合は、コード プロジェクトのルートからいつでも func init を再度呼び出すことができます。

  1. (省略可能) Dockerfile を作成する必要がある場合は、--docker-only オプションを指定して func init コマンドを使用します。

    func init --docker-only
    

    Dockerfile の生成の詳細については、func init のリファレンスを参照してください。

  2. func kubernetes deploy コマンドを使用してイメージをビルドし、コンテナー化された関数アプリを 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 を実行する際に --pull-secret フラグを指定して、プライベート レジストリの資格情報を保持する Kubernetes シークレットを参照します。

Kubernetes からの関数アプリの削除

デプロイ後は、作成された関連する DeploymentScaledObjectSecrets を削除することによって、関数を削除できます。

kubectl delete deploy <name-of-function-deployment>
kubectl delete ScaledObject <name-of-function-deployment>
kubectl delete secret <name-of-function-deployment>

Kubernetes からの KEDA のアンインストール

次のいずれかの方法で、対象のクラスターから KEDA を削除できます。

KEDA でサポートされているトリガー

KEDA は、次の Azure Function トリガーをサポートしています。

HTTP トリガーのサポート

HTTP トリガーを公開する Azure Functions は使用することはできますが、KEDA では直接管理されません。 KEDA prometheus トリガーを使用すると、HTTP Azure Functions を 1 から n インスタンスにスケーリングできます。

次のステップ

詳細については、次のリソースを参照してください。