The ack-onepilot component automatically injects the Application Real-Time Monitoring Service (ARMS) agent into your Kubernetes pods. Instead of manually configuring each application for monitoring, ack-onepilot intercepts pod creation requests and adds the required agent files and environment variables before the pod starts.
Architecture
ack-onepilot consists of two parts:
Webhook service -- A Kubernetes mutating admission webhook that intercepts pod creation requests and modifies the pod spec before it is stored in etcd.
Init container -- A container injected into each pod that prepares the ARMS agent files and makes them available to the application container through a shared volume.
Injection workflow
When a pod is created, ack-onepilot modifies the pod spec in two steps before Kubernetes stores it in etcd.
Step 1: Set environment variables
The webhook service injects environment variables into the pod spec. The specific variables depend on the application language.
Java applications
The webhook appends Java Virtual Machine (JVM) parameters to the JAVA_TOOL_OPTIONS environment variable:
| Parameter | Purpose |
|---|---|
| ARMS license key | Authenticates the agent with the ARMS backend |
| Application name | Identifies the application in the ARMS console |
| Reporting region | Specifies the endpoint where observability data is sent |
-javaagent path | Points to the ARMS agent JAR file prepared by the init container |
Other information is also injected to help locate the endpoint where data is reported.
At startup, the JVM reads JAVA_TOOL_OPTIONS automatically and loads the ARMS agent without any code changes in your application.
Go applications
For Go applications, parameters similar to -javaagent are not required.
Step 2: Add an init container
The webhook adds an init container to the pod. This init container:
Prepares the ARMS agent package.
Mounts the agent files to a shared volume that is accessible by both the init container and the application container.
When the application container starts, it reads the -javaagent path from JAVA_TOOL_OPTIONS (for Java) to locate and load the ARMS agent. The agent then collects observability data throughout the application lifecycle.
FAQ
Does the ack-onepilot version need to match the ARMS agent version?
No, they are not necessarily related. ack-onepilot retrieves the appropriate agent package based on backend configurations.