OpenShift Serverless: Entendendo o Knative

9 min de leitura Virtualização com Openshift
OpenShift Serverless: Entendendo o Knative

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.

  1. Crie o projeto do operador: Se ainda não o fez, crie o namespace dedicado à instalação do servidorless.
oc create namespace openshift-serverless
  1. Crie o Subscription do Operator: Use o comando oc apply para 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
  1. 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.

  1. 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.

  1. Crie o namespace da aplicação: Separe sua aplicação do ambiente de infraestrutura.
oc new-project minha-app-serverless
  1. 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.

  1. Gere tráfego: Use um loop simples ou ferramenta como wrk para 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
  1. 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 Service do 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.

Compartilhar: Link copiado!
Esse tutorial foi útil?

Comentários (0)

Seja o primeiro a comentar.

Deixe seu comentário

Seu comentário será analisado antes de ser publicado.

0/2000