Usando OpenFaaS no AKS no Azure Stack HCI

O OpenFaaS é uma estrutura para a criação de funções sem servidor por meio do uso de contêineres. Como um projeto de software livre, conquistou adoção em larga escala dentro da comunidade. Este documento detalha a instalação e o uso do OpenFaas no cluster do Kubernetes em execução no AKS Azure Stack HCI.

Pré-requisitos

Para concluir as etapas deste artigo, você precisa dos itens a seguir.

  • Noções básicas sobre o Kubernetes.
  • Um AKS no Azure Stack HCI cluster com pelo menos um nó de trabalho do Linux em execução.
  • Você configurou seu ambiente local kubectl para apontar para o AKS Azure Stack HCI cluster. Você pode usar o comando Get-AksHciCredential do PowerShell para acessar o cluster usando .
  • Linha de comando do Helm v3 e pré-requisitos instalados.
  • CLI do Azure também pode ser usado para executar comandos, se você preferir isso ao PowerShell.
  • Ferramentas de linha de comando do Git instaladas em seu sistema
  • Instale a CLI do OpenFaaS. Confira a documentação da CLI do OpenFaaS para ver as opções de instalação

Importante

O Helm destina-se a ser executado em nós do Linux. Se você tiver nós do Windows Server em seu cluster, deverá garantir que os pods do Helm sejam agendados apenas para execução em nós do Linux. Também é preciso garantir que todos os gráficos do Helm instalados também estejam agendados para execução nos nós corretos. Os comandos neste artigo usam seletores de nó para garantir que os pods sejam agendados para os nós corretos, mas nem todos os gráficos do Helm podem expor um seletor de nó. Você também pode considerar o uso de outras opções em seu cluster, como [taints](./adapt-apps-mixed-os-clusters.md#taints-and-tolerations).

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

Com o arquivo kubeconfig em mãos, abra o console para iniciar o processo de implantação. Se você estiver executando no Windows, baixar e executar o Git Bash é a maneira mais fácil de acompanhar. A partir daí, para começar, o OpenFaaS mantém seus próprios gráficos do Helm para se manter atualizado com todas as alterações mais recentes:

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

Implantar o OpenFaaS

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

Criar um namespace para as funções e o sistema OpenFaaS:

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

Gerar uma senha para o portal de interface do usuário do OpenFaaS e a API REST:

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

Você pode obter o valor do segredo com echo $PASSWORD.

A senha que criamos aqui será usada pelo gráfico do Helm para habilitar a autenticação básica no Gateway OpenFaaS, que é exposto externamente por meio de um LoadBalancer.

Um gráfico do Helm para o OpenFaaS está incluído no repositório clonado. Use este gráfico para implantar o OpenFaaS no cluster do AKS.

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

Saída:

NAME:   openfaas
LAST DEPLOYED: Fri May 14 18:35:47 2021
NAMESPACE: openfaas
STATUS: deployed
REVISION: 1
TEST SUITE: None

Para verificar se o OpenFaas foi iniciado, execute o seguinte comando:

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

Um endereço IP público é criado para acessar o gateway OpenFaaS. Para recuperar esse endereço IP, use o comando kubectl get service. Pode levar um minuto até que o endereço IP seja atribuído ao serviço.

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

Saída:

NAME               TYPE           CLUSTER-IP     EXTERNAL-IP    PORT(S)          AGE
gateway            ClusterIP      10.110.205.41  <none>         8080/TCP         7m
gateway-external   LoadBalancer   10.107.51.110  192.168.0.152  8080:32029/TCP   7m

Para testar o sistema OpenFaaS, navegue para o endereço IP externo na porta 8080, http://192.168.0.152:8080, neste exemplo. Será solicitado que você faça logon. Para buscar sua senha, insira echo $PASSWORD.

Interface do usuário do OpenFaaS

De $OPENFAAS_URL definido como External-IP encontrado acima.

Faça logoff com seu console. Observe que, se estiver executando o Git Bash no Windows, talvez seja necessário usar faas-cli em vez de ./faas-cli no comando a seguir.

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

Criar a primeira função

Agora que o OpenFaaS está funcionando, crie uma função usando o portal do OpenFaas.

Clique em Implantar Nova Função e pesquise Figlet. Selecione a função do Figlet e clique em Implantar.

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

Use o Curl para invocar a função. Substitua o endereço IP no exemplo a seguir pelo endereço IP do gateway do OpenFaas.

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

Saída:

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

Limpar os recursos

Quando você implanta um gráfico Helm, vários recursos do Kubernetes são criados. Esses recursos incluem pods, implantações e serviços. Para limpar esses recursos, use o comando [helm uninstall][helm-cleanup] e especifique o nome da versão, conforme encontrado no comando helm list anterior.

helm uninstall openfaas

O exemplo a seguir mostra que a versão chamada openfaas foi desinstalada:

release "openfaas" uninstalled

Próximas etapas

Você pode continuar a aprender com o workshop do OpenFaaS por meio de um conjunto de laboratórios práticos que abordam tópicos do tipo: como criar seu próprio bot do GitHub, como consumir segredos, como exibir métricas e como fazer o dimensionamento automático.