Freigeben über


Verwenden von OpenFaaS in Azure Kubernetes Service (AKS)

OpenFaaS ist ein Framework, das Container verwendet, um serverlose Funktionen zu erstellen. Das Open-Source-Projekt erfreut sich in der Community großer Beliebtheit. In diesem Dokument werden die Installation und Verwendung von OpenFaaS in einem Azure Kubernetes Service-Cluster (AKS) beschrieben.

Voraussetzungen

Hinzufügen des OpenFaaS-Helm-Diagrammrepositorys

  1. Wechseln Sie zu Azure Cloud Shell.

  2. Fügen Sie das OpenFaaS-Helm-Diagrammrepository hinzu, und führen Sie mit den folgenden helm-Befehlen ein Update auf die neueste Version durch.

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

Bereitstellen von OpenFaaS

Es empfiehlt sich, OpenFaaS und OpenFaaS Funktionen in einem eigenen Kubernetes-Namespace zu speichern.

  1. Erstellen Sie einen Namespace für das OpenFaaS-System und die zugehörigen Funktionen über den Befehl kubectl apply.

    kubectl apply -f https://raw.githubusercontent.com/openfaas/faas-netes/master/namespaces.yml
    
  2. Generieren Sie mit den folgenden Befehlen ein Kennwort für das OpenFaaS-Benutzeroberflächenportal und die REST-API. Dieses Kennwort wird vom Helm-Diagramm verwendet, um eine Standardauthentifizierung auf dem OpenFaaS-Gateway zu ermöglichen, das über einen Cloudlastenausgleich im Internet verfügbar gemacht wird.

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

    Wichtig

    Die Verwendung eines Benutzernamens und Kennworts für die Authentifizierung ist ein unsicheres Muster. Wenn Sie über eine OpenFaaS Enterprise-Lizenz verfügen, empfehlen wir stattdessen die Verwendung von Identity & Access Management (IAM) für OpenFaaS.

  3. Rufen Sie den Wert für Ihr Kennwort mit dem folgenden echo-Befehl ab.

    echo $PASSWORD
    
  4. Stellen Sie OpenFaaS mithilfe des Befehls helm upgrade in Ihrem AKS-Cluster bereit.

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

    Ihre Ausgabe sollte der folgenden gekürzten Beispielausgabe entsprechen:

    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"
    ...
    
  5. Es wird eine öffentliche IP-Adresse für den Zugriff auf das OpenFaaS-Gateway erstellt. Rufen Sie mit dem Befehl kubectl get service die IP-Adresse ab.

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

    Ihre Ausgabe sollte in etwa dem folgendem Beispiel entsprechen:

    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
    
  6. Testen Sie das OpenFaaS-System, indem Sie zur externen IP-Adresse an Port 8080 navigieren, in diesem Beispiel http://52.186.64.52:8080. Dort werden Sie zur Anmeldung aufgefordert. Das Standardbenutzerkonto lautet admin, und das Kennwort kann über echo $PASSWORD abgerufen werden.

    Screenshot: OpenFaaS-Benutzeroberfläche

  7. Legen Sie $OPENFAAS_URL auf die URL der externen IP-Adresse an Port 8080 fest, und melden Sie sich über die Azure CLI mit den folgenden Befehlen an.

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

Erstellen der ersten Funktion

  1. Navigieren Sie über Ihre OpenFaaS-URL zum OpenFaaS-System.

  2. Erstellen Sie eine Funktion im OpenFaas-Portal, indem Sie Deploy A New Function (Neue Funktion bereitstellen) auswählen und nach Figlet suchen.

  3. Wählen Sie die Figlet-Funktion aus, und klicken Sie dann auf Bereitstellen.

    Screenshot: Dialogfeld zum Bereitstellen einer neuen Funktion mit in der Suchzeile eingegebenem Text „Figlet“

  4. Rufen Sie die Funktion mit dem folgenden curl-Befehl auf. Ersetzen Sie die IP-Adresse im folgenden Beispiel durch die Ihres OpenFaaS-Gateways.

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

    Ihre Ausgabe sollte in etwa dem folgendem Beispiel entsprechen:

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

Erstellen der zweiten Funktion

Konfigurieren Ihrer Azure Cosmos DB-Instanz

  1. Wechseln Sie zu Azure Cloud Shell.

  2. Erstellen Sie eine neue Ressourcengruppe für die Azure Cosmos DB-Instanz über den Befehl az group create.

    az group create --name serverless-backing --location eastus
    
  3. Stellen Sie eine Azure Cosmos DB-Instanz vom Typ MongoDB über den Befehl az cosmosdb create bereit. Ersetzen Sie openfaas-cosmos durch den eindeutigen Namen Ihrer eigenen Instanz.

    az cosmosdb create --resource-group serverless-backing --name openfaas-cosmos --kind MongoDB
    
  4. Rufen Sie die Verbindungszeichenfolge für die Azure Cosmos DB-Datenbank ab, und speichern Sie diese über den Befehl az cosmosdb keys list in einer Variablen. Ersetzen Sie den Wert des --resource-group-Arguments durch den Namen Ihrer Ressourcengruppe und den Wert des --name-Arguments durch den Namen Ihrer Azure Cosmos DB-Instanz.

    COSMOS=$(az cosmosdb keys list \
      --type connection-strings \
      --resource-group serverless-backing \
      --name openfaas-cosmos \
      --output tsv)
    
  5. Füllen Sie Azure Cosmos DB mit Testdaten auf, indem Sie eine Datei mit dem Namen plans.json erstellen und in den folgenden JSON-Code kopieren.

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

Erstellen der Funktion

  1. Installieren Sie die MongoDB-Tools. Der folgende Beispielbefehl installiert diese Tools mithilfe von brew. Weitere Installationsoptionen finden Sie in der MongoDB-Dokumentation.

    brew install mongodb
    
  2. Verwenden Sie das Tool mongoimport, um Daten in die Azure Cosmos DB-Instanz zu laden.

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

    Ihre Ausgabe sollte in etwa dem folgendem Beispiel entsprechen:

    2018-02-19T14:42:14.313+0000    connected to: localhost
    2018-02-19T14:42:14.918+0000    imported 1 document
    
  3. Erstellen Sie die Funktion mithilfe des Befehls faas-cli deploy. Ersetzen Sie den Wert des -g-Arguments durch die Adresse Ihres OpenFaaS-Gateways.

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

    Nach der Bereitstellung sollte Ihre Ausgabe in etwa der folgenden Beispielausgabe entsprechen:

    Deployed. 202 Accepted.
    URL: http://52.186.64.52:8080/function/cosmos-query
    
  4. Testen Sie die Funktion mit dem folgenden curl-Befehl. Ersetzen Sie die IP-Adresse durch die Adresse Ihres OpenFaaS-Gateways.

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

    Ihre Ausgabe sollte in etwa dem folgendem Beispiel entsprechen:

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

    Hinweis

    Sie können die Funktion auch innerhalb der OpenFaaS-Benutzeroberfläche testen:

    Screenshot: OpenFaaS-Benutzeroberfläche

Nächste Schritte

Nutzen Sie den OpenFaaS-Workshop zur Weiterbildung. Dieser umfasst eine Reihe von Praxislabs, die Themen wie das Erstellen eines eigenen GitHub-Bots, das Verarbeiten von Geheimnissen, das Anzeigen von Metriken und automatisches Skalieren abdecken.