Dela via


Azure Functions på Kubernetes med KEDA

Azure Functions-körningen ger flexibilitet när det gäller att vara värd för var och hur du vill. KEDA (Kubernetes-baserad händelsedriven autoskalning) parar sömlöst med Azure Functions-körningen och verktygen för att tillhandahålla händelsedriven skalning i Kubernetes.

Viktigt!

Att köra dina containerbaserade funktionsappar på Kubernetes, antingen med hjälp av KEDA eller direktdistribution, är en insats med öppen källkod som du kan använda utan kostnad. Stöd för bästa arbete tillhandahålls av deltagare och från communityn med hjälp av GitHub-problem på Azure Functions-lagringsplatsen. Använd dessa problem för att rapportera buggar och skapa funktionsbegäranden. För hanterade Kubernetes-distributioner bör du i stället överväga Azure Container Apps som värd för Azure Functions.

Så här fungerar Kubernetes-baserade funktioner

Azure Functions-tjänsten består av två viktiga komponenter: en körning och en skalningskontrollant. Functions-körningen kör och kör koden. Körningen innehåller logik om hur du utlöser, loggar och hanterar funktionskörningar. Azure Functions-körningen kan köras var som helst. Den andra komponenten är en skalningskontrollant. Skalningskontrollanten övervakar antalet händelser som riktar sig mot din funktion och skalar proaktivt antalet instanser som kör appen. Mer information finns i Skala och hantera Azure Functions.

Kubernetes-baserade funktioner tillhandahåller Functions-körningen i en Docker-container med händelsedriven skalning via KEDA. KEDA kan skalas in till 0 instanser (när inga händelser inträffar) och ut till n-instanser . Det gör den genom att exponera anpassade mått för Kubernetes autoskalning (horisontell podd autoskalning). Genom att använda Functions-containrar med KEDA kan du replikera serverlösa funktionsfunktioner i alla Kubernetes-kluster. Dessa funktioner kan också distribueras med hjälp av funktionen virtuella Azure Kubernetes Services-noder (AKS) för serverlös infrastruktur.

Hantera KEDA och funktioner i Kubernetes

Om du vill köra Functions i kubernetes-klustret måste du installera KEDA-komponenten. Du kan installera den här komponenten på något av följande sätt:

  • Azure Functions Core Tools: med kommandot func kubernetes install.

  • Helm: det finns olika sätt att installera KEDA i alla Kubernetes-kluster, inklusive Helm. Distributionsalternativ dokumenteras på KEDA-webbplatsen.

Distribuera en funktionsapp till Kubernetes

Du kan distribuera valfri funktionsapp till ett Kubernetes-kluster som kör KEDA. Eftersom dina funktioner körs i en Docker-container behöver projektet en Dockerfile. Du kan skapa en Dockerfile med hjälp --docker av alternativet när du anropar func init för att skapa projektet. Om du har glömt att göra detta kan du alltid anropa func init igen från roten för ditt Functions-projekt, den --docker-only här gången med hjälp av alternativet, som du ser i följande exempel.

func init --docker-only

Mer information om Dockerfile-generering finns i referensen func init .

Kör följande kommando för att skapa en avbildning och distribuera dina funktioner till Kubernetes:

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

I det här exemplet ersätter du <name-of-function-deployment> med namnet på funktionsappen.

Kommandot deploy gör följande:

  1. Den Dockerfile som skapades tidigare används för att skapa en lokal avbildning för funktionsappen.
  2. Den lokala avbildningen är taggad och push-överförd till containerregistret där användaren är inloggad.
  3. Ett manifest skapas och tillämpas på klustret som definierar en Kubernetes-resurs Deployment , en ScaledObject resurs och Secrets, som innehåller miljövariabler som importerats från local.settings.json filen.

Mer information finns i func kubernetes deploy kommandot .

Distribuera en funktionsapp från ett privat register

Ovanstående flöde fungerar även för privata register. Om du hämtar containeravbildningen --pull-secret från ett privat register tar du med flaggan som refererar till Kubernetes-hemligheten med autentiseringsuppgifterna för det privata registret när du kör func kubernetes deploy.

Ta bort en funktionsapp från Kubernetes

När du har distribuerat kan du ta bort en funktion genom att ta bort den associerade Deployment, ScaledObject, en Secrets skapad.

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

Avinstallera KEDA från Kubernetes

Du kan ta bort KEDA från klustret på något av följande sätt:

Utlösare som stöds i KEDA

KEDA har stöd för följande Azure-funktionsutlösare:

Stöd för HTTP-utlösare

Du kan använda Azure Functions som exponerar HTTP-utlösare, men KEDA hanterar dem inte direkt. Du kan använda KEDA-prometheus-utlösaren för att skala HTTP Azure Functions från 1 till n instanser.

Nästa steg

Mer information finns i följande resurser: