O blog da AWS

Capacitando a observabilidade do Kubernetes com o eBPF no Amazon EKS

Por Tsahi Duek e co-escrito por Shahar Azulay, CEO e cofundador da GroundCover

Introdução

A abstração introduzida pelo Kubernetes permite que as equipes executem facilmente aplicativos em escalas variadas sem se preocupar com alocação de recursos, escalonamento automático ou autorrecuperação. No entanto, a abstração não é isenta de custos e aumenta a complexidade e a dificuldade de rastrear a causa raiz dos problemas que os usuários do Kubernetes enfrentam.

Para mitigar esses problemas, a observabilidade detalhada do estado de cada aplicação é fundamental, mas pode ser um desafio. Os usuários precisam garantir que estão expondo as métricas corretas, emitindo registros acionáveis e instrumentando o código da aplicação com bibliotecas específicas do lado do cliente para coletar extensões e rastreamentos. Se isso não for uma tarefa difícil por si só, obter essa visibilidade em vários códigos pequenos, distribuídos e interdependentes que compõem um ambiente moderno de microsserviços do Kubernetes se torna uma tarefa muito mais difícil em grande escala.

Uma nova tecnologia emergente chamada eBPF (Extended Berkeley Packet Filter) está a caminho de aliviar muitos desses problemas. Considerado uma tecnologia inestimável por muitos líderes do setor, o eBPF permite que os usuários rastreiem qualquer tipo de evento relacionado ao desempenho de suas aplicações — como operações de rede — diretamente do kernel Linux, com sobrecarga mínima de desempenho e sem configurar sidecars ou agentes.

O sensor eBPF está fora do código da aplicação, o que significa zero alterações ou integrações no código e tempo imediato de valorização em toda a sua pilha. O resultado é uma visibilidade granular do que está acontecendo em um cluster Kubernetes do Amazon Elastic Kubernetes Service (Amazon EKS).

Neste post, abordaremos o que é eBPF, por que é importante e quais ferramentas baseadas em eBPF estão disponíveis para você ter visibilidade de suas aplicações no Amazon EKS. Também analisaremos como a Groundcover usa o eBPF para permitir sua arquitetura econômica.

No mundo acelerado do desenvolvimento de software de hoje, o Kubernetes surgiu como um divisor de águas, oferecendo escalabilidade e gerenciamento de recursos perfeitos para aplicações. No entanto, com essa abstração, surge o desafio de manter uma observabilidade abrangente em ambientes complexos de microsserviços. Nesta postagem do blog, exploraremos como o eBPF (Extended Berkeley Packet Filter) está revolucionando a observabilidade do Kubernetes (no Amazon EKS). As Amazon Machine Images (AMIs) otimizadas para Amazon EKS oferecem suporte total ao eBPF, o que capacita os usuários com insights incomparáveis sobre suas aplicações.

Visão geral da solução

A necessidade de observabilidade

À medida que as aplicações se expandem e as interdependências crescem, obter informações detalhadas sobre seu estado se torna vital para uma solução eficaz de problemas. Os usuários do Kubernetes enfrentam a difícil tarefa de instrumentar aplicações, coletar métricas e emitir registros acionáveis para rastrear problemas. Isso se torna ainda mais desafiador em ambientes de microsserviços modernos, onde vários códigos pequenos, distribuídos e independentes interagem entre si.

Apresentando o eBPF: um divisor de águas para a observabilidade do Kubernetes

Na busca por uma melhor observabilidade, o eBPF surge como uma tecnologia inestimável. Diferentemente das abordagens tradicionais de observabilidade, o eBPF permite que os usuários rastreiem qualquer tipo de evento relacionado ao desempenho de suas aplicações, como operações de rede, diretamente do kernel Linux, com sobrecarga mínima de desempenho e sem configurar sidecars ou agentes.

A vantagem out-of-band do eBPF

A vantagem do eBPF está em sua abordagem de observabilidade out-of-band. Out-of-band significa que o eBPF coleta os dados sem fazer parte do código do aplicativo. Uma das vantagens do eBPF é que nenhuma alteração de código é necessária e a instalação pode ser feita no nível da instância sem lidar com a configuração por aplicação implantada. Outra vantagem é que ela elimina os efeitos inesperados da pilha de observabilidade de seu código de aplicação sensível ao tempo, já que toda a coleta de dados é feita fora do processo de aplicação.

Os usuários podem obter visibilidade granular das aplicações implantados em seus clusters Kubernetes sem instrumentar seu código ou integrar bibliotecas de terceiros. Ao rastrear no nível do kernel, o eBPF permite que os usuários analisem o funcionamento interno de suas aplicações, com tempo imediato de valorização, cobertura total e profundidade sem precedentes.

Ferramentas baseadas em eBPF para observabilidade do Amazon EKS

Uma infinidade de ferramentas baseadas em EBPF tem surgido para fornecer uma observabilidade abrangente das aplicações no Amazon EKS. Essas ferramentas oferecem recursos de rastreamento para vários eventos, incluindo operações de rede, chamadas de sistema e até eventos de aplicação personalizados. Por exemplo, o BCC é um kit de ferramentas que ajuda a simplificar a inicialização e o desenvolvimento do eBPF e inclui várias ferramentas úteis, como análise de tráfego de rede e perfil de utilização de recursos. Outro exemplo é o bpftrace, que é um pouco mais focado em frases simples e scripts curtos para insights rápidos. Essas ferramentas foram criadas para serem ad hoc, para que você possa executá-las diretamente em qualquer máquina Linux e obter valor em tempo real. Os usuários do Amazon EKS que desejam inspecionar seu ambiente Kubernetes com ferramentas eBPF devem conferir o Inspector Gadget, que gerencia o empacotamento, a implantação e a execução de programas eBPF em um cluster do Kubernetes, incluindo muitos baseados em ferramentas BCC.

bpftrace/eBPF Tools

Na seção a seguir, vamos nos aprofundar em alguns dos projetos de código aberto que usam o eBPF para coletar dados de insights sobre aplicações.

Passo a passo

Caretta

O Caretta ajuda as equipes a criar instantaneamente um mapa visual da rede dos serviços em execução no cluster Kubernetes. O Caretta usa o eBPF para coletar dados de forma eficiente e está equipado com um painel do Grafana Node Graph para exibir rapidamente um mapa dinâmico do cluster.

A ideia principal por trás do Caretta é obter uma compreensão clara das interdependências entre as diferentes cargas de trabalho em execução no cluster. O Caretta mapeia todas as interações de serviço e suas taxas de tráfego, aproveitando as APIs (Application Program Interface) do Kubernetes para criar um mapa limpo e informativo de qualquer cluster do Kubernetes que pode ser usado para observação granular sob demanda, otimização de custos e insights de segurança, o que permite que as equipes obtenham informações rapidamente, como identificar pontos centrais de falha ou identificar anomalias de segurança.

Instalando o Caretta

Instalar o Carreta é tão simples quanto instalar um helm chart em seu cluster Amazon EKS:

helm repo add groundcover https://helm.groundcover.com/ 
helm install caretta --namespace caretta --create-namespace groundcover/caretta 
kubectl port-forward -n caretta pods/<caretta-grafana POD NAME> 	3000:3000 

Depois de instalado, o Carreta fornece um mapa completo de dependências de rede que captura a interação do serviço Kubernetes. O mapa também é intercalado com as métricas do Prometheus que ele expõe para medir a taxa de transferência total de cada link observado desde o lançamento do programa.

Carreta Network Dependecy Map

Essas informações, coletadas e consolidadas por um agente do Prometheus, podem ser facilmente analisadas com consultas padrão, como classificação, cálculo de taxas, filtragem de namespaces e intervalos de tempo e, é claro, visualização como um mapa de rede.

A seguir está um exemplo de uma métrica exposta por um agente da Caretta e sua label relacionada que fornece uma visão granular do tráfego de rede capturado pelo eBPF:

caretta_links_observed{client_kind="Deployment”, client_name="checkoutservice”, client_namespace="demo-ng”, link_id="198768460", role="server”, server_port="3550"}

Isso é útil para detectar dependências ou interações de rede desconhecidas, mas também para detectar facilmente gargalos, como as zonas ativas que lidam com grandes volumes de dados de rede o que pode ser a causa raiz dos problemas em seu cluster Amazon EKS.

Detect Bottlenecks with Carreta with Grafana

Mas o que podemos fazer quando o monitoramento de rede não é suficiente e o monitoramento de API em nível de aplicação é onde está o problema?

Hubble

O Hubble é um componente de observabilidade e solução de problemas de rede no Cilium (que também é baseado no eBPF para rede). O Hubble usa o eBPF para obter visibilidade profunda do tráfego de rede e coletar dados de telemetria refinados no kernel Linux. Ao anexar programas eBPF a eventos de rede específicos, o Hubble pode capturar dados como cabeçalhos de pacotes, fluxos de rede, métricas de latência e muito mais. Ele fornece um mecanismo poderoso e de baixa sobrecarga para monitorar e analisar o comportamento da rede em tempo real.

Com a ajuda do eBPF, o Hubble pode realizar tarefas avançadas de visibilidade de rede, incluindo monitoramento em nível de fluxo, mapeamento de dependências de serviços, análise de segurança de rede e solução de problemas. Em seguida, ele pega esses dados e os agrega para apresentá-los ao usuário por meio da interface de linha de comando (CLI) ou da interface do usuário. O Hubble permite que as equipes da plataforma obtenham insights sobre as comunicações de rede em seus ambientes nativos da nuvem e oferece aos desenvolvedores a capacidade de entender como suas aplicações se comunicam sem a necessidade de se tornarem especialistas em rede.

Communication Flow with Hubble

Assim como Carreta, o Hubble sabe como criar mapas e métricas de dependência de serviços sobre a conexão de rede que ele rastreia com o eBPF. Métricas como req/s e quedas de pacotes são capturadas pelo Hubble e podem ser usadas para detectar problemas na camada de rede escondidos em seu ambiente Amazon EKS.

O Hubble também fornece métricas de camada 7 rastreando conexões HTTP e DNS dentro do cluster usando eBPF. Aqui, métricas como taxa de solicitação, taxa de latência e taxa de erro ajudam a desbloquear o monitoramento em nível de aplicação. Você pode usar o Hubble para detectar bugs de aplicação, cujas APIs de alta latência diminuem a velocidade do aplicação, ou observar uma lenta degradação do desempenho que pode estar oculta.

Metrics Generated from Hubble

A instalação do Hubble requer a instalação do Cilium, que está documentada no guia de introdução do Cilium e está fora do escopo desta postagem.

Groundcover: pioneira na observabilidade econômica do Amazon EKS

A Groundcover, uma empresa de observabilidade de próxima geração, é um exemplo de como futuras plataformas de observabilidade utilizarão o eBPF como seu principal sensor de coleta de dados.

A Groundcover, focada em ambientes nativos da nuvem, utiliza o eBPF para criar uma plataforma de observabilidade completa que fornece valor instantâneo sem comprometer a escala, a granularidade ou o custo. Seu sensor eBPF foi construído com uma mentalidade que prioriza o desempenho, que aproveita os recursos do kernel para criar uma arquitetura econômica para a observabilidade do Amazon EKS. Ao coletar todos os seus dados de observabilidade usando o eBPF, a Groundcover elimina a necessidade de alterações intrusivas no código e trabalho manual, além da necessidade de implantar vários agentes externos. Essa abordagem simplificada não apenas aprimora a cobertura e a profundidade da observabilidade, mas também otimiza os custos ao reduzir a sobrecarga de desempenho.

Conclusão

Neste post, mostramos como funciona o ecossistema de ferramentas eBPF de código aberto. Os clientes podem experimentar essa tecnologia sozinhos com nosso exemplo que demonstra como essa tecnologia se traduz em plataformas de observabilidade de próxima geração.

À medida que a demanda pela observabilidade do Kubernetes continua crescendo, o eBPF surgiu como uma tecnologia transformadora, redefinindo a forma como monitoramos aplicações nos clusters do Amazon EKS. Com seu desempenho incomparável e integração perfeita com o kernel Linux, o eBPF oferece visibilidade granular sem interromper o código da aplicação existente.

Por meio de ferramentas baseadas em EBPF, os desenvolvedores e as equipes de operações agora podem solucionar problemas e otimizar seus aplicativos sem esforço, tornando a observabilidade do Kubernetes mais acessível e eficiente. À medida que mais empresas adotam os recursos do eBPF, podemos esperar que as organizações migrem para o Kubernetes com mais confiança e com a garantia da cobertura de observabilidade esperada. Isso permite que os usuários liberem todo o potencial de suas aplicações no Amazon EKS e se concentrem na criação de excelentes produtos com base no Kubernetes. Com o futuro brilhante do eBPF pela frente, a Groundcover e outros líderes do setor estão abrindo caminho para uma nova era de observabilidade do Kubernetes.

Este blog é uma tradução do conteúdo original em inglês (link aqui).

Autores

Shahar Azulay é CEO e cofundador da Groundcover, e líder em P&D em série. Shahar traz experiência no mundo da segurança cibernética e do aprendizado de máquina, tendo trabalhado como líder em empresas como Apple, DayTwo e Cymotive Technologies. Shahar passou muitos anos na divisão cibernética do Gabinete do Primeiro Ministro de Israel e possui três diplomas em Física, Engenharia Elétrica e Ciência da Computação, e atualmente se esforça para usar o aprendizado tecnológico dessa rica experiência e trazê-lo para o campo nativo da nuvem atual da forma mais nítida e inovadora para tornar o mundo do desenvolvimento um lugar melhor.
Tsahi Duek é Principal Architect especializado em soluções de contêineres na Amazon Web Services. Ele tem mais de 20 anos de experiência na criação de sistemas, aplicativos e ambientes de produção, com foco em confiabilidade, escalabilidade e aspectos operacionais. Ele é arquiteto de sistemas com mentalidade de engenharia de software.

Tradutor

Joao Melo é Arquiteto de Soluções atendendo clientes Enterprise com foco em mercado financeiro. Com mais de 10 anos de experiência, João iniciou sua carreira como desenvolvedor Java e .NET, e posteriormente se especializou em infraestrutura como Engenheiro de Sistemas na Cisco Systems. Formado pela FEI, é entusiasta de Containers, DeFi, Sistemas de Pagamento e apaixonado por cinema e jogos. LinkedIn: @joamelo