搭配 KEDA 使用 Kubernetes 上的 Azure Functions
Azure Functions 執行階段在裝載位置和裝載方式上有很大的彈性。 KEDA (Kubernetes-based Event Driven Autoscaling) 能與 Azure Functions 執行階段和工具完美搭配,在 Kubernetes 中提供由事件驅動的規模調整。
重要
透過使用 KEDA 或直接部署在 Kubernetes 上執行容器化函式應用程式是一項開放原始碼工作的成果,您可以免費使用。 參與者和社群可透過使用 Azure Functions 存放庫中的 GitHub 問題來提供最佳的工作成果支援。 請使用這些問題來報告錯誤並提出功能要求。
如需完全支援的 Kubernetes 部署,請考慮裝載 Azure Functions 的 Azure Container Apps。
以 Kubernetes 為基礎的函式如何運作
Azure Functions 服務是由兩個主要元件所組成:執行階段和調整控制器。 函式執行階段會執行您的程式碼。 執行階段包含如何觸發、記錄和管理函式執行的邏輯。 Azure Functions 執行階段可以在「任何位置」執行。 另一個元件則是調整控制器。 「調整控制器」會監視以您函式為目標的事件比率,並主動調整執行應用程式的執行個體數目。 若要深入了解,請參閱 Azure Functions 規模調整和主控。
以 Kubernetes 為基礎的函式會在 Docker 容器式執行階段並透過 KEDA 進行事件驅動的規模調整。 KEDA 可以相應縮小為零個實例(未發生任何事件時)和向外調整為 n 個實例。 其運作原理是公開 Kubernetes 自動調整程式的自訂計量 (水平 Pod 自動調整程式)。 將 Functions 容器與 KEDA 搭配使用,可讓您在任何 Kubernetes 叢集中複寫無伺服器函式功能。 針對無伺服器基礎結構,這些函式也可以使用 Azure Kubernetes Services (AKS) 虛擬節點功能來進行部署。
在 Kubernetes 中管理 KEDA 和函式
若要在 Kubernetes 叢集上執行函式,您必須安裝 KEDA 元件。 您可以使用下列其中一個方式安裝此元件:
Azure Functions Core Tools:使用
func kubernetes install
命令。Helm:在任何 Kubernetes 叢集中安裝 KEDA 的方式有很多種,包括 Helm。 部署選項接記載於 KEDA 網站。
將函式應用程式部署至 Kubernetes
您可以將任何函式應用程式部署到執行 KEDA 的 Kubernetes 叢集。 因為您的函式會在 Docker 容器中執行,所以您的專案需要 Dockerfile。 呼叫 func init
建立專案時,您可以使用 --docker
選項來建立 Dockerfile。 如果您忘記建立 Dockerfile,您隨時都可以從程式代碼專案的根目錄再次呼叫 func init
。
(選擇性)如果您需要建立 Dockerfile,請使用
func init
命令搭配--docker-only
選項:func init --docker-only
若要深入了解 Dockerfile 產生,請參閱
func init
參考。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
資源和Secrets
,其包含從local.settings.json
檔案匯入的環境變數。
從私人登錄部署函式應用程式
先前的部署步驟也適用於私人登錄。 如果您要從私人登錄提取容器映像,請在執行 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 函式觸發程序:
HTTP 觸發程序支援
您可以使用公開 HTTP 觸發程序的 Azure Functions,但 KEDA 不會直接管理這些項目。 您可以使用 KEDA prometheus 觸發程式,將 HTTP Azure Functions 從一個調整為 n
實例。
後續步驟
如需詳細資訊,請參閱以下資源: