Utilisation d’OpenFaaS avec AKSUsing OpenFaaS on AKS

OpenFaaS est un framework qui permet de créer des fonctions serverless via l’utilisation de conteneurs.OpenFaaS is a framework for building serverless functions through the use of containers. Ce projet open source a été très largement adopté par la communauté.As an open source project, it has gained large-scale adoption within the community. Ce document décrit en détail l’installation et l’utilisation d’OpenFaas sur un cluster Azure Kubernetes Service (AKS).This document details installing and using OpenFaas on an Azure Kubernetes Service (AKS) cluster.

PrérequisPrerequisites

Pour effectuer les étapes de cet article, vous avez besoin des éléments suivants :In order to complete the steps within this article, you need the following.

  • Des connaissances de base sur KubernetesBasic understanding of Kubernetes.
  • Un cluster Azure Kubernetes Service (AKS) et des informations d’identification AKS configurées sur votre système de développement.An Azure Kubernetes Service (AKS) cluster and AKS credentials configured on your development system.
  • Azure CLI installé sur votre système de développement.Azure CLI installed on your development system.
  • L’installation des outils en ligne de commande Git sur votre systèmeGit command-line tools installed on your system.

Ajouter le dépôt de chart Helm OpenFaaSAdd the OpenFaaS helm chart repo

OpenFaaS gère ses propres charts Helm pour rester informé de toutes les dernières modifications.OpenFaaS maintains its own helm charts to keep up to date with all the latest changes.

helm repo add openfaas https://openfaas.github.io/faas-netes/
helm repo update

Déployer OpenFaaSDeploy OpenFaaS

Il est recommandé de stocker OpenFaaS et ses fonctions dans leur propre espace de noms Kubernetes.As a good practice, OpenFaaS and OpenFaaS functions should be stored in their own Kubernetes namespace.

Créez un espace de noms pour les fonctions et le système OpenFaaS :Create a namespace for the OpenFaaS system and functions:

kubectl apply -f https://raw.githubusercontent.com/openfaas/faas-netes/master/namespaces.yml

Générez un mot de passe pour le portail de l’interface utilisateur OpenFaaS et l’API REST :Generate a password for the OpenFaaS UI Portal and REST API:

# 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"

Vous pouvez obtenir la valeur du secret avec echo $PASSWORD.You can get the value of the secret with echo $PASSWORD.

Le mot de passe que nous créons ici sera utilisé par le chart Helm pour activer l’authentification de base sur la passerelle OpenFaaS, qui est exposée à Internet via un équilibreur de charge cloud.The password we create here will be used by the helm chart to enable basic authentication on the OpenFaaS Gateway, which is exposed to the Internet through a cloud LoadBalancer.

Un graphique Helm pour OpenFaaS est inclus dans le dépôt cloné.A Helm chart for OpenFaaS is included in the cloned repository. Utilisez ce graphique pour déployer OpenFaaS dans votre cluster AKS.Use this chart to deploy OpenFaaS into your AKS cluster.

helm upgrade openfaas --install openfaas/openfaas \
    --namespace openfaas  \
    --set basic_auth=true \
    --set functionNamespace=openfaas-fn \
    --set serviceType=LoadBalancer

Sortie :Output:

NAME:   openfaas
LAST DEPLOYED: Wed Feb 28 08:26:11 2018
NAMESPACE: openfaas
STATUS: DEPLOYED

RESOURCES:
==> v1/ConfigMap
NAME                 DATA  AGE
prometheus-config    2     20s
alertmanager-config  1     20s

{snip}

NOTES:
To verify that openfaas has started, run:

  kubectl --namespace=openfaas get deployments -l "release=openfaas, app=openfaas"

Une adresse IP publique est créée pour accéder à la passerelle OpenFaaS.A public IP address is created for accessing the OpenFaaS gateway. Pour récupérer l’adresse IP publique, utilisez la commande kubectl get service.To retrieve this IP address, use the kubectl get service command. L’affectation de l’adresse IP au service peut prendre un certain temps.It may take a minute for the IP address to be assigned to the service.

kubectl get service -l component=gateway --namespace openfaas

Sortie :Output.

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

Pour tester le système OpenFaaS, accédez à l’adresse IP externe sur le port 8080 (http://52.186.64.52:8080 dans cet exemple).To test the OpenFaaS system, browse to the external IP address on port 8080, http://52.186.64.52:8080 in this example. Vous serez invité à vous connecter.You will be prompted to log in. Pour extraire votre mot de passe, entrez echo $PASSWORD.To fetch your password, enter echo $PASSWORD.

Interface utilisateur d’OpenFaaS

Enfin, installez l’interface CLI d’OpenFaaS.Finally, install the OpenFaaS CLI. Cet exemple utilise brew. Pour d’autres options, consultez la documentation relative à l’interface CLI d’OpenFaaS.This example used brew, see the OpenFaaS CLI documentation for more options.

brew install faas-cli

Affectez à $OPENFAAS_URL l’adresse IP publique identifiée précédemment.Set $OPENFAAS_URL to the public IP found above.

Connectez-vous avec l’interface de ligne de commande Azure :Log in with the Azure CLI:

export OPENFAAS_URL=http://52.186.64.52:8080
echo -n $PASSWORD | ./faas-cli login -g $OPENFAAS_URL -u admin --password-stdin

Créer la première fonctionCreate first function

Maintenant qu’OpenFaaS est opérationnel, créez une fonction à l’aide du portail OpenFaas.Now that OpenFaaS is operational, create a function using the OpenFaas portal.

Cliquez sur Deploy New Function (Déployer une nouvelle fonction), puis recherchez Figlet.Click on Deploy New Function and search for Figlet. Sélectionnez la fonction Figlet, puis cliquez sur Deploy (Déployer).Select the Figlet function, and click Deploy.

Figlet

Utilisez curl pour appeler la fonction.Use curl to invoke the function. Dans l’exemple suivant, remplacez l’adresse IP par celle de votre passerelle OpenFaas.Replace the IP address in the following example with that of your OpenFaas gateway.

curl -X POST http://52.186.64.52:8080/function/figlet -d "Hello Azure"

Sortie :Output:

 _   _      _ _            _
| | | | ___| | | ___      / \    _____   _ _ __ ___
| |_| |/ _ \ | |/ _ \    / _ \  |_  / | | | '__/ _ \
|  _  |  __/ | | (_) |  / ___ \  / /| |_| | | |  __/
|_| |_|\___|_|_|\___/  /_/   \_\/___|\__,_|_|  \___|

Créer la deuxième fonctionCreate second function

À présent, créez la deuxième fonction.Now create a second function. Cet exemple est déployé à l’aide de l’interface CLI d’OpenFaaS. Il inclut une image de conteneur personnalisée et récupère des données à partir de Cosmos DB.This example will be deployed using the OpenFaaS CLI and includes a custom container image and retrieving data from a Cosmos DB. Plusieurs éléments doivent être configurés avant la création de la fonction.Several items need to be configured before creating the function.

D’abord, créez un groupe de ressources pour Cosmos DB.First, create a new resource group for the Cosmos DB.

az group create --name serverless-backing --location eastus

Déployez une instance CosmosDB de type MongoDB.Deploy a CosmosDB instance of kind MongoDB. L’instance doit avoir un nom unique. Vous devez donc remplacer openfaas-cosmos par un nom unique dans votre environnement.The instance needs a unique name, update openfaas-cosmos to something unique to your environment.

az cosmosdb create --resource-group serverless-backing --name openfaas-cosmos --kind MongoDB

Récupérez la chaîne de connexion de base de données Cosmos et stockez-la dans une variable.Get the Cosmos database connection string and store it in a variable.

Remplacez la valeur de l’argument --resource-group par le nom de votre groupe de ressources, et la valeur de l’argument --name par le nom de votre instance Cosmos DB.Update the value for the --resource-group argument to the name of your resource group, and the --name argument to the name of your Cosmos DB.

COSMOS=$(az cosmosdb list-connection-strings \
  --resource-group serverless-backing \
  --name openfaas-cosmos \
  --query connectionStrings[0].connectionString \
  --output tsv)

Maintenant, remplissez l’instance Cosmos DB avec des données de test.Now populate the Cosmos DB with test data. Créez un fichier nommé plans.json et copiez-y le code json suivant.Create a file named plans.json and copy in the following json.

{
    "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
}

Utilisez l’outil mongoimport pour charger des données dans l’instance CosmosDB.Use the mongoimport tool to load the CosmosDB instance with data.

Si nécessaire, installez les outils MongoDB.If needed, install the MongoDB tools. L’exemple suivant installe ces outils à l’aide de brew. Pour d’autres options, consultez la documentation MongoDB.The following example installs these tools using brew, see the MongoDB documentation for other options.

brew install mongodb

Chargez les données dans la base de données.Load the data into the database.

mongoimport --uri=$COSMOS -c plans < plans.json

Sortie :Output:

2018-02-19T14:42:14.313+0000    connected to: localhost
2018-02-19T14:42:14.918+0000    imported 1 document

Exécutez la commande suivante pour créer la fonction :Run the following command to create the function. Remplacez la valeur de l’argument -g par l’adresse de votre passerelle OpenFaaS.Update the value of the -g argument with your OpenFaaS gateway address.

faas-cli deploy -g http://52.186.64.52:8080 --image=shanepeckham/openfaascosmos --name=cosmos-query --env=NODE_ENV=$COSMOS

Une fois déployée, vous devez voir le point de terminaison OpenFaaS de la fonction que vous venez de créer.Once deployed, you should see your newly created OpenFaaS endpoint for the function.

Deployed. 202 Accepted.
URL: http://52.186.64.52:8080/function/cosmos-query

Testez la fonction à l’aide de curl.Test the function using curl. Remplacez l’adresse IP par l’adresse de la passerelle OpenFaaS.Update the IP address with the OpenFaaS gateway address.

curl -s http://52.186.64.52:8080/function/cosmos-query

Sortie :Output:

[{"ID":"","Name":"two_person","FriendlyName":"","PortionSize":"","MealsPerWeek":"","Price":72,"Description":"Our basic plan, delivering 3 meals per week, which will feed 1-2 people."}]

Vous pouvez également tester la fonction dans l’interface utilisateur d’OpenFaaS.You can also test the function within the OpenFaaS UI.

texte de remplacement

Étapes suivantesNext Steps

Vous pouvez continuer à apprendre avec l’atelier OpenFaaS via un ensemble de travaux pratiques couvrant des sujets tels que la création de votre propre bot GitHub, l’utilisation de secrets, l’affichage de métriques et la mise à l’échelle automatique.You can continue to learn with the OpenFaaS workshop through a set of hands-on labs that cover topics such as how to create your own GitHub bot, consuming secrets, viewing metrics, and auto-scaling.