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 kubernetes-distributioner som stöds fullt ut 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 noll 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 skapa din Dockerfile kan du alltid anropa func init
igen från roten i kodprojektet.
(Valfritt) Om du behöver skapa din Dockerfile använder du
func init
kommandot med alternativet--docker-only
:func init --docker-only
Mer information om Dockerfile-generering finns i referensen
func init
.Använd kommandot för att skapa avbildningen
func kubernetes deploy
och distribuera din containerbaserade funktionsapp 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 utför följande uppgifter:- Den Dockerfile som skapades tidigare används för att skapa en lokal avbildning för din containerbaserade funktionsapp.
- Den lokala avbildningen är taggad och push-överförd till containerregistret där användaren är inloggad.
- Ett manifest skapas och tillämpas på klustret som definierar en Kubernetes-resurs
Deployment
, enScaledObject
resurs ochSecrets
, som innehåller miljövariabler som importerats frånlocal.settings.json
filen.
Distribuera en funktionsapp från ett privat register
De tidigare distributionsstegen 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 som innehåller 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:
Azure Functions Core Tools: med kommandot
func kubernetes remove
.Helm: se avinstallationsstegen på KEDA-webbplatsen.
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 en till n
instanser.
Nästa steg
Mer information finns i följande resurser: