Le composant ack-onepilot injecte automatiquement l'agent Application Real-Time Monitoring Service (ARMS) dans vos pods Kubernetes. Au lieu de configurer manuellement chaque application pour la surveillance, ack-onepilot intercepte les requêtes de création de pod et ajoute les fichiers d'agent ainsi que les variables d'environnement nécessaires avant le démarrage du pod.
Architecture
ack-onepilot se compose de deux parties :
Service Webhook -- Un webhook d'admission mutante Kubernetes mutating admission webhook qui intercepte les requêtes de création de pod et modifie la spécification du pod avant qu'elle ne soit stockée dans etcd.
Conteneur d'initialisation -- Un conteneur injecté dans chaque pod qui prépare les fichiers de l'agent ARMS et les rend disponibles pour le conteneur d'application via un volume partagé.
Flux d'injection
Lorsqu'un pod est créé, ack-onepilot modifie sa spécification en deux étapes avant que Kubernetes ne la stocke dans etcd.
Étape 1 : Définir les variables d'environnement
Le service Webhook injecte des variables d'environnement dans la spécification du pod. Les variables spécifiques dépendent du langage de l'application.
Applications Java
Le webhook ajoute des paramètres de machine virtuelle Java (JVM) à la variable d'environnement JAVA_TOOL_OPTIONS :
| Paramètre | Objectif |
|---|---|
| Clé de licence ARMS | Authentifie l'agent auprès du backend ARMS |
| Nom de l'application | Identifie l'application dans la console ARMS |
| Région de reporting | Spécifie le endpoint vers lequel les données d'observabilité sont envoyées |
Chemin -javaagent |
Pointe vers le fichier JAR de l'agent ARMS préparé par le conteneur d'initialisation |
D'autres informations sont également injectées pour aider à localiser le endpoint où les données sont rapportées.
Au démarrage, la JVM lit automatiquement JAVA_TOOL_OPTIONS et charge l'agent ARMS sans aucune modification de code dans votre application.
Applications Go
Pour les applications Go, des paramètres similaires à -javaagent ne sont pas requis.
Étape 2 : Ajouter un conteneur d'initialisation
Le webhook ajoute un conteneur d'initialisation au pod. Ce conteneur d'initialisation :
Prépare le package de l'agent ARMS.
Monte les fichiers de l'agent sur un volume partagé accessible à la fois par le conteneur d'initialisation et le conteneur d'application.
Lorsque le conteneur d'application démarre, il lit le chemin -javaagent depuis JAVA_TOOL_OPTIONS (pour Java) afin de localiser et charger l'agent ARMS. L'agent collecte ensuite les données d'observabilité tout au long du cycle de vie de l'application.
FAQ
La version d'ack-onepilot doit-elle correspondre à la version de l'agent ARMS ?
Non, elles ne sont pas nécessairement liées. ack-onepilot récupère le package d'agent approprié en fonction des configurations backend .