O componente ack-onepilot injeta automaticamente o agente do Application Real-Time Monitoring Service (ARMS) nos pods do Kubernetes. Em vez de configurar manualmente cada aplicação para monitoramento, o ack-onepilot intercepta as solicitações de criação de pod e adiciona os arquivos e as variáveis de ambiente necessários antes da inicialização do pod.
Arquitetura
O ack-onepilot é composto por duas partes:
Serviço de webhook: um webhook de admissão mutante do Kubernetes que intercepta solicitações de criação de pod e modifica a especificação do pod antes do armazenamento no etcd.
Init container: um container injetado em cada pod que prepara os arquivos do agente ARMS e os disponibiliza ao container da aplicação por meio de um volume compartilhado.
Fluxo de injeção
Quando um pod é criado, o ack-onepilot modifica a especificação do pod em duas etapas antes que o Kubernetes a armazene no etcd.
Etapa 1: Defina variáveis de ambiente
O serviço de webhook injeta variáveis de ambiente na especificação do pod. As variáveis específicas dependem da linguagem da aplicação.
Aplicações Java
O webhook anexa parâmetros da Java Virtual Machine (JVM) à variável de ambiente JAVA_TOOL_OPTIONS:
|
Parâmetro |
Finalidade |
|
Chave de licença do ARMS |
Autentica o agente no backend do ARMS |
|
Nome da aplicação |
Identifica a aplicação no console do ARMS |
|
Região de relatório |
Especifica o endpoint para envio dos dados de observabilidade |
|
Caminho do |
Aponta para o arquivo JAR do agente ARMS preparado pelo init container |
Outras informações também são injetadas para facilitar a localização do endpoint de envio de dados.
Na inicialização, a JVM lê JAVA_TOOL_OPTIONS automaticamente e carrega o agente ARMS sem exigir alterações de código na sua aplicação.
Aplicações Go
Para aplicações Go, não são necessários parâmetros semelhantes ao -javaagent.
Etapa 2: Adicionar um init container
O webhook adiciona um init container ao pod. Esse init container executa as seguintes ações:
Prepara o pacote do agente ARMS.
Monta os arquivos do agente em um volume compartilhado, acessível tanto pelo init container quanto pelo container da aplicação.
Ao iniciar, o container da aplicação lê o caminho do -javaagent em JAVA_TOOL_OPTIONS (para Java) para localizar e carregar o agente ARMS. O agente então coleta dados de observabilidade durante todo o ciclo de vida da aplicação.
Perguntas frequentes
A versão do ack-onepilot precisa corresponder à versão do agente ARMS?
Não, elas não estão necessariamente relacionadas. O ack-onepilot recupera o pacote de agente apropriado com base nas configurações de backend .