Partilhar via


Usar o OpenFaaS no Serviço Kubernetes do Azure (AKS)

OpenFaaS é uma estrutura que usa contêineres para construir funções sem servidor. Como um projeto de código aberto, ganhou adoção em larga escala dentro da comunidade. Este documento detalha a instalação e o uso do OpenFaas em um cluster do Serviço Kubernetes do Azure (AKS).

Antes de começar

Adicionar o repositório de gráficos de leme OpenFaaS

  1. Navegue até Azure Cloud Shell.

  2. Adicione o repositório de gráficos de leme OpenFaaS e atualize para a versão mais recente usando os seguintes helm comandos.

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

Implantar o OpenFaaS

Como uma boa prática, as funções OpenFaaS e OpenFaaS devem ser armazenadas em seu próprio namespace Kubernetes.

  1. Crie um namespace para o sistema OpenFaaS e funções usando o kubectl apply comando.

    kubectl apply -f https://raw.githubusercontent.com/openfaas/faas-netes/master/namespaces.yml
    
  2. Gere uma senha para o OpenFaaS UI Portal e REST API usando os seguintes comandos. O gráfico de leme usa essa senha para habilitar a autenticação básica no OpenFaaS Gateway, que é exposto à Internet por meio de um LoadBalancer em nuvem.

    # 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

    Usar um nome de usuário e senha para autenticação é um padrão inseguro. Se você tiver uma licença empresarial do OpenFaaS, recomendamos usar o Gerenciamento de Identidade e Acesso (IAM) para OpenFaaS .

  3. Obtenha o valor da sua senha usando o seguinte echo comando.

    echo $PASSWORD
    
  4. Implante o OpenFaaS em seu cluster AKS usando o helm upgrade comando.

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

    Sua saída deve ser semelhante à seguinte saída de exemplo condensada:

    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. Um endereço IP público é criado para acessar o gateway OpenFaaS. Obtenha o endereço IP usando o kubectl get service comando.

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

    Sua saída deve ser semelhante à saída de exemplo a seguir:

    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. Teste o sistema OpenFaaS navegando até o endereço IP externo na porta 8080, http://52.186.64.52:8080 neste exemplo, onde você será solicitado a fazer login. O usuário padrão é admin e sua senha pode ser recuperada usando echo $PASSWORD.

    Screenshot da IU do OpenFaaS.

  7. Defina $OPENFAAS_URL como a URL do endereço IP externo na porta 8080 e faça logon com a CLI do Azure usando os comandos a seguir.

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

Criar a primeira função

  1. Navegue até o sistema OpenFaaS usando seu URL OpenFaaS.

  2. Crie uma função usando o portal OpenFaas selecionando Implantar uma nova função e procure por Figlet.

  3. Selecione a função Figlet e, em seguida, selecione Implantar.

    A captura de tela mostra a caixa de diálogo Implantar uma nova função com o texto Figlet na linha de pesquisa.

  4. Invoque a função usando o seguinte curl comando. Certifique-se de substituir o endereço IP no exemplo a seguir pelo seu endereço de gateway OpenFaaS.

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

    Sua saída deve ser semelhante à saída de exemplo a seguir:

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

Criar segunda função

Configurar sua instância do Azure Cosmos DB

  1. Navegue até Azure Cloud Shell.

  2. Crie um novo grupo de recursos para a instância do Azure Cosmos DB usando o az group create comando.

    az group create --name serverless-backing --location eastus
    
  3. Implante uma instância do tipo MongoDB Azure Cosmos DB usando o az cosmosdb create comando. Substitua openfaas-cosmos por seu próprio nome de instância exclusivo.

    az cosmosdb create --resource-group serverless-backing --name openfaas-cosmos --kind MongoDB
    
  4. Obtenha a cadeia de conexão de banco de dados do Azure Cosmos DB e armazene-a em uma variável usando o az cosmosdb keys list comando. Certifique-se de substituir o valor do --resource-group argumento pelo nome do seu grupo de recursos e o --name argumento pelo nome da sua instância do Azure Cosmos DB.

    COSMOS=$(az cosmosdb keys list \
      --type connection-strings \
      --resource-group serverless-backing \
      --name openfaas-cosmos \
      --output tsv)
    
  5. Preencha o Azure Cosmos DB com dados de teste criando um arquivo nomeado plans.json e copiando no seguinte 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
    }
    

Criar a função

  1. Instale as ferramentas do MongoDB. O comando de exemplo a seguir instala essas ferramentas usando brew. Para obter mais opções de instalação, consulte a documentação do MongoDB.

    brew install mongodb
    
  2. Carregue a instância do Azure Cosmos DB com dados usando a ferramenta mongoimport .

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

    Sua saída deve ser semelhante à saída de exemplo a seguir:

    2018-02-19T14:42:14.313+0000    connected to: localhost
    2018-02-19T14:42:14.918+0000    imported 1 document
    
  3. Crie a função usando o faas-cli deploy comando. Certifique-se de atualizar o valor do argumento com seu -g endereço de gateway OpenFaaS.

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

    Uma vez implantada, sua saída deve ser semelhante à saída de exemplo a seguir:

    Deployed. 202 Accepted.
    URL: http://52.186.64.52:8080/function/cosmos-query
    
  4. Teste a função usando o seguinte curl comando. Certifique-se de atualizar o endereço IP com o endereço do gateway OpenFaaS.

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

    Sua saída deve ser semelhante à saída de exemplo a seguir:

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

    Você também pode testar a função dentro da interface do usuário do OpenFaaS:

    Screenshot da IU do OpenFaas.

Próximos passos

Continue a aprender com o workshop OpenFaaS, que inclui um conjunto de laboratórios práticos que abrangem tópicos como como criar seu próprio bot GitHub, consumir segredos, visualizar métricas e dimensionar automaticamente.