Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Suggerimento
Questo contenuto è un estratto dell'eBook, Progettazione di applicazioni .NET native del cloud per Azure, disponibile in .NET Docs o come PDF scaricabile gratuitamente che può essere letto offline.
Le applicazioni native del cloud in genere implementano i servizi sfruttando contenitori e orchestrazione. Spesso è possibile esporre alcuni dei servizi dell'applicazione come Funzioni di Azure. Tuttavia, con un'app nativa del cloud distribuita in Kubernetes, sarebbe utile sfruttare Funzioni di Azure all'interno dello stesso set di strumenti. Fortunatamente, è possibile eseguire il wrapping di Funzioni di Azure all'interno di contenitori Docker e distribuirli usando gli stessi processi e strumenti del resto dell'app basata su Kubernetes.
Quando è opportuno usare contenitori con l'approccio serverless?
La funzione di Azure non conosce la piattaforma in cui viene distribuita. Per alcuni scenari, potrebbero esistere requisiti specifici e potrebbe essere necessario personalizzare l'ambiente in cui verrà eseguito il codice della funzione. Sarà necessaria un'immagine personalizzata che supporti le dipendenze o una configurazione non supportata dall'immagine predefinita. In questi casi, è opportuno distribuire la funzione in un contenitore Docker personalizzato.
Quando è consigliabile evitare di usare i contenitori con Funzioni di Azure?
Se si vuole usare la fatturazione a consumo, non è possibile eseguire la funzione in un contenitore. Inoltre, se si distribuisce la funzione in un cluster Kubernetes, non sarà più possibile sfruttare il ridimensionamento predefinito fornito da Funzioni di Azure. Sarà necessario usare le funzionalità di ridimensionamento di Kubernetes, descritte in precedenza in questo capitolo.
Come combinare contenitori serverless e Docker
Per eseguire il wrapping di una funzione di Azure in un contenitore Docker, installare Azure Functions Core Tools e quindi eseguire il comando seguente:
func init ProjectName --worker-runtime dotnet --docker
Quando il progetto viene creato, includerà un Dockerfile e il runtime del ruolo di lavoro configurato per dotnet
. È ora possibile creare e testare la funzione in locale. Compilarla ed eseguirla usando i comandi docker build
e docker run
. Per istruzioni dettagliate per iniziare a creare Funzioni di Azure con il supporto di Docker, vedere l'esercitazione Creare una funzione in Linux usando un'immagine personalizzata.
Come combinare l'approccio serverless e Kubernetes con KEDA
In questo capitolo si è visto che la piattaforma Funzioni di Azure aumenta automaticamente le istanze per soddisfare la domanda. Quando si distribuiscono funzioni in contenitori nel servizio Azure Kubernetes, tuttavia, si perde la funzionalità di ridimensionamento predefinita. In questo caso viene in aiuto KEDA (Kubernetes-based Event Driven). Consente la scalabilità automatica con granularità fine per event-driven Kubernetes workloads
, incluse le funzioni in contenitori.
KEDA offre funzionalità di ridimensionamento basato su eventi per il runtime di Funzioni in un contenitore Docker. KEDA supporta il ridimensionamento da zero istanze (quando non si verificano eventi) fino a n instances
, in base al carico. Consente la scalabilità automatica sponendo le metriche personalizzate all'utilità di 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.
Vale la pena notare che il progetto KEDA è ora gestito dalla Cloud Native Computing Foundation (CNF).