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.
(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
.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 risorsaScaledObject
, eSecrets
, che include le variabili di ambiente importate dal filelocal.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 deploy
di .
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:
Strumenti di base di Funzioni di Azure: usando il comando
func kubernetes remove
.Helm: vedere i passaggi di disinstallazione nel sito KEDA.
Trigger supportati in KEDA
KEDA supporta i trigger di Funzioni di Azure seguenti:
- Code di Archiviazione di Azure
- Bus di servizio di Azure
- Hub eventi/IoT di Azure
- Apache Kafka
- Coda RabbitMQ
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: