Compartilhar via


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

O OpenFaaS é uma estrutura que usa contêineres para criar funções sem servidor. Como um projeto de software livre, conquistou adoção em larga escala dentro da comunidade. Este documento fornece detalhes sobre como instalar e usar o OpenFaas em um cluster do AKS (Serviço de Kubernetes do Azure).

Antes de começar

Adicionar o repositório de gráfico do Helm do OpenFaaS

  1. Navegue até o Azure Cloud Shell.

  2. Adicione o repositório de gráficos do Helm do OpenFaaS e atualize-o para a última versão usando os comandos helm a seguir.

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

Implantar o OpenFaaS

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

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

    kubectl apply -f https://raw.githubusercontent.com/openfaas/faas-netes/master/namespaces.yml
    
  2. Gere uma senha para o Portal da Interface do Usuário do OpenFaaS e a API REST usando os comandos a seguir. O gráfico do Helm usa essa senha para habilitar a autenticação básica no Gateway do OpenFaaS, que é exposto à Internet por meio de um balanceador de carga de 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ê possui uma licença enterprise do OpenFaaS, recomendamos usar o Gerenciamento de Identidade e Acesso (IAM) para OpenFaaS em vez disso.

  3. Obtenha o valor da senha usando o comando echo a seguir.

    echo $PASSWORD
    
  4. Implante o OpenFaaS no cluster do AKS usando o comando helm upgrade.

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

    Seu resultado deve ser semelhante ao seguinte exemplo de saída condensado:

    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 comando kubectl get service.

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

    Seu resultado deve ser semelhante ao seguinte exemplo de saída:

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

    Captura de tela da interface do usuário 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 do OpenFaaS usando a URL do OpenFaaS.

  2. Crie uma função usando o portal do OpenFaas selecionando Implantar uma Nova Função e pesquise Figlet.

  3. Selecione a função Figlet e escolha 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 comando curl a seguir. Substitua o endereço IP no exemplo a seguir pelo endereço do gateway do OpenFaaS.

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

    Seu resultado deve ser semelhante ao seguinte exemplo de saída:

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

Criar a segunda função

Configurar sua instância do Azure Cosmos DB

  1. Navegue até o Azure Cloud Shell.

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

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

    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 comando az cosmosdb keys list. Atualize o valor do argumento --resource-group com o nome do grupo de recursos e o do argumento --name com o 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 alguns dados de teste criando um arquivo chamado plans.json e copiando o JSON a seguir.

    {
        "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 exemplo de comando a seguir instala essas ferramentas usando o Brew. Para ver mais opções de instalação, confira a documentação do MongoDB.

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

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

    Seu resultado deve ser semelhante ao seguinte exemplo de saída:

    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 comando faas-cli deploy. Atualize o valor do argumento -g com o endereço do gateway do OpenFaaS.

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

    Após a implantação, a saída será parecida com o seguinte exemplo de saída:

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

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

    Seu resultado deve ser semelhante ao seguinte exemplo de saída:

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

    Observação

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

    Captura de tela da interface do usuário do OpenFaaS.

Próximas etapas

Continue aprendendo com o workshop do OpenFaaS, que inclui um conjunto de laboratórios práticos que abordam tópicos como a criação de um bot próprio do GitHub, o consumo de segredos, a exibição de métricas e o dimensionamento automático.