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
- Este artigo pressupõe uma compreensão básica dos conceitos do Kubernetes. Para obter mais informações, confira Principais conceitos do Kubernetes para o AKS (Serviço de Kubernetes do Azure).
- Você precisa de uma assinatura ativa do Azure. Se você não tiver uma conta gratuita, crie uma antes de começar.
- Você precisa de um cluster do AKS. Caso você não tenha um cluster, crie um usando a CLI do Azure, o Azure PowerShell, ou o portal do Azure.
- Você precisa instalar a CLI do OpenFaaS. Para ver as opções de instalação, confira a documentação da CLI do OpenFaaS.
Adicionar o repositório de gráfico do Helm do OpenFaaS
Navegue até o Azure Cloud Shell.
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.
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
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.
Obtenha o valor da senha usando o comando
echo
a seguir.echo $PASSWORD
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" ...
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
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 comecho $PASSWORD
.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
Navegue até o sistema do OpenFaaS usando a URL do OpenFaaS.
Crie uma função usando o portal do OpenFaas selecionando Implantar uma Nova Função e pesquise Figlet.
Selecione a função Figlet e escolha Implantar.
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
Navegue até o Azure Cloud Shell.
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
Implante uma instância do Azure Cosmos DB do tipo
MongoDB
usando o comandoaz cosmosdb create
. Substituaopenfaas-cosmos
por um nome exclusivo próprio.az cosmosdb create --resource-group serverless-backing --name openfaas-cosmos --kind MongoDB
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)
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
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
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
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
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:
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.
Azure Kubernetes Service