OpenShift Serverless é uma plataforma robusta que permite aos desenvolvedores e engenheiros de infraestrutura executar funções e microsserviços de forma eficiente, escalável e econômica. No centro dessa solução está o Knative, um conjunto de componentes que adiciona capacidades nativas da nuvem ao Kubernetes. Este tutorial guia você através da instalação, configuração e implantação básica do OpenShift Serverless, focando em como o Knative transforma a maneira como lidamos com containerization e autoscaling em ambientes cloud native.
Entendendo o Ecossistema OpenShift Serverless
O OpenShift Serverless não é apenas uma ferramenta isolada; é uma distribuição do Kubernetes que integra o projeto Knative com a infraestrutura existente do OpenShift. O Knative fornece abstrações de alto nível para construir e implantar aplicações serverless. Ele resolve problemas críticos em ambientes de contêineres, como a necessidade de escalar aplicações para zero quando não há tráfego (cold start) e a capacidade de gerenciar o tráfego de forma granular.
Diferente do Kubernetes padrão, onde os pods precisam estar sempre rodando para receber requisições, o Knative introduz dois recursos principais: Servings, que lida com o roteamento e escalonamento de tráfego HTTP, e Builds, que automatiza a construção de imagens de contêiner a partir do código-fonte. Para profissionais de DevOps, isso significa reduzir a sobrecarga operacional (ops) e focar no desenvolvimento da lógica de negócio.
Pré-requisitos e Verificação do Ambiente
Antes de prosseguir com a instalação, é crucial garantir que o seu ambiente OpenShift esteja preparado. Você precisa de acesso administrativo ao cluster via oc CLI (OpenShift CLI) e permissões para criar projetos (namespaces). Certifique-se também de que sua versão do OpenShift Container Platform (OCP) seja compatível com a versão do Serverless que você pretende instalar.
Inicie verificando se o cluster está saudável e se você tem acesso ao namespace openshift-serverless, que é onde os operadores do servidorless serão instalados. Se você ainda não criou esse projeto, execute o seguinte comando:
oc create namespace openshift-serverless
Além disso, verifique se os operadores necessários estão disponíveis no seu catálogo de operadores. A instalação do OpenShift Serverless depende de dois operadores principais: Serverless Operator e Knative Serving. Sem esses componentes instalados corretamente, o cluster não conseguirá gerenciar as configurações de autoscaling dinâmico.
Instalando o OpenShift Serverless
A instalação é gerenciada pelo Operator Lifecycle Manager (OLM) do OpenShift. Esta abordagem garante que todas as dependências sejam resolvidas automaticamente e que as atualizações futuras sejam tratadas de maneira consistente. Siga os passos abaixo para realizar a instalação via linha de comando.
- Crie o projeto do operador: Se ainda não o fez, crie o namespace dedicado à instalação do servidorless.
oc create namespace openshift-serverless
- Crie o Subscription do Operator: Use o comando
oc applypara criar um arquivo de assinatura que instrui o OLM a buscar e instalar o Serverless Operator.
cat <<EOF | oc apply -f -
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: serverless-operator
namespace: openshift-serverless
spec:
channel: stable
installPlanApproval: Automatic
name: serverless-operator
source: redhat-operators
sourceNamespace: openshift-marketplace
EOF
- Aguarde a instalação: Verifique o status da instalação. O processo pode levar alguns minutos dependendo da velocidade da sua conexão e da carga do cluster.
oc get csv -n openshift-serverless
Quando o estado mudar para Succeeded, o operador estará pronto. Agora, você precisa instalar o componente específico do Knative Serving.
- Crie a Instância do Knative Serving: Crie um arquivo YAML que define a instalação do Knative dentro do seu cluster.
cat <<EOF | oc apply -f -
apiVersion: operator.knative.dev/v1beta1
kind: KnativeServing
metadata:
name: knative-serving
namespace: knative-serving
spec:
config:
domain:
# Substitua pelo domínio do seu cluster ou deixe padrão para testes
example.com: null
EOF
Este comando cria o namespace knative-serving automaticamente se ele não existir e aplica as configurações padrão do Knative. É importante notar que a configuração de domínio pode ser ajustada posteriormente para fins de roteamento personalizado.
Configurando o Autoscaling com Knative
Uma das características mais poderosas do OpenShift Serverless é o autoscaling horizontal (HPA) integrado ao Knative. O Knative utiliza um controlador especial que monitora a demanda de requisições e ajusta o número de réplicas (pods) em tempo real. Diferente dos HPA tradicionais do Kubernetes, que escalam com base em métricas como CPU ou Memória, o Knative escala com base no número de requisições concorrentes.
Para visualizar isso em ação, vamos criar uma configuração básica de autoscaling. O Knative permite definir parâmetros como concurrency (número máximo de requisições por pod antes de escalar) e targetUtilization. Por padrão, o Knative escala para zero quando não há tráfego.
Você pode inspecionar as configurações atuais do Knative Serving usando:
oc get configmap config-autoscaler -n knative-serving -o yaml
Neste arquivo de configuração, você encontrará ajustes finos para o comportamento do escalonador. Por exemplo, alterar o panicThresholdPercentage ou ajustar o stableWindow pode ser necessário para aplicações com picos de tráfego imprevisíveis. Para a maioria dos casos de uso padrão, as configurações iniciais são suficientes.
Implantando uma Aplicação Serverless
Agora que o ambiente está pronto, vamos implantar uma aplicação simples para demonstrar o poder do Knative. Utilizaremos uma imagem pública que serve como um "Hello World" HTTP. O processo de implantação no Knative é declarativo e utiliza recursos customizados chamados Service.
- Crie o namespace da aplicação: Separe sua aplicação do ambiente de infraestrutura.
oc new-project minha-app-serverless
- Crie o recurso Service: Crie um arquivo YAML que define o serviço serverless. Este recurso instrui o Knative a puxar a imagem, criar um Revisão (Revision) e configurar o roteamento.
cat <<EOF | oc apply -f -
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: hello-world
namespace: minha-app-serverless
spec:
template:
spec:
containers:
- image: docker.io/knative/helloworld
env:
- name: TARGET
value: "OpenShift Serverless"
EOF
Ao aplicar este manifesto, o Knative realizará as seguintes etapas automaticamente:
- Criará uma nova Revisão (uma versão imutável do código).
- Escalará os pods necessários para atender à demanda inicial.
- Configurará o roteamento de tráfego para expor a aplicação.
Verifique se o serviço foi criado e está pronto:
oc get ksvc hello-world -n minha-app-serverless
Acessando e Testando a Aplicação
Com a aplicação implantada, você precisa descobrir o endpoint (URL) para acessá-la. O Knative expõe a aplicação através de um Ingress configurado automaticamente pelo OpenShift.
oc get ksvc hello-world -n minha-app-serverless --output=custom-columns=NAME:.metadata.name,URL:.status.url
O comando acima retornará a URL completa da sua aplicação. Copie essa URL e utilize curl ou um navegador para testar.
curl https://hello-world-minha-app-serverless.apps.seu-cluster.com
Você deve receber uma resposta JSON confirmando que a mensagem foi enviada. Para observar o autoscaling, você pode gerar tráfego de carga simulado.
- Gere tráfego: Use um loop simples ou ferramenta como
wrkpara enviar múltiplas requisições simultâneas.
for i in {1..50}; do curl https://hello-world-minha-app-serverless.apps.seu-cluster.com & done
- Monitore a escala: Enquanto o tráfego é gerado, monitore a criação de novos pods.
oc get pods -n minha-app-serverless -w
Você notará que, inicialmente, pode haver apenas um pod. Conforme a demanda aumenta (baseada na concorrência configurada), o Knative criará novos pods para distribuir a carga. Após o tráfego cessar, observe que os pods serão removidos e, eventualmente, o número de réplicas cairá para zero se não houver novas requisições.
Vantagens para Infraestrutura e DevOps
A adoção do OpenShift Serverless com Knative traz benefícios tangíveis para a infraestrutura e os processos de DevOps:
- Custo Eficiente: Ao escalar para zero, você não paga por recursos ociosos. Isso é ideal para workloads intermitentes ou APIs com horários de pico definidos.
- Abstração de Complexidade: Desenvolvedores não precisam gerenciar Deployment, Service, Ingress e HPA separadamente. O recurso
Servicedo Knative encapsula toda essa lógica. - Velocidade de Implantação: O ciclo de desenvolvimento é acelerado, pois a construção da imagem e o deploy são integrados ou simplificados via GitOps.
- Portabilidade: Como o Knative é um projeto open-source baseado em Kubernetes, as aplicações serverless escritas podem ser portadas para outros ambientes que suportem Knative, evitando vendor lock-in severo.
Considerações Finais e Boas Práticas
Ao trabalhar com OpenShift Serverless, é importante lembrar que o conceito de "serverless" não significa a ausência de servidores, mas sim a abstração da infraestrutura subjacente. Ainda existem cold starts (inicialização fria) quando um pod precisa ser iniciado do zero após ficar inativo. Para aplicações críticas onde a latência é primordial, considere configurar uma escala mínima (minScale) no recurso Service para manter pelo menos um pod ativo.
Além disso, monitore as métricas de escalonamento. O OpenShift Console oferece visões detalhadas sobre o comportamento das revisões e serviços. Utilize essas ferramentas para identificar gargalos e ajustar as configurações de autoscaling conforme a necessidade do negócio.
Este tutorial apresentou os fundamentos da instalação e uso básico do Knative no OpenShift Serverless. Com essa base, você está preparado para explorar recursos avançados como Canary Deployments (implantações canário), Triggers para eventos assíncronos e integração com pipelines CI/CD modernos.