Deep Dive sobre Serverless no Openshift. Instalando Operators e implantando aplicações e funções utilizando Quarkus
.
- Ambiente para Quarkus:
VSCode
,JDK
,mvn
- CLI configurado:
kn
,oc
- kafka-producer
- Envia várias mensagens para um kafka implantado no mesmo
namespace
:my-kafka
. Acessar paths: /1, /10, /100 ou /1000- Nome do cluster do kafka:
my-cluster
- Tópico:
my-topic
- Nome do cluster do kafka:
- Envia várias mensagens para um kafka implantado no mesmo
- service-and-eventing
- Aplicação padrão com Quarkus, não tem nenhuma extensão específica para serverless/function.
- Já existe imagens disponíveis para facilitar o Deep Dive
- quarkus-funq-http
- Projeto que disponibiliza uma função para requisições
HTTP
- Projeto criado utilizando o comando:
kn func create -l quarkus -t http quarkus-funq-http
- Projeto que disponibiliza uma função para requisições
- quarkus-funq-event
- Projeto que disponibiliza uma função que recebe eventos
- Projeto criado utilizando o comando:
kn func create -l quarkus -t cloudevent quarkus-funq-event
De preferência, ter 2 clusters. O primeiro zerado, o segundo com todo o ambiente configurado para pularmos o primeiro passo de "Configuração do OpenShift"
- OpenShift 4.9
- Criar um BOT no Telegram a partir do BotFather. Ex: 15502170628:AAFTYAVcKd2EKYIKcOP9JLpnck1qk8CBOQc1
- Instalar Operadores
- Red Hat OpenShift Serverless
- Red Hat Integration - AMQ Streams
- Red Hat Integration - Camel K
- Red Hat Integration - AMQ Streams
- Criar um Kafka
my-cluster
no namespace:my-kafka
- Copiar o valor de bootstrapServers, ex:
my-cluster-kafka-bootstrap.my-kafka.svc:9092
- Copiar o valor de bootstrapServers, ex:
- Criar um Kafka Topic
my-topic
no namespace:my-kafka
- Criar um Kafka
- Red Hat OpenShift Serverless
- Criar Knative Serving no namespace
knative-serving
- Aguardar as
Conditions
estarem True
- Aguardar as
- Criar Knative Eventing no namespace
knative-eventing
- Aguardar as
Conditions
estarem True
- Aguardar as
- Criar Knative Kafka no namespace
knative-eventing
- O field
source
deve estar comenabled
=true
- Remover o field broker
- em
channel
colocar obootstrapServers
=my-cluster-kafka-bootstrap.my-kafka.svc:9092
ouenabled
=false
- O field
- Criar Knative Serving no namespace
-
Alterar para visão do Developer
-
Project:
my-project
-
+Add -> Container Image
- viniciusfcf/quarkus-serving-and-eventing-native:latest
- Serverless Deployment
-
Kafka producer
- Project:
my-kafka
- +add -> Container Image
- viniciusfcf/kafka-producer:latest
- Serverless Deployment
- URLS:
- /1 -> Envia 1 msg
- /10
- /100
- /1000
- Project:
-
quarkus-func-event e quarkus-funq-event
kn func deploy -n namespace
dentro de cada projeto
- Adicionar um Event Source, do tipo
Ping Source
com os camposdata
:{"message": "Hello world!"}
,schedule
:* * * * *
econtentType
:application/json
- De minuto em minuto será enviado o JSON acima
kn func invoke --content-type=application/json --data="Hello World"
Deploy:
- o comando
kn func invoke
de uma functionhttp
não está funcionando, já foi abertoIssue
- Como fazer funcionar: alterar no arquivo
func.yaml
oformat:
paracloudevent
- Como fazer funcionar: alterar no arquivo
- Ao criar um
Ping Source
pela web console, está incluindo o campojsonData
que é deprecated.- Versão 4.11 já está corrigido PR