Azure Functions in Kubernetes met KEDA

De Azure Functions-runtime biedt flexibiliteit bij het hosten van waar en hoe u wilt. KEDA (Op Kubernetes gebaseerde gebeurtenisgestuurde automatische schaalaanpassing) paren naadloos met de Azure Functions-runtime en hulpprogramma's om gebeurtenisgestuurde schaal in Kubernetes te bieden.

Belangrijk

Het uitvoeren van uw in containers geplaatste functie-apps in Kubernetes, hetzij met behulp van KEDA of door directe implementatie, is een opensource-inspanning die u gratis kunt gebruiken. Ondersteuning voor best effort wordt geleverd door inzenders en vanuit de community door gebruik te maken van GitHub-problemen in de Azure Functions-opslagplaats. Gebruik deze problemen om fouten te melden en functieaanvragen te genereren. Implementaties van functie-apps in containers in Azure Container Apps, die worden uitgevoerd op beheerde Kubernetes-clusters in Azure, zijn momenteel in preview. Zie Azure Container Apps die als host fungeren voor Azure Functions voor meer informatie.

Hoe kubernetes-functies werken

De Azure Functions-service bestaat uit twee belangrijke onderdelen: een runtime en een schaalcontroller. De Functions-runtime wordt uitgevoerd en voert uw code uit. De runtime bevat logica voor het activeren, registreren en beheren van functie-uitvoeringen. De Azure Functions-runtime kan overal worden uitgevoerd. Het andere onderdeel is een schaalcontroller. De schaalcontroller bewaakt de frequentie van gebeurtenissen die gericht zijn op uw functie en schaalt proactief het aantal exemplaren waarop uw app wordt uitgevoerd. Zie Azure Functions schalen en hosten voor meer informatie.

Kubernetes-functies biedt de Functions-runtime in een Docker-container met gebeurtenisgestuurd schalen via KEDA. KEDA kan inschalen naar 0 exemplaren (wanneer er geen gebeurtenissen plaatsvinden) en naar n exemplaren. Dit doet u door aangepaste metrische gegevens weer te geven voor de Kubernetes-automatische schaalaanpassing (horizontale automatische schaalaanpassing van pods). Het gebruik van Functions-containers met KEDA maakt het mogelijk om serverloze functiemogelijkheden in een Kubernetes-cluster te repliceren. Deze functies kunnen ook worden geïmplementeerd met behulp van de functie virtuele AKS-knooppunten (Azure Kubernetes Services) voor een serverloze infrastructuur.

KEDA en functies beheren in Kubernetes

Als u Functions wilt uitvoeren op uw Kubernetes-cluster, moet u het KEDA-onderdeel installeren. U kunt dit onderdeel op een van de volgende manieren installeren:

  • Azure Functions Core Tools: met behulp van de func kubernetes install opdracht.

  • Helm: er zijn verschillende manieren om KEDA te installeren in een Kubernetes-cluster, waaronder Helm. Implementatieopties worden beschreven op de KEDA-site.

Een functie-app implementeren in Kubernetes

U kunt elke functie-app implementeren in een Kubernetes-cluster waarop KEDA wordt uitgevoerd. Omdat uw functies worden uitgevoerd in een Docker-container, heeft uw project een Dockerfile nodig. U kunt een Dockerfile maken met behulp van de --docker optie bij het aanroepen func init om het project te maken. Als u dit vergeten bent, kunt u altijd opnieuw bellen func init vanuit de hoofdmap van uw Functions-project, deze keer met behulp van de --docker-only optie, zoals wordt weergegeven in het volgende voorbeeld.

func init --docker-only

Zie de func init naslaginformatie voor meer informatie over het genereren van Dockerfiles.

Als u een installatiekopieën wilt bouwen en uw functies wilt implementeren in Kubernetes, voert u de volgende opdracht uit:

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

Vervang in dit voorbeeld <name-of-function-deployment> door de naam van de functie-app.

De implementatieopdracht doet het volgende:

  1. Het Dockerfile dat u eerder hebt gemaakt, wordt gebruikt om een lokale installatiekopieën voor de functie-app te bouwen.
  2. De lokale installatiekopieën worden gelabeld en gepusht naar het containerregister waarin de gebruiker is aangemeld.
  3. Er wordt een manifest gemaakt en toegepast op het cluster waarmee een Kubernetes-resource Deployment , een ScaledObject resource en Secrets, die omgevingsvariabelen bevat die zijn geïmporteerd uit uw local.settings.json bestand.

Zie de func kubernetes deploy opdracht voor meer informatie.

Een functie-app implementeren vanuit een privéregister

De bovenstaande stroom werkt ook voor privéregisters. Als u de containerinstallatiekopie uit een privéregister ophaalt, neemt u de --pull-secret vlag op die verwijst naar het Kubernetes-geheim met de referenties voor het privéregister wanneer deze wordt uitgevoerd func kubernetes deploy.

Een functie-app verwijderen uit Kubernetes

Nadat u een functie hebt geïmplementeerd, kunt u een functie verwijderen door de bijbehorende Deployment, ScaledObjecteen Secrets gemaakte.

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

KEDA verwijderen uit Kubernetes

U kunt KEDA op een van de volgende manieren verwijderen uit uw cluster:

Ondersteunde triggers in KEDA

KEDA biedt ondersteuning voor de volgende Azure-functietriggers:

HTTP-triggerondersteuning

U kunt Azure Functions gebruiken die HTTP-triggers beschikbaar maken, maar KEDA beheert ze niet rechtstreeks. U kunt de KEDA prometheus-trigger gebruiken om HTTP Azure Functions van 1 naar n exemplaren te schalen.

Volgende stappen

Voor meer informatie raadpleegt u de volgende bronnen: