搭配 KEDA 使用 Kubernetes 上的 Azure Functions

Azure Functions 執行階段在裝載位置和裝載方式上有很大的彈性。 KEDA (Kubernetes-based Event Driven Autoscaling) 能與 Azure Functions 執行階段和工具完美搭配,在 Kubernetes 中提供由事件驅動的規模調整。

重要

透過使用 KEDA 或直接部署在 Kubernetes 上執行容器化函式應用程式是一項開放原始碼工作的成果,您可以免費使用。 參與者和社群可透過使用 Azure Functions 存放庫中的 GitHub 問題來提供最佳的工作成果支援。 請使用這些問題來報告錯誤並提出功能要求。 將容器化函式應用程式部署到 Azure 容器應用程式 (在 Azure 中的受控 Kubernetes 叢集上執行) 目前處於預覽階段。 如需詳細資訊,請參閱裝載 Azure Functions 的 Azure 容器應用程式

以 Kubernetes 為基礎的函式如何運作

Azure Functions 服務是由兩個主要元件所組成:執行階段和調整控制器。 函式執行階段會執行您的程式碼。 執行階段包含如何觸發、記錄和管理函式執行的邏輯。 Azure Functions 執行階段可以在「任何位置」執行。 另一個元件則是調整控制器。 「調整控制器」會監視以您函式為目標的事件比率,並主動調整執行應用程式的執行個體數目。 若要深入了解,請參閱 Azure Functions 規模調整和主控

以 Kubernetes 為基礎的函式會在 Docker 容器式執行階段並透過 KEDA 進行事件驅動的規模調整。 KEDA 可以縮減為 0 個執行個體 (沒有發生任何事件時),以及擴增到 n 個執行個體。 其運作原理是公開 Kubernetes 自動調整程式的自訂計量 (水平 Pod 自動調整程式)。 將 Functions 容器與 KEDA 搭配使用,可讓您在任何 Kubernetes 叢集中複寫無伺服器函式功能。 針對無伺服器基礎結構,這些函式也可以使用 Azure Kubernetes Services (AKS) 虛擬節點功能來進行部署。

在 Kubernetes 中管理 KEDA 和函式

若要在 Kubernetes 叢集上執行函式,您必須安裝 KEDA 元件。 您可以使用下列其中一個方式安裝此元件:

將函式應用程式部署至 Kubernetes

您可以將任何函式應用程式部署到執行 KEDA 的 Kubernetes 叢集。 因為您的函式會在 Docker 容器中執行,所以您的專案需要 Dockerfile。 呼叫 func init 建立專案時,您可以使用 --docker 選項來建立 Dockerfile。 如果您忘記執行此動作,您可以隨時從 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>

部署命令會執行下列動作:

  1. 之前建立的 Dockerfile 可用來建置函式應用程式的本機映像。
  2. 標記本機映像後,映像會推送至使用者登入的容器登錄。
  3. 建立資訊清單後,清單會套用至叢集,並定義 Kubernetes Deployment 資源、ScaledObject 資源和 Secrets,其包含從 local.settings.json 檔案匯入的環境變數。

若要深入了解,請參閱 func kubernetes deploy 命令

從私人登錄部署函式應用程式

上述流程也適用於私人登錄。 如果您要從私人登錄提取容器映像,請在執行 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 函式觸發程序:

HTTP 觸發程序支援

您可以使用公開 HTTP 觸發程序的 Azure Functions,但 KEDA 不會直接管理這些項目。 您可以利用 KEDA Prometheus 觸發程序,將 HTTP Azure Functions 從 1 個執行個體擴增為 n 個執行個體

後續步驟

如需詳細資訊,請參閱以下資源: