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 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.

  1. (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 .

  2. 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 , en ScaledObject resurs och Secrets, som innehåller miljövariabler som importerats från local.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:

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: