Compartilhar via


Capturar insights do sistema em tempo real de um cluster do AKS

Este artigo discute o processo de coleta de insights do sistema em tempo real do cluster do AKS (Serviço de Kubernetes do Microsoft Azure) usando o Gadget Inspektor. O artigo contém instruções passo a passo para instalar essa ferramenta em seu ambiente do AKS. Ele também explora exemplos práticos que mostram como o Gadget Inspektor ajuda você a coletar informações valiosas para fazer a depuração eficaz de problemas do mundo real.

Demonstração

Para começar, considere a seguinte demonstração rápida. Suponha que você precise descobrir por que as solicitações de DNS de um aplicativo falham. Usando o Gadget Inspektor, você pode capturar o tráfego DNS no namespace do Kubernetes no qual seu aplicativo está sendo executado:

kubectl gadget trace dns --namespace my-ns --output columns=+nameserver
K8S.NODE                           K8S.NAMESPACE  K8S.POD  PID      TID      COMM      QR  TYPE      QTYPE  NAME             RCODE NUMANSWERS NAMESERVER
aks-agentpool-97833681-vmss000001  my-ns          my-app   1349264  1349264  nslookup  Q   OUTGOING  A      www.example.com.       0          1.2.3.4
aks-agentpool-97833681-vmss000001  my-ns          my-app   1349264  1349264  nslookup  Q   OUTGOING  AAAA   www.example.com.       0          1.2.3.4
aks-agentpool-97833681-vmss000001  my-ns          my-app   1349264  1349264  nslookup  Q   OUTGOING  A      www.example.com.       0          1.2.3.4
aks-agentpool-97833681-vmss000001  my-ns          my-app   1349264  1349264  nslookup  Q   OUTGOING  AAAA   www.example.com.       0          1.2.3.4

A partir dessas informações, você pode ver que as solicitações de DNS são direcionadas para o servidor DNS no endereço 1.2.3.4IP , mas o servidor nunca responde.

Agora, suponha que essa 1.2.3.4 não seja a configuração padrão do servidor de nomes e você suspeite que um processo suspeito esteja modificando a configuração em tempo de execução. Nesses casos, o Inspektor Gadget vai além do diagnóstico de DNS. Ele também permite monitorar processos que acessam arquivos críticos (como /etc/resolv.conf) e têm a intenção de modificar esses arquivos. Para usar esse recurso de monitoramento, filtre os sinalizadores na saída para mostrar qualquer um dos modos de acesso ao arquivo de gravação (O_WRONLYpara abrir somente para gravação ou O_RDWR para abrir para leitura e gravação):

kubectl gadget trace open --namespace my-ns \
    --filter path:/etc/resolv.conf,flags:'~(O_WRONLY|O_RDWR)' \
    --output columns=+flags
K8S.NODE                           K8S.NAMESPACE  K8S.POD  K8S.CONTAINER  PID      COMM  FD  ERR  PATH              FLAGS
aks-agentpool-97833681-vmss000001  my-ns          my-app   my-app         1365052  vi    3   0    /etc/resolv.conf  O_WRONLY|O_CREAT

O que é o Gadget Inspektor?

O Gadget Inspektor é uma estrutura projetada para criar, empacotar, implantar e executar ferramentas dedicadas à depuração e inspeção de sistemas Linux e Kubernetes. Essas ferramentas ("gadgets") são implementadas como programas eBPF . Seu objetivo principal é coletar dados de kernel de baixo nível para fornecer insights sobre cenários específicos do sistema. A estrutura do Gadget Inspektor gerencia a associação dos dados coletados usando referências de alto nível, como recursos do Kubernetes. Essa integração garante que exista uma conexão perfeita entre os insights de baixo nível e o contexto de alto nível correspondente. A integração simplifica o processo de solução de problemas e a coleta de informações relevantes.

Gadgets

O Inspektor Gadget fornece um conjunto de ferramentas integradas projetadas para depurar e observar situações comuns em um sistema. Por exemplo, usando esses gadgets, você pode rastrear os seguintes eventos em seu cluster:

  • Criação de processo
  • Acesso a arquivos
  • Atividade de rede, como conexões TCP ou resolução DNS

Os gadgets apresentam as informações coletadas usando diferentes mecanismos. Por exemplo, alguns gadgets podem informá-lo sobre o status do sistema em horários específicos. Outros gadgets podem relatar sempre que um determinado evento ocorre ou podem fornecer atualizações periódicas.

Esses são apenas alguns exemplos. A documentação oficial fornece descrições detalhadas e exemplos de cada gadget para que você possa determinar o gadget mais adequado para seu caso de uso específico. No entanto, se você encontrar um caso de uso que os gadgets existentes não cobrem atualmente, o Inspektor Gadget permite que você execute seus próprios programas eBPF usando o comando run. Como a estrutura do Gadget Inspektor lida com a criação, empacotamento e implantação de seus programas personalizados, ela simplifica o processo para seus requisitos exclusivos. Além disso, ele reúne metadados de alto nível para enriquecer os dados coletados em seu programa.

Casos de uso

Para complementar a demonstração apresentada no início deste artigo, compilamos uma lista de problemas e cenários práticos que mostram como o Gadget Inspektor ajuda você a enfrentar os desafios de depuração. Os exemplos a seguir mostram o potencial do Gadget Inspektor. Mas os recursos dessa ferramenta vão além desses cenários. Isso torna o Gadget Inspektor um recurso inestimável para navegar pelas complexidades da depuração e observabilidade do Kubernetes.

Área de problemas Sintomas Solução de problemas
Aplicativos com uso intensivo de disco Alto uso de memória ou CPU ou prontidão de nó inconsistente Um aplicativo pode se envolver consistentemente em operações de leitura/gravação de disco, como registro em log extensivo. Ao usar o Inspektor Gadget, você pode identificar em tempo real quais contêineres geram mais E/S de bloco. Ou, mais especificamente, você pode encontrar o contêiner que causa mais leituras e gravações em um arquivo.
"É sempre DNS" Alta latência de aplicativos, tempos limite ou experiência ruim do usuário final

Usando o Gadget Inspektor, você pode rastrear todas as consultas e respostas DNS no cluster. Em particular, o Gadget Inspektor fornece as seguintes informações que ajudam você a determinar se o DNS está afetando o desempenho do seu aplicativo:

  • Sucesso da consulta
  • Se a resposta contém um erro
  • O servidor de nomes usado para a pesquisa
  • A latência de resposta à consulta
Acesso ao sistema de arquivos O aplicativo se comporta mal ou não pode funcionar corretamente

O aplicativo pode não conseguir acessar configurações específicas, logs ou outros arquivos vitais no sistema de arquivos. Nesses cenários, o Gadget Inspektor permite rastrear todos os arquivos abertos dentro dos pods para diagnosticar problemas de acesso. Sempre que seu aplicativo tentar abrir um arquivo, você poderá descobrir as seguintes informações:

  • Os sinalizadores usados para abrir o arquivo (por exemplo, O_RDONLY, O_WRONLY, O_RDWR e assim por diante)
  • Se a tentativa de abertura de arquivo foi bem-sucedida
  • O erro retornado (se a tentativa de abertura do arquivo falhar)

Por exemplo, se a tentativa de abrir o arquivo falhar devido ao erro 2 (ENOENT), o aplicativo provavelmente está tentando abrir um arquivo que não existe. Isso significa que você pode ter um erro de digitação no código ou o arquivo está disponível em um caminho diferente.

Execução remota de código (RCE) Execução de código não autorizada, como cryptojacking, que é evidente no alto uso da CPU durante os períodos ociosos do aplicativo Quando os invasores tentam fazer esse tipo de ataque em um sistema, eles geralmente precisam executar o código usando basho . O Inspektor Gadget permite rastrear a criação de novos processos, particularmente processos que envolvem comandos críticos, como bash.

Como instalar o Gadget Inspektor em um cluster do AKS

Implantação do Inspektor Gadget com um clique

Ao selecionar o botão a seguir, um cluster do AKS será criado automaticamente e o Gadget Inspektor será implantado no cluster. Após a conclusão da implantação, você pode explorar todos os recursos do Gadget Inspektor no ambiente de shell fornecido.

Implantar o Gadget Inspektor em um cluster do AKS

Instale o Inspektor Gadget executando o plug-in "kubectl gadget"

Esta seção descreve as etapas para instalar o Gadget Inspektor no cluster do AKS executando o kubectl gadget plug-in. A instalação consiste em duas partes:

  • Instalando o kubectl gadget plug-in em seu computador

  • Executando o kubectl gadget plug-in para instalar o Gadget Inspektor no cluster

    Aviso

    Muitos mecanismos estão disponíveis para implantar e usar o Gadget Inspektor. Cada um desses mecanismos é adaptado a casos de uso e requisitos específicos. Você pode usar o plug-in de gadget kubectl para aplicar vários desses mecanismos, mas não todos. Por exemplo, a implantação do Gadget Inspektor usando o kubectl gadget plug-in depende da disponibilidade do servidor de API do Kubernetes. Se você não puder depender desse componente porque sua disponibilidade pode ser ocasionalmente comprometida, recomendamos que você evite usar o mecanismo de kubectl gadgetimplantação. Para obter mais informações sobre este e outros casos de uso, consulte a documentação do Gadget Inspektor.

Pré-requisitos

Parte 1: Instale o gadget do plug-in kubectl em seu computador

Recomendamos que você use krew para instalar o kubectl gadget plug-in.

Observação

Para instalar uma versão específica ou compilá-la da origem, consulte Instalar o gadget kubectl no GitHub.

kubectl krew install gadget

Agora, verifique a instalação executando o version comando:

kubectl gadget version

O version comando mostra a versão do cliente (kubectl gadget plug-in), mas também informa que ele ainda não está instalado no servidor (o cluster):

Client version: vX.Y.Z
Server version: not installed

Parte 2: Instalar o Gadget Inspektor no cluster

O comando a seguir implanta o controlador DaemonSet .

Observação

Várias opções estão disponíveis para personalizar a implantação, conforme mostrado na lista a seguir:

  • Usar uma imagem de contêiner específica
  • Implantar em nós específicos
  • Implantar em um namespace personalizado

Para saber mais sobre essas opções, consulte a seção Instalando no cluster da documentação oficial.

kubectl gadget deploy

Verifique a instalação executando o version comando novamente:

kubectl gadget version

Desta vez, o cliente e o servidor são mostrados como instalados corretamente:

Client version: vX.Y.Z
Server version: vX.Y.Z

Aviso de isenção de responsabilidade para informações de terceiros

Os produtos de terceiros mencionados neste artigo são produzidos por empresas independentes da Microsoft. A Microsoft não oferece nenhuma garantia, implícita ou não, do desempenho ou da confiabilidade desses produtos.

Aviso de isenção de responsabilidade para contatos de terceiros

A Microsoft fornece informações de contato de terceiros para ajudá-lo a encontrar informações adicionais sobre esse tópico. Essas informações de contato podem ser alteradas sem aviso prévio. A Microsoft não garante a precisão das informações de contato de terceiros.

Entre em contato conosco para obter ajuda

Se você tiver dúvidas ou precisar de ajuda, crie uma solicitação de suporte ou peça ajuda à comunidade de suporte do Azure. Você também pode enviar comentários sobre o produto para a comunidade de comentários do Azure.