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 MICROSOFT Serviço de Kubernetes do Azure (AKS) usando o Inspektor Gadget. O artigo contém instruções passo a passo para instalar essa ferramenta em seu ambiente AKS. Ele também explora exemplos práticos que mostram como o Inspektor Gadget ajuda você a coletar informações valiosas para fazer a depuração efetiva de problemas do mundo real.
Demonstração
Para começar, considere a demonstração rápida a seguir. Suponha que você precise descobrir por que as solicitações DNS de um aplicativo falham. Usando o Inspektor Gadget, você pode capturar o tráfego DNS no namespace do Kubernetes no qual seu aplicativo está em execução:
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 DNS são direcionadas para o servidor DNS no endereço 1.2.3.4
IP, mas o servidor nunca responde.
Agora, suponha que 1.2.3.4
essa não seja a configuração padrão do servidor de nome e você suspeita que um processo suspeito esteja modificando a configuração no runtime. Nesses tipos de casos, o Inspektor Gadget vai além do diagnóstico 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 é Inspektor Gadget?
Inspektor Gadget é 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 inspektor Gadget 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 insights de baixo nível e seu contexto de alto nível correspondente. A integração simplifica o processo de solução de problemas e a coleção de informações relevantes.
Gadgets
O Inspektor Gadget fornece um conjunto de ferramentas internas 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 mecanismos diferentes. Por exemplo, alguns gadgets podem informá-lo sobre o sistema status em momentos específicos. Outros gadgets podem relatar sempre que um determinado evento ocorre ou podem fornecer atualizações periódicas.
Esses são apenas 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 oferecerá flexibilidade. Você pode executar scripts compatíveis com a linguagem de rastreamento eBPF bpftrace executando o comando script. Ou você pode executar seus próprios programas eBPF executando o comando de execução. Como a estrutura inspektor Gadget manipula o edifício, a empacotamento e a implantação de seus programas personalizados, ela simplifica o processo para seus requisitos exclusivos. Além disso, ele coleta 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 Inspektor Gadget ajuda você a enfrentar desafios de depuração. Os exemplos a seguir mostram o potencial do Inspektor Gadget. Mas as funcionalidades dessa ferramenta vão além desses cenários. Isso torna o Inspektor Gadget um ativo inestimável para navegar pelas complexidades da depuração e observabilidade do Kubernetes.
Área de problema | Sintomas | Solução de problemas |
---|---|---|
Aplicativos com uso intensivo de disco | Alta memória ou uso de CPU ou preparação inconsistente de nó | Um aplicativo pode se envolver consistentemente em operações de leitura/gravação em disco, como registro em log extensivo. Usando 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 do aplicativo, tempo limite ou má experiência do usuário final | Usando o Inspektor Gadget, você pode rastrear todas as consultas e respostas DNS no cluster. Em particular, o Inspektor Gadget fornece as seguintes informações que ajudam você a determinar se o DNS está afetando o desempenho do 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 Inspektor Gadget permite rastrear todos os arquivos abertos dentro dos pods para diagnosticar problemas de acesso. Sempre que seu aplicativo tentar abrir um arquivo, você pode 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 criptografia que é evidente no alto uso da CPU durante períodos ociosos do aplicativo | Quando os invasores tentam fazer esse tipo de ataque a um sistema, eles geralmente têm que executar o código usando bash . O Inspektor Gadget permite rastrear a criação de novos processos, especialmente processos que envolvem comandos críticos, como bash . |
Como instalar o Inspektor Gadget em um cluster do AKS
implantação One-Click Inspektor Gadget
Ao selecionar o botão a seguir, um cluster AKS será criado automaticamente e o Inspektor Gadget será implantado no cluster. Depois que a implantação for concluída, você poderá explorar todos os recursos do Inspektor Gadget no ambiente de shell fornecido.
Instalar o Inspektor Gadget executando o plug-in "kubectl gadget"
Esta seção descreve as etapas para instalar o Inspektor Gadget 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 Inspektor Gadget no clusterAviso
Muitos mecanismos estão disponíveis para implantar e usar o Inspektor Gadget. Cada um desses mecanismos é adaptado para casos e requisitos de uso específicos. Você pode usar o plug-in do gadget kubectl para aplicar vários desses mecanismos, mas não todos eles. Por exemplo, a implantação do Inspektor Gadget 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 okubectl gadget
mecanismo de implantação. Para obter mais informações sobre esse e outros casos de uso, consulte a documentação do Inspektor Gadget.
Pré-requisitos
A ferramenta de linha de comando kubernetes kubectl . Se você tiver a CLI do Azure, poderá executar o comando az aks install-cli para instalar o kubectl.
Um cluster 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 krew para instalar este gerenciador de pacotes.
Parte 1: instalar o gadget 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 na 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 Inspektor Gadget 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 Instalação 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.
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de