Nos últimos anos, tem havido um grande interesse em frameworks sem servidor, com um número cada vez maior de desenvolvedores a adotarem estas soluções.
Apesar disso, aplicações baseadas em contentores já são populares, tal como o Kubernetes entre as empresas.
O Kubernetes é, sem dúvida, uma ferramenta poderosa com grande potencial. O seu ecossistema também está a crescer com uma diversidade de novas ferramentas e tecnologias de ponta, como o Knative, que tem o poder de levar o Kubernetes a um nível ainda mais alto.
O Knative foi criado para resolver situações que levam a erros e para estabelecer um padrão fundamental para plataformas de nuvem e orquestração nativa da nuvem.
Por outras palavras, o framework sem servidor Knative pode responder às necessidades de uma empresa de forma muito mais eficiente do que outras implementações sem servidor baseadas na nuvem.
Neste guia, vou explorar o Knative, os seus benefícios, exemplos de utilização, processo de instalação, modo de funcionamento e muito mais.
Vamos começar!
O que é o Knative?
Knative é um framework sem servidor baseado no Kubernetes, originalmente desenvolvido pelo Google. Ele executa funções sem servidor com base nos requisitos específicos de uma empresa, reduzindo o desperdício. É um projeto de código aberto que adiciona componentes para implementar, executar e gerenciar aplicações sem servidor no Kubernetes.
O objetivo principal do framework sem servidor Knative é padronizar a orquestração entre plataformas. Isto é conseguido através da integração da criação de contentores, dimensionamento automático, modelos de eventos e gestão de cargas de trabalho.
Antes, existia uma variedade de soluções open source para além do Knative. Cada solução tinha a sua própria forma de implementação, o que levava a uma fragmentação do mercado, devido à falta de práticas padronizadas. Isso significava que era necessário escolher um fornecedor específico para se ter acesso a um recurso específico do sistema.
No entanto, começaram a surgir problemas de migração. E para evitar tais problemas, o framework sem servidor Knative foi criado. Assim, se precisar de incorporar qualquer tarefa, o Knative pode fazê-lo de forma eficiente dentro de um pipeline baseado em Kubernetes.
O Knative tem três partes principais:
- Knative Build: Cria imagens de contentores e disponibiliza-as a partir do código fonte.
- Knative Serving: Utiliza o Istio e o Kubernetes para conectar e implementar estas imagens de contentores através dos recursos de infraestrutura alocados.
- Knative Eventing: Permite aos utilizadores definir os gatilhos de eventos e associar esses gatilhos a funções dentro de contentores.
Sempre que o Knative deteta um evento, inicia o processo associado para o executar sob demanda. Com o Knative, não é preciso alocar nós de contentores, clusters ou pods para trabalho, uma vez que o Knative só ativa os recursos de hospedagem quando um determinado processo é executado. Desta forma, o Knative consegue equilibrar os benefícios das abordagens sem servidor e de contentores.
Conceitos Fundamentais do Knative
Vamos analisar os principais conceitos do Knative Serverless Framework e como eles se relacionam com as suas primitivas.
Build (Construção)
O Knative-build ajuda a utilizar e estender as primitivas existentes do Kubernetes, permitindo a execução de compilações de contentores diretamente a partir da fonte. Ele possibilita o uso do código fonte das dependências e do repositório, construindo imagens de contentores e registrando-as.
Eventos
O componente de eventos ajuda a criar uma melhor comunicação entre produtores e consumidores de eventos, com acoplamento flexível, para construir uma arquitetura orientada a eventos. O Knative coloca estes eventos numa fila que precisa de ser executada automaticamente, sem necessidade de scripts dos programadores.
Posteriormente, estes eventos são entregues aos contentores. Em seguida, o sistema envia feeds aos produtores de eventos para executarem tarefas. Isto reduz o trabalho dos programadores na criação de código para estabelecer conexões.
Funções
Uma função é uma unidade de implementação independente, sendo um serviço do Knative Serving, como um microsserviço. O seu código é escrito para executar uma única tarefa, tal como:
- Processar um ficheiro numa base de dados
- Guardar um utilizador numa base de dados
- Executar um trabalho agendado
O framework serverless Knative foi concebido para permitir o desenvolvimento, implementação e gestão eficazes das funções.
Plug-ins
Os plug-ins permitem estender ou substituir facilmente a funcionalidade do framework sem servidor Knative. Cada ficheiro serverless.yml contém uma propriedade de plug-in, que apresenta vários plug-ins.
Recursos
Os recursos são os componentes de infraestrutura sem servidor que a sua função utiliza, incluindo:
- Origem de eventos AWS SQS
- Uma tarefa agendada (executada a cada 5 minutos, 10 minutos, etc.)
- Uma fonte de eventos Kafka
E muito mais.
Serviços
Os serviços são como um projeto. Portanto, um serviço é a unidade de organização dentro do framework sem servidor Knative. Embora possa ter muitos serviços para uma aplicação, pode pensar no serviço como um ficheiro de projeto.
É aqui que vai poder definir as funções, eventos e recursos, tudo dentro de um único ficheiro, seja ele serverless.yml, serverless.json ou serverless.js. Quando implementa os serviços com o framework sem servidor, tudo dentro desse ficheiro é implementado de uma só vez.
Serving (Servir)
O Knative-serving é construído sobre o Istio e o Kubernetes e suporta a implementação de aplicações. Permite o desenvolvimento rápido de contentores sem servidor, programação de rede e dimensionamento automático para os componentes do Istio. O Knative-serving considera os contentores como um serviço escalável que pode variar de uma instância a várias instâncias de contentores.
Características do Knative
Vejamos algumas das características do framework sem servidor Knative:
- O Knative é um framework sem servidor baseado em Kubernetes, que permite implementar serviços no Kubernetes.
- Integra facilmente o Knative com o ambiente suportado.
- Os programadores podem usar diretamente a API do Kubernetes com a ajuda do Knative para implementar serviços sem servidor.
- Permite que os utilizadores iniciem serviços sem servidor usando o sistema de eventos do Knative.
Como funciona o Knative?
O framework sem servidor Knative funciona como um segmento de encaminhamento de eventos e conecta o Istio e o Kubernetes. O Kubernetes funciona como orquestrador para microsserviços e contentores. O Istio, por outro lado, é uma tecnologia de malha de código aberto que junta vários componentes para interagir com o utilizador e entre si.
O Knative oferece aos utilizadores vários componentes direcionados para realizar o trabalho básico do dia-a-dia. Estes componentes são utilizados repetidamente em diversas aplicações. Um programador pode usar qualquer linguagem de programação. Portanto, não é preciso ter conhecimento específico de linguagens, uma vez que o Knative apenas reconhece imagens de contentores.
Existem três componentes do framework sem servidor Knative que são essenciais para o seu funcionamento.
Construção de Novos Contentores
O componente de construção é responsável por construir novos contentores. Ele pode converter código fonte num contentor. O Knative pode ser configurado para atender às necessidades específicas de cada negócio.
Primeiro, o Knative extrai o código fonte de uma biblioteca como o Github. Em seguida, as dependências subjacentes são adicionadas para que o código seja executado de forma eficaz. As imagens de contentores são então construídas e colocadas em ficheiros a que a plataforma Kubernetes consegue aceder.
O contentor é disponibilizado para os programadores utilizando o Kubernetes e o Knative. Assim, os contentores são construídos desde que a origem do código seja conhecida.
Serving (Servir) ou Executar a Plataforma
O componente de serviço é responsável pelo funcionamento da plataforma. Envolve:
- Configuração: A configuração é crucial para gerir várias versões de um serviço. Sempre que há uma implementação de uma nova funcionalidade de um contentor, o Knative guarda a versão existente e cria uma nova com as alterações e funcionalidades mais recentes. Além disso, o Knative define o estado de um serviço.
- Dimensionamento Automático: Para trabalhar melhor com contentores sem servidor, é necessário conseguir dimensionar automaticamente os contentores para cima ou para baixo. O Knative consegue dimensionar automaticamente os serviços para um número elevado, se necessário.
- Encaminhamento Inteligente de Serviço: É uma parte importante do mecanismo de trabalho do Knative. Permite aos programadores direcionar o fluxo e quantidade de tráfego para diferentes versões existentes dos microsserviços. O encaminhamento inteligente de serviço pode ser utilizado para introduzir novas funcionalidades e estratégias de implementação azul-verde.
Permite expor uma fração dos utilizadores a testes e versões recentes, e gradualmente encaminhar uma grande quantidade de tráfego para a nova versão.
Eventos para Definir Funções
O componente de eventos do Knative é responsável por descrever a função do Knative. Permite definir a execução dos contentores com base em eventos. Diferentes eventos acionam funções específicas de contentores.
Os programadores podem definir os gatilhos de eventos e os contentores associados para permitir que o Knative faça o seu trabalho. O Knative gere a lista de eventos e entrega dos mesmos.
Benefícios do Knative
O Knative fornece serviços como a gestão de rotas, o lançamento faseado e a ligação de serviços. Tem uma grande comunidade. Vamos analisar como o Knative influencia as empresas a adotarem esta tecnologia.
- Ao contrário de outras soluções, o Knative tem eventos padrão e é compatível com a solução FaaS. Oferece um framework padrão CloudEvent, que ajuda a projetar a arquitetura sem servidor.
- Embora o Knative não seja um PaaS, permite criar um PaaS sem servidor com a plataforma de orquestração sem servidor.
- O Knative tem um design sem servidor completo e maduro.
- Suporta várias plataformas e oferece um padrão universal entre fornecedores de nuvem para eliminar a possibilidade de se ficar limitado a uma solução específica de um fornecedor.
- O Knative fornece um framework flexível.
- Suporta lançamentos faseados proporcionais.
- Pode experimentar o ecossistema sem servidor num ambiente com contentores.
- O Knative elimina a necessidade de confiar na gestão e nas ferramentas.
- Pode migrar rapidamente para outros fornecedores de nuvem integrados com o Knative, implementando o Kubernetes.
- Oferece um modelo de computação orientado por pedidos.
- Permite gerir fluxos de trabalho como um serviço.
- Com o Knative, pode processar dados de IoT, realizar verificações de acessibilidade e validar configurações dos seus grupos de segurança.
- Permite que os programadores se concentrem na codificação e criem código iterativo rapidamente.
- Garante que os programadores incorporam novas versões.
- O modelo baseado em eventos do Knative ajuda a implementar projetos, incluindo subscrições, conexões com o sistema externo e registos.
Desafios do Knative (e algumas soluções)
Desafios de Eficiência
Um Framework Knative que suporta aplicações adequadas oferece um melhor desempenho com um custo mínimo. No entanto, uma combinação inadequada de aplicações pode resultar em custos mais elevados e em recursos de contentores subutilizados. Isso pode levar a um baixo desempenho da aplicação, que é o maior desafio da implementação sem servidor do Knative.
Assim, um pool de recursos mal dimensionado ou aplicações incorretas podem anular muitos benefícios do Knative.
Pode superar este desafio realizando testes para verificar as quantidades de recursos e a combinação de aplicações no Knative. Meça as cargas de eventos, dimensionando as cargas média e máxima para cada uma, e estime o consumo total de recursos. Repita este processo para várias aplicações para criar e executar uma configuração de teste para validar as estimativas.
Desafios Funcionais
Os desafios funcionais do Knative podem ser:
- O Knative depende de funções que se enquadram num modelo sem estado. Isso significa que nenhum dado é armazenado no próprio componente. O desenvolvimento das funções não é uma fase difícil, mas exige uma pequena mudança na abordagem, o que significa que um único erro pode prejudicar o desempenho do software.
- Os dados de negócios consistem em transações de várias etapas, e as funções sem estado mantêm o contexto em todas as etapas. O Knative não tem este recurso, como as ferramentas sem servidor da nuvem pública podem ter.
A monitorização regular e a correção de problemas podem ajudar a manter um desempenho dentro de níveis aceitáveis.
Desafios Operacionais
Em comparação com as ofertas sem servidor numa nuvem pública, existe um desafio de operações com o Knative. Os administradores não controlam os servidores subjacentes com a nuvem pública. Mas precisarão de gerir servidores, juntamente com o Kubernetes, contentores, Knative e o próprio Istio.
O Knative expande minimamente a complexidade das operações e desenvolvimento para empresas que já estão comprometidas com Kubernetes e contentores. Aqueles que já estão comprometidos com a malha de serviço e microsserviços verão o Knative como uma extensão natural.
Casos de Uso do Knative
Para aplicações que geram um número variável de eventos que permanecem dentro ou acima dos limites estabelecidos no tempo, o Knative é a melhor opção. Os casos de uso específicos do framework sem servidor Knative incluem:
A orientação por eventos é essencial. Se as equipas de TI não conseguem imaginar uma aplicação como uma série de eventos em vez de transações, o Knative pode não ser uma boa escolha por motivos funcionais e de eficiência.
Pré-requisitos e Instalação do Knative
Como vimos nas seções acima, o Knative é um conjunto de componentes como eventos e serviços que funcionam numa malha de serviço e num cluster de orquestração de cargas de trabalho. Existem utilitários de linha de comandos que precisamos de instalar para uma operação direta. Assim, precisamos de algumas dependências para garantir que conseguimos prosseguir com a instalação.
Pré-requisitos
Existem várias opções para instalar o Kubernetes. O Docker Desktop permite ativar um cluster Kubernetes fácil, que serve para vários propósitos. A abordagem simples é usar o Kubernetes no Docker para executar o cluster do Kubernetes, juntamente com os nós de contentores do Docker. A forma mais conveniente de trabalhar com o cluster é usar a ferramenta de linha de comandos Knative.
O Knative CLI oferece uma interface fácil e rápida para criar os seus recursos. Ajuda em tarefas complexas, como divisão de tráfego e dimensionamento automático. A forma mais conveniente é descarregar o binário compatível da página do GitHub.
Instalação
Depois de termos todos os pré-requisitos, podemos prosseguir com a instalação dos componentes. Para o ambiente de desenvolvimento, existe um plugin de início rápido. O plugin ajuda na instalação de um cluster Knative local usando o cliente Knative. Pode descarregar o plugin de início rápido na página oficial de lançamento.
Conclusão: O Futuro do Knative
O Knative revolucionou a computação sem servidor, fornecendo dimensionamento automático de aplicações. Isto tem um impacto significativo num sistema interoperável e modular.
No futuro, espera-se que o Knative colmate as lacunas atuais e se torne uma das tecnologias mais eficientes para executar arquiteturas sem servidor.
A tecnologia Knative é mais influente para os programadores, devido aos seus benefícios quando comparada com as alternativas sem servidor. O Knative ajuda a poupar muito tempo, substituindo a necessidade de criar e manter extensões do Kubernetes. Os programadores estão muito satisfeitos com a tecnologia Knative, uma vez que é fácil de usar e uma ótima alternativa para soluções sem servidor.
Assim, se deseja maximizar o poder do ambiente Kubernetes nos seus fluxos de trabalho na nuvem, adote a tecnologia Knative e comprove os benefícios por si mesmo.