Usare OpenFaaS nel servizio Azure Kubernetes
OpenFaaS è un framework che usa i contenitori per compilare funzioni serverless. Il fatto che si tratti di un progetto Open Source ne ha favorito l'adozione su larga scala all'interno della community. Questo documento descrive l'installazione e l'uso di OpenFaaS in un cluster del servizio Azure Kubernetes.
Operazioni preliminari
- Questo articolo presuppone una conoscenza di base dei concetti relativi a Kubernetes. Per altre informazioni, vedere Concetti di base relativi a Kubernetes per il servizio Azure Kubernetes.
- È necessaria una sottoscrizione di Azure attiva. Se non se ne dispone, creare un account gratuito prima di iniziare.
- È necessario un cluster del servizio Azure Kubernetes. Se non si dispone di un cluster esistente, è possibile crearne uno usando l'interfaccia della riga di comando di Azure , Azure PowerShell o portale di Azure.
- È necessario installare l'interfaccia della riga di comando di OpenFaaS. Per le opzioni di installazione, vedere la documentazione dell'interfaccia della riga di comando di OpenFaaS.
Aggiungere il repository del grafico Helm OpenFaaS
Passare ad Azure Cloud Shell.
Aggiungere il repository del grafico Helm OpenFaaS e aggiornare alla versione più recente usando i comandi seguenti
helm
.helm repo add openfaas https://openfaas.github.io/faas-netes/ helm repo update
Distribuire OpenFaaS
È consigliabile archiviare OpenFaaS e le funzioni di OpenFaaS in spazi dei nomi Kubernetes distinti.
Creare uno spazio dei nomi per il sistema e le funzioni OpenFaaS usando il comando
kubectl apply
.kubectl apply -f https://raw.githubusercontent.com/openfaas/faas-netes/master/namespaces.yml
Generare una password per il portale dell'interfaccia utente OpenFaaS e l'API REST usando i comandi seguenti. Il grafico Helm usa questa password per abilitare l'autenticazione di base nel gateway OpenFaaS, esposto a Internet tramite un loadBalancer cloud.
# generate a random password PASSWORD=$(head -c 12 /dev/urandom | shasum| cut -d' ' -f1) kubectl -n openfaas create secret generic basic-auth \ --from-literal=basic-auth-user=admin \ --from-literal=basic-auth-password="$PASSWORD"
Importante
L'uso di un nome utente e una password per l'autenticazione è un modello non sicuro. Se si ha una licenza Enterprise OpenFaaS, è consigliabile usare invece Identity and Access Management (IAM) per OpenFaaS .
Ottenere il valore per la password usando il comando
echo
seguente.echo $PASSWORD
Distribuire OpenFaaS nel cluster del servizio Azure Kubernetes usando il comando
helm upgrade
.helm upgrade openfaas --install openfaas/openfaas \ --namespace openfaas \ --set basic_auth=true \ --set functionNamespace=openfaas-fn \ --set serviceType=LoadBalancer
L'output dovrebbe essere simile all'output di esempio condensato seguente:
NAME: openfaas LAST DEPLOYED: Tue Aug 29 08:26:11 2023 NAMESPACE: openfaas STATUS: deployed ... NOTES: To verify that openfaas has started, run: kubectl --namespace=openfaas get deployments -l "release=openfaas, app=openfaas" ...
Viene creato un indirizzo IP pubblico per l'accesso al gateway OpenFaaS. Ottenere l'indirizzo IP usando il comando
kubectl get service
.kubectl get service -l component=gateway --namespace openfaas
L'output dovrebbe essere simile all'esempio di output seguente:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE gateway ClusterIP 10.0.156.194 <none> 8080/TCP 7m gateway-external LoadBalancer 10.0.28.18 52.186.64.52 8080:30800/TCP 7m
Testare il sistema OpenFaaS passando all'indirizzo IP esterno sulla porta 8080,
http://52.186.64.52:8080
in questo esempio, in cui viene richiesto di accedere. L'utente predefinito èadmin
e la password può essere recuperata tramiteecho $PASSWORD
.Impostare
$OPENFAAS_URL
sull'URL dell'indirizzo IP esterno sulla porta 8080 e accedere con l'interfaccia della riga di comando di Azure usando i comandi seguenti.export OPENFAAS_URL=http://52.186.64.52:8080 echo -n $PASSWORD | ./faas-cli login -g $OPENFAAS_URL -u admin --password-stdin
Creare la prima funzione
Passare al sistema OpenFaaS usando l'URL OpenFaaS.
Creare una funzione usando il portale OpenFaas selezionando Deploy A New Function (Distribuisci una nuova funzione) e cercare Figlet.
Selezionare la funzione Figlet e quindi selezionare Deploy.
Richiamare la funzione usando il comando
curl
seguente. Assicurarsi di sostituire l'indirizzo IP nell'esempio seguente con l'indirizzo del gateway OpenFaaS.curl -X POST http://52.186.64.52:8080/function/figlet -d "Hello Azure"
L'output dovrebbe essere simile all'esempio di output seguente:
_ _ _ _ _ | | | | ___| | | ___ / \ _____ _ _ __ ___ | |_| |/ _ \ | |/ _ \ / _ \ |_ / | | | '__/ _ \ | _ | __/ | | (_) | / ___ \ / /| |_| | | | __/ |_| |_|\___|_|_|\___/ /_/ \_\/___|\__,_|_| \___|
Creare la seconda funzione
Configurare l'istanza di Azure Cosmos DB
Passare ad Azure Cloud Shell.
Creare un nuovo gruppo di risorse per l'istanza di Azure Cosmos DB usando il comando
az group create
.az group create --name serverless-backing --location eastus
Distribuire un'istanza di Azure Cosmos DB di tipo
MongoDB
usando il comandoaz cosmosdb create
. Sostituireopenfaas-cosmos
con il nome dell'istanza univoca.az cosmosdb create --resource-group serverless-backing --name openfaas-cosmos --kind MongoDB
Ottenere la stringa di connessione del database di Azure Cosmos DB e archiviarla in una variabile usando il comando
az cosmosdb keys list
. Assicurarsi di sostituire il valore per l'argomento--resource-group
con il nome del gruppo di risorse e l'argomento--name
con il nome dell'istanza di Azure Cosmos DB.COSMOS=$(az cosmosdb keys list \ --type connection-strings \ --resource-group serverless-backing \ --name openfaas-cosmos \ --output tsv)
Popolare Azure Cosmos DB con i dati di test creando un file denominato
plans.json
e copiandolo nel codice JSON seguente.{ "name" : "two_person", "friendlyName" : "Two Person Plan", "portionSize" : "1-2 Person", "mealsPerWeek" : "3 Unique meals per week", "price" : 72, "description" : "Our basic plan, delivering 3 meals per week, which will feed 1-2 people.", "__v" : 0 }
Creare la funzione
Installare gli strumenti mongoDB. Il comando di esempio seguente installa questi strumenti usando brew. Per altre opzioni di installazione, vedere la documentazione di MongoDB.
brew install mongodb
Caricare l'istanza di Azure Cosmos DB con i dati usando lo strumento mongoimport.
mongoimport --uri=$COSMOS -c plans < plans.json
L'output dovrebbe essere simile all'esempio di output seguente:
2018-02-19T14:42:14.313+0000 connected to: localhost 2018-02-19T14:42:14.918+0000 imported 1 document
Creare la funzione usando il comando
faas-cli deploy
. Aggiornare il valore dell'argomento-g
con l'indirizzo del gateway OpenFaaS.faas-cli deploy -g http://52.186.64.52:8080 --image=shanepeckham/openfaascosmos --name=cosmos-query --env=NODE_ENV=$COSMOS
Dopo la distribuzione, l'output dovrebbe essere simile all'output di esempio seguente:
Deployed. 202 Accepted. URL: http://52.186.64.52:8080/function/cosmos-query
Testare la funzione usando il comando
curl
seguente. Assicurarsi di aggiornare l'indirizzo IP con l'indirizzo del gateway OpenFaaS.curl -s http://52.186.64.52:8080/function/cosmos-query
L'output dovrebbe essere simile all'esempio di output seguente:
[{"ID":"","Name":"two_person","FriendlyName":"","PortionSize":"","MealsPerWeek":"","Price":72,"Description":"Our basic plan, delivering 3 meals per week, which will feed 1-2 people."}]
Nota
È anche possibile testare la funzione all'interno dell'interfaccia utente di OpenFaaS:
Passaggi successivi
Continuare a imparare con il workshop OpenFaaS, che include un set di lab pratici che illustrano argomenti come la creazione di un bot GitHub personalizzato, l'utilizzo di segreti, la visualizzazione delle metriche e la scalabilità automatica.
Azure Kubernetes Service