分享方式:


搭配 KEDA 使用 Kubernetes 上的 Azure Functions

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

重要

透過使用 KEDA 或直接部署在 Kubernetes 上執行容器化函式應用程式是一項開放原始碼工作的成果,您可以免費使用。 參與者和社群可透過使用 Azure Functions 存放庫中的 GitHub 問題來提供最佳的工作成果支援。 請使用這些問題來報告錯誤並提出功能要求。 針對受控 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 個執行個體

後續步驟

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