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.4
IP , 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_WRONLY
para 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:
|
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:
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 bash o . 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.
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 computadorExecutando o
kubectl gadget
plug-in para instalar o Gadget Inspektor no clusterAviso
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 dekubectl gadget
implantação. Para obter mais informações sobre este e outros casos de uso, consulte a documentação do Gadget Inspektor.
Pré-requisitos
A ferramenta de linha de comando kubectl do Kubernetes. Se você tiver a CLI do Azure, poderá executar o comando az aks install-cli para instalar o kubectl.
Uma cluster do AKS. Se você não tiver um cluster do AKS, crie um usando a CLI do Azure ou usando o portal do Azure.
O gerenciador de pacotes krew para plug-ins no kubectl. Você pode seguir o guia de início rápido do krew para instalar esse gerenciador de pacotes.
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.