Funzioni di Azure in Kubernetes con KEDA

Il runtime di Funzioni di Azure offre la flessibilità necessaria per eseguire l'hosting dove e come si vuole. KEDA (Kubernetes-based Event Driven Autoscaling) si integra perfettamente con il runtime e i tool di Funzioni di Azure per offrire la scalatura gestita dagli eventi in Kubernetes.

Importante

L'esecuzione di app per le funzioni in contenitori in Kubernetes, tramite KEDA o per distribuzione diretta, è un'operazione open source che è possibile usare gratuitamente. Il supporto ottimale viene fornito dai collaboratori e dalla community usando i problemi di GitHub nel repository Funzioni di Azure. Usare questi problemi per segnalare bug e generare richieste di funzionalità. Le distribuzioni di app per le funzioni in contenitori in App Contenitore di Azure, eseguite in cluster Kubernetes gestiti in Azure, sono attualmente in anteprima. Per altre informazioni, vedere Hosting di app azure Container di Funzioni di Azure.

Come operano le funzioni basate su Kubernetes

Il servizio Funzioni di Azure è costituito da due componenti principali: un runtime e un controller di scalabilità. Il runtime di Funzioni di Azure esegue il codice. Il runtime include logica per attivare, registrare e gestire le esecuzioni di funzioni. Il runtime di Funzioni di Azure può essere eseguito ovunque. L'altro componente è un controller di scalabilità. Il controller di scalabilità monitora la frequenza degli eventi destinati alla funzione e ridimensiona in modo proattivo il numero di istanze che eseguono l'app. Per altre informazioni, vedere Ridimensionamento e hosting di Funzioni di Azure.

Le funzioni basate su Kubernetes offrono il runtime di Funzioni in un contenitore Docker con scalabilità guidata dagli eventi tramite KEDA. KEDA può ridurre in scala fino a 0 istanze (quando non si verificano eventi) e aumentare fino a n istanze. Questa operazione viene eseguita esponendo metriche personalizzate per la scalabilità automatica Kubernetes (Horizontal Pod AutoScaler). L'uso di contenitori di Funzioni con KEDA consente di replicare le capacità della funzione serverless in qualsiasi cluster Kubernetes. Queste funzioni possono essere distribuite anche usando la funzionalità nodi virtuali dei servizi Azure Kubernetes (AKS) per l'infrastruttura serverless.

Gestione di KEDA e funzioni in Kubernetes

Per eseguire Funzioni nel cluster Kubernetes, è necessario installare il componente KEDA. È possibile installare questo componente in uno dei modi seguenti:

  • Funzioni di Azure Core Tools: uso di func kubernetes install comando.

  • Helm: esistono diversi modi per installare KEDA in qualsiasi cluster Kubernetes, tra cui Helm. Le opzioni di distribuzione sono documentate nel sito KEDA.

Distribuzione di un'app per le funzioni in Kubernetes

È possibile distribuire qualsiasi app per le funzioni in un cluster Kubernetes che esegue KEDA. Poiché le funzioni vengono eseguite in un contenitore Docker, il progetto richiede un Dockerfile. È possibile creare un Dockerfile usando l'opzione--dockerquando si chiama func init per creare il progetto. Se si dimentica di eseguire questa operazione, è sempre possibile chiamare func init di nuovo dalla radice del progetto funzioni, questa volta usando l'opzione--docker-only , come illustrato nell'esempio seguente.

func init --docker-only

Per altre informazioni sulla generazione di Dockerfile, vedere le func init informazioni di riferimento.

Per compilare un'immagine e distribuire le funzioni in Kubernetes, eseguire il comando seguente:

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

In questo esempio sostituire <name-of-function-deployment> con il nome dell'app per le funzioni.

Il comando deploy esegue le operazioni seguenti:

  1. Il Dockerfile creato in precedenza viene usato per compilare un'immagine locale per l'app per le funzioni.
  2. L'immagine locale viene contrassegnata e inserita nel registro contenitori in cui l'utente è connesso.
  3. Viene creato e applicato un manifesto al cluster che definisce una risorsa Kubernetes Deployment , una ScaledObject risorsa e Secrets, che include le variabili di ambiente importate dal local.settings.json file.

Per altre informazioni, vedere il func kubernetes deploy comando .

Distribuzione di un'app per le funzioni da un registro privato

Il flusso precedente funziona anche per i registri privati. Se si esegue il pull dell'immagine del contenitore da un registro privato, includere il flag --pull-secret che fa riferimento al segreto Kubernetes contenente le credenziali del registro di sistema privato durante l'esecuzione di func kubernetes deploy.

Rimozione di un'app per le funzioni da Kubernetes

Dopo la distribuzione è possibile rimuovere una funzione rimuovendo gli elementi Deployment, ScaledObject e Secrets creati.

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

Disinstallazione di KEDA da Kubernetes

È possibile rimuovere KEDA dal cluster in uno dei modi seguenti:

Trigger supportati in KEDA

KEDA supporta i trigger di Funzioni di Azure seguenti:

Supporto del trigger HTTP

È possibile usare funzioni di Azure che espongono trigger HTTP, ma KEDA non li gestisce direttamente. È possibile utilizzare il trigger prometheus di KEDA per scalare le funzioni HTTP di Azure da 1 a n istanze.

Passaggi successivi

Per ulteriori informazioni, vedi le seguenti risorse: