Condividi tramite


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 di Funzioni di Azure. Usare questi problemi per segnalare bug e generare richieste di funzionalità.

Per le distribuzioni Kubernetes completamente supportate, prendere invece in considerazione l'hosting di app contenitore di Azure 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ò passare a zero istanze (quando non si verificano eventi) e in 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:

  • Strumenti di base di Funzioni di Azure: usando il comando func kubernetes install.

  • 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 --docker quando si chiama func init per creare il progetto. Se si dimentica di creare il Dockerfile, è sempre possibile chiamare func init di nuovo dalla radice del progetto di codice.

  1. (Facoltativo) Se è necessario creare il Dockerfile, usare il func init comando con l'opzione --docker-only :

    func init --docker-only
    

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

  2. Usare il func kubernetes deploy comando per compilare l'immagine e distribuire l'app per le funzioni in contenitori in Kubernetes:

    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 queste attività:

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

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

I passaggi di distribuzione precedenti funzionano anche per i registri privati. Se si esegue il pull dell'immagine del contenitore da un registro privato, includere il flag che fa riferimento al segreto Kubernetes che contiene le credenziali del Registro di sistema privato durante l'esecuzione --pull-secret func kubernetes deploydi .

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 usare il trigger di prometheus KEDA per ridimensionare le Funzioni di Azure HTTP da una a n istanze.

Passaggi successivi

Per ulteriori informazioni, vedi le seguenti risorse: