ack-onepilot是ARMS針對K8s應用接入情境研發的重要組件,本文旨在介紹ack-onepilot的基本原理,以協助使用者更好地使用ack-onepilot。
基本工作流程
ack-onepilot主要由兩部分組成,一部分是ack-onepilot的Webhook服務,另一部分是ack-onepilot的init-container。ack-onepilot的Webhook服務是一個K8s的Mutating Admission Webhook:
ack-onepilot的Webhook服務會在K8s Pod被持久化到etcd之前對Pod進行一些改寫操作,整個流程大概如下圖所示:
ack-onepilot Webhook對要建立的Pod主要執行了如下操作:
為Pod注入JAVA_TOOL_OPTIONS等關鍵環境變數。
例如在Java應用啟動時,ack-onepilot Webhook會自動將JAVA_TOOL_OPTIONS中的一些JVM系統參數追加到此Java應用中。在ack-onepilot Webhook中,JAVA_TOOL_OPTIONS將為使用者注入使用者的ARMS Licensekey、應用程式名稱、上報Region等資訊協助探針更好地找到資料上報的端點。同時將注入
-javaagent
參數協助Java應用在啟動時自動找到ARMS探針的路徑並進行掛載。而對於Go應用,則只需要注入使用者的ARMS Licensekey、應用程式名稱、上報Region等環境變數。為Pod添加一個init-container,該init-container主要用於在應用啟動前做一些準備。
一種最常見的情境:該init-container會準備好ARMS探針檔案,並通過Volume的方式掛載到使用者的Pod中。此後,應用啟動時將通過第一步中的JAVA_TOOL_OPTIONS找到準備好的ARMS探針並掛載到使用者的Java進程上,從而對使用者業務進程產生的觀測資料進行收集。
常見問題
ack-onepilot的版本與ARMS探針的版本是否有關係?
接入的ARMS探針版本與ack-onepilot沒有必然關係,不同版本的ack-onepilot將會根據後台擷取對應的探針包。