Usare OpenFaaS con il servizio Azure Kubernetes abilitato da Azure Arc
Si applica a: Servizio Azure Kubernetes in Azure Stack HCI 22H2, servizio Azure Kubernetes in Windows Server
OpenFaaS è un framework per la compilazione di funzioni serverless tramite contenitori. Come progetto open source, ha ottenuto l'adozione su larga scala all'interno della community. Questo articolo descrive l'installazione e l'uso di OpenFaas in un cluster Kubernetes in esecuzione nel servizio Azure Kubernetes abilitato da Azure Arc.
Prerequisiti
Per completare i passaggi descritti in questo articolo, assicurarsi di avere i requisiti seguenti:
- Conoscenza di base di Kubernetes.
- Un cluster Kubernetes con almeno un nodo di lavoro Linux in esecuzione.
- L'ambiente locale
kubectl
è configurato per puntare al cluster. È possibile usare il comando Get-AksHciCredential di PowerShell per accedere al cluster usandokubectl
. - Vengono installati i prerequisiti e la riga di comando Helm v3 .
- È possibile usare l'interfaccia della riga di comando di Azure per eseguire i comandi se si preferisce l'interfaccia della riga di comando di Azure a PowerShell.
- Gli strumenti da riga di comando Git vengono installati nel sistema.
- L'interfaccia della
OpenFaaS
riga di comando è installata. Per le opzioni di installazione, vedere la documentazione dell'interfaccia della riga di comando di OpenFaaS.
Importante
Helm è progettato per l'esecuzione in nodi Linux. Se il cluster dispone di nodi Windows Server, è necessario assicurarsi che i pod Helm siano pianificati per l'esecuzione solo nei nodi Linux. È anche necessario assicurarsi che tutti i grafici Helm installati siano pianificati per l'esecuzione nei nodi corretti. I comandi in questo articolo usano i selettori di nodo per assicurarsi che i pod siano pianificati nei nodi corretti, ma non tutti i grafici Helm espongono un selettore di nodo. È anche possibile usare altre opzioni, ad esempio taints, nel cluster.
Aggiungere il repository del grafico Helm OpenFaaS
Con il file kubeconfig disponibile, aprire la console per avviare il processo di distribuzione. Se si esegue in Windows, il download e l'esecuzione di Git Bash è il modo più semplice da seguire. Da qui, OpenFaaS mantiene i propri grafici Helm per rimanere aggiornati con tutte le modifiche più recenti:
helm repo add openfaas https://openfaas.github.io/faas-netes/
helm repo update
Distribuire OpenFaaS
Come procedura consigliata, le funzioni OpenFaaS e OpenFaaS devono essere archiviate nel proprio spazio dei nomi Kubernetes.
Creare uno spazio dei nomi per il sistema e le funzioni OpenFaaS:
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:
# 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"
È possibile ottenere il valore del segreto con echo $PASSWORD
.
Il grafico Helm usa la password creata qui per abilitare l'autenticazione di base nel gateway OpenFaaS, esposta esternamente tramite un servizio di bilanciamento del carico.
Il repository clonato include un grafico Helm per OpenFaaS. Usare questo grafico per distribuire OpenFaaS nel cluster Kubernetes:
helm upgrade openfaas --install openfaas/openfaas \
--namespace openfaas \
--set basic_auth=true \
--set functionNamespace=openfaas-fn \
--set serviceType=LoadBalancer
Output:
NAME: openfaas
LAST DEPLOYED: Fri May 14 18:35:47 2021
NAMESPACE: openfaas
STATUS: deployed
REVISION: 1
TEST SUITE: None
Per verificare che OpenFaas sia stato avviato, eseguire il comando seguente:
kubectl --namespace=openfaas get deployments -l "release=openfaas, app=openfaas"
Viene creato un indirizzo IP pubblico per l'accesso al gateway OpenFaaS. Per recuperare questo indirizzo IP, usare il comando kubectl get service. L'assegnazione dell'indirizzo IP al servizio può richiedere un minuto:
kubectl get service -l component=gateway --namespace openfaas
Output:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
gateway ClusterIP 10.110.205.41 <none> 8080/TCP 7m
gateway-external LoadBalancer 10.107.51.110 192.168.0.152 8080:32029/TCP 7m
Per testare il sistema OpenFaaS, passare all'indirizzo IP esterno sulla porta 8080, http://192.168.0.152:8080
in questo esempio. Viene richiesto di eseguire l'accesso. Per recuperare la password, immettere echo $PASSWORD
.
Impostare $OPENFAAS_URL
su External-IP trovato in questo esempio.
Accedere con la console. Se si eseguono comandi in GitBash in Windows, potrebbe essere necessario usare faas-cli
anziché ./faas-cli
nel comando seguente:
export OPENFAAS_URL=http://192.168.0.152:8080
echo -n $PASSWORD | ./faas-cli login -g $OPENFAAS_URL -u admin --password-stdin
Creare la prima funzione
Ora che OpenFaaS è operativo, creare una funzione usando il portale OpenFaaS.
Selezionare Distribuisci nuova funzione e cercare Figlet. Selezionare la funzione Figlet e quindi fare clic su Distribuisci.
Usare curl
per richiamare la funzione. Sostituire l'indirizzo IP nell'esempio seguente con l'indirizzo del gateway OpenFaaS.
curl -X POST http://192.168.0.152:8080/function/figlet -d "Hello Azure"
Output:
_ _ _ _ _
| | | | ___| | | ___ / \ _____ _ _ __ ___
| |_| |/ _ \ | |/ _ \ / _ \ |_ / | | | '__/ _ \
| _ | __/ | | (_) | / ___ \ / /| |_| | | | __/
|_| |_|\___|_|_|\___/ /_/ \_\/___|\__,_|_| \___|
Pulire le risorse
Quando si distribuisce un grafico Helm, vengono create numerose risorse Kubernetes. Queste risorse includono pod, distribuzioni e servizi. Per pulire queste risorse, usare il comando e specificare il helm uninstall
nome della versione, come illustrato nel comando precedente helm list
:
helm uninstall openfaas
L'esempio seguente mostra che la versione denominata openfaas è stata disinstallata:
release "openfaas" uninstalled
Passaggi successivi
È possibile continuare a imparare con il workshop OpenFaaS tramite 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 il ridimensionamento automatico.