KEDA を使用した Kubernetes での Azure FunctionsAzure Functions on Kubernetes with KEDA

Azure Functions ランタイムにより、必要な場所と方法でのホスティングにおける柔軟性が提供されます。The Azure Functions runtime provides flexibility in hosting where and how you want. KEDA (Kubernetes ベースのイベント ドリブン自動スケーリング) は、Azure Functions ランタイムおよびツールにシームレスに組み合わされ、Kubernetes でのイベント ドリブンな自動スケーリングを提供します。KEDA (Kubernetes-based Event Driven Autoscaling) pairs seamlessly with the Azure Functions runtime and tooling to provide event driven scale in Kubernetes.

Kubernetes ベースの関数の動作How Kubernetes-based functions work

Azure Functions サービスは 2 つの主要コンポーネントで構成されています。ランタイムとスケール コントローラーです。The Azure Functions service is made up of two key components: a runtime and a scale controller. Functions ランタイムでは、ご自分のコードを実行します。The Functions runtime runs and executes your code. ランタイムには、関数の実行をトリガー、ログ、および管理する方法のロジックが含まれています。The runtime includes logic on how to trigger, log, and manage function executions. Azure Functions ランタイムは、どこでも実行できます。The Azure Functions runtime can run anywhere. もう 1 つのコンポーネントは、スケール コントローラーです。The other component is a scale controller. スケール コントローラーによって、関数をターゲットにしているイベントの割合が監視され、アプリを実行しているインスタンスの数がプロアクティブにスケーリングされます。The scale controller monitors the rate of events that are targeting your function, and proactively scales the number of instances running your app. 詳細については、「Azure Functions のスケールとホスティング」を参照してください。To learn more, see Azure Functions scale and hosting.

Kubernetes ベースの Functions では、KEDA によるイベント ドリブン スケーリングを使用して、Docker コンテナー内に Functions ランタイムが提供されます。Kubernetes-based Functions provides the Functions runtime in a Docker container with event-driven scaling through KEDA. KEDA では、0 インスタンスまでのスケールイン (インスタンスが発生していないとき) と n インスタンスまでのスケールアウトが可能です。KEDA can scale in to 0 instances (when no events are occurring) and out to n instances. これは、Kubernetes 自動スケーラー (ポッドの水平自動スケーラー) 用のカスタム メトリックを公開することによって行われます。It does this by exposing custom metrics for the Kubernetes autoscaler (Horizontal Pod Autoscaler). KEDA で Functions のコンテナーを使用すると、任意の Kubernetes クラスターにおいてサーバーレス関数の機能をレプリケートできるようになります。Using Functions containers with KEDA makes it possible to replicate serverless function capabilities in any Kubernetes cluster. これらの関数は、サーバーレス インフラストラクチャ用の Azure Kubernetes Services (AKS) 仮想ノード機能を使用してデプロイすることもできます。These functions can also be deployed using Azure Kubernetes Services (AKS) virtual nodes feature for serverless infrastructure.

Kubernetes での KEDA と関数の管理Managing KEDA and functions in Kubernetes

Kubernetes クラスター上で Functions を実行するには、KEDA コンポーネントをインストールする必要があります。To run Functions on your Kubernetes cluster, you must install the KEDA component. このコンポーネントは、Azure Functions Core Tools を使用してインストールできます。You can install this component using Azure Functions Core Tools.

Helm を使用したインストールInstalling with Helm

Kubernetes クラスターに KEDA をインストールするには、Helm を使用する方法を含め、さまざまな方法があります。There are various ways to install KEDA in any Kubernetes cluster including Helm. デプロイ オプションについては、KEDA サイトをご覧ください。Deployment options are documented on the KEDA site.

Kubernetes への関数アプリのデプロイDeploying a function app to Kubernetes

KEDA を実行する Kubernetes クラスターには、あらゆる関数アプリをデプロイできます。You can deploy any function app to a Kubernetes cluster running KEDA. 関数は Docker コンテナー内で実行されるため、プロジェクトには Dockerfile が必要です。Since your functions run in a Docker container, your project needs a Dockerfile. まだそれがない場合は、Functions プロジェクトのルートで次のコマンドを実行して、Dockerfile を追加できます。If it doesn't already have one, you can add a Dockerfile by running the following command at the root of your Functions project:

func init --docker-only

イメージをビルドして関数を Kubernetes にデプロイするには、次のコマンドを実行します。To build an image and deploy your functions to Kubernetes, run the following command:

注意

Core Tools では、イメージのビルドと発行に Docker CLI が活用されます。The Core Tools will leverage the docker CLI to build and publish the image. あらかじめ Docker がインストールされ、ご利用のアカウントに docker login で接続されていることを確認してください。Be sure to have docker installed already and connected to your account with docker login.

func kubernetes deploy --name <name-of-function-deployment> --registry <container-registry-username>

<name-of-function-deployment> をお使いの関数アプリの名前に置き換えます。Replace <name-of-function-deployment> with the name of your function app.

これにより、Kubernetes Deployment リソース、ScaledObject リソース、local.settings.json からインポートされる環境変数を含む Secrets が作成されます。This creates a Kubernetes Deployment resource, a ScaledObject resource, and Secrets, which includes environment variables imported from your local.settings.json file.

プライベート レジストリから関数アプリをデプロイするDeploying a function app from a private registry

前述のフローは、プライベート レジストリにも使用できます。The above flow works for private registries as well. コンテナー イメージをプライベート レジストリからプルする場合は、func kubernetes deploy を実行する際に --pull-secret フラグを指定して、プライベート レジストリの資格情報を保持する Kubernetes シークレットを参照します。If you are pulling your container image from a private registry, include the --pull-secret flag that references the Kubernetes secret holding the private registry credentials when running func kubernetes deploy.

Kubernetes からの関数アプリの削除Removing a function app from Kubernetes

デプロイ後は、作成された関連する DeploymentScaledObjectSecrets を削除することによって、関数を削除できます。After deploying you can remove a function by removing the associated Deployment, ScaledObject, an Secrets created.

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

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

KEDA をアンインストールする手順については、KEDA サイトに記載されています。Steps to uninstall KEDA are documented on the KEDA site.

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

KEDA は、次の Azure Function トリガーをサポートしています。KEDA has support for the following Azure Function triggers:

HTTP トリガーのサポートHTTP Trigger support

HTTP トリガーを公開する Azure Functions は使用することはできますが、KEDA では直接管理されません。You can use Azure Functions that expose HTTP triggers, but KEDA doesn't directly manage them. KEDA prometheus トリガーを利用すると、HTTP Azure Functions を 1 から n インスタンスにスケーリングできますYou can leverage the KEDA prometheus trigger to scale HTTP Azure Functions from 1 to n instances.

次の手順Next Steps

詳細については、次のリソースを参照してください。For more information, see the following resources: