Usando OpenFaaS em AKS em Azure Stack HCI

OpenFaaS é uma estrutura para construir funções sem servidor através da utilização de contentores. Como um projeto de código aberto, ganhou adoção em larga escala dentro da comunidade. Este documento detalha a instalação e utilização do OpenFaas no cluster Kubernetes em execução em AKS em Azure Stack HCI.

Pré-requisitos

Para completar os passos dentro deste artigo, você precisa do seguinte.

  • Compreensão básica de Kubernetes.
  • Um aglomerado AKS no Azure Stack HCI com pelo menos um nó de trabalhadores Linux que está a funcionar.
  • Configuraste o ambiente local kubectl para apontar para o teu AKS no cluster HCI da Azure Stack. Pode utilizar o comando Get-AksHciCredential PowerShell para aceder ao seu cluster utilizando .
  • Linha de comando Helm v3 e pré-requisitos instalados.
  • O Azure CLI também pode ser usado para executar comandos, se preferir isto ao PowerShell.
  • Ferramentas de linha de comando Git instaladas no seu sistema
  • Instale o OpenFaaS CLI. Consulte a documentação do OpenFaaS CLI para opções de instalação

Importante

O leme destina-se a correr em nós Linux. Se tiver Windows nós do Servidor no seu cluster, deve certificar-se de que as cápsulas Helm estão programadas apenas para funcionar em nós Linux. Também precisa de garantir que quaisquer gráficos helm que instale também estão programados para executar nos nós corretos. Os comandos deste artigo utilizam seletores de nó para garantir que as cápsulas estão programadas para os nós corretos, mas nem todos os gráficos helm podem expor um seletor de nó. Também pode considerar a utilização de outras opções no seu cluster, tais como [taints](./adapt-apps-mixed-os-clusters.md#taints-and-tolerations).

Adicione o repo de gráfico de leme OpenFaaS

Com o seu ficheiro kubeconfig na mão, abra a sua consola para iniciar o processo de implementação. Se você está correndo em Windows, baixar e executar Git Bash é a maneira mais fácil de seguir. A partir daí, para começar, o OpenFaaS mantém os seus próprios gráficos de leme para se manter atualizado com todas as mudanças mais recentes:

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

Implementar OpenFaaS

Como uma boa prática, as funções OpenFaaS e OpenFaaS devem ser armazenadas no seu próprio espaço de nome Kubernetes.

Criar um espaço de nome para o sistema e funções OpenFaaS:

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

Gere uma palavra-passe para o Portal OpenFaaS UI e para 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"

Pode obter o valor do segredo echo $PASSWORD com.

A palavra-passe que criamos aqui será usada pelo gráfico de leme para permitir a autenticação básica no Gateway OpenFaaS, que é exposto externamente através de um LoadBalancer.

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

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

Resultado:

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 já começou, executar o seguinte comando:

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

É criado um endereço IP público para aceder ao gateway OpenFaaS. Para recuperar este endereço IP, utilize o comando de serviço kubectl. Pode levar um minuto para o endereço IP ser atribuído ao serviço.

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

Resultado:

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, consulte o endereço IP externo na porta 8080, http://192.168.0.152:8080 neste exemplo. Serão solicitados a fazer login. Para obter a sua senha, insira echo $PASSWORD .

OpenFaaS UI

Definido $OPENFAAS_URL para o IP externo encontrado acima.

Faça login com a sua consola. Note que se correr em Git Bash no Windows, poderá ter de usar faas-cli em vez de ./faas-cli no comando abaixo.

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

Criar primeira função

Agora que o OpenFaaS está operacional, crie uma função utilizando o portal OpenFaas.

Clique em Implementar Nova Função e procure por Figlet. Selecione a função Figlet e clique em Implementar.

A screenshot mostra a caixa de diálogo De Nova Função com a figleta de texto na linha de pesquisa.

Use caracóis para invocar a função. Substitua o endereço IP no exemplo seguinte pelo do seu gateway OpenFaas.

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

Resultado:

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

Limpar os recursos

Quando se implementa um gráfico Helm, são criados vários recursos kubernetes. Estes recursos incluem cápsulas, implantações e serviços. Para limpar estes recursos, utilize o comando [helm desinstalar][helm-cleanup] e especifique o seu nome de libertação, tal como se encontra no helm list comando anterior.

helm uninstall openfaas

O exemplo a seguir mostra que o lançamento denominado openfaas foi desinstalado:

release "openfaas" uninstalled

Passos Seguintes

Você pode continuar a aprender com o workshop OpenFaaS através de um conjunto de laboratórios práticos que abrangem tópicos como como criar o seu próprio bot GitHub, consumir segredos, visualizar métricas e auto-dimensionamento.