# K8s集群部署K8s DaemonSet注入追踪实操

发布时间:2026/10/24 4:17:26

# K8s集群部署K8s DaemonSet注入追踪实操 # K8s集群部署K8s DaemonSet注入追踪实操技术栈Kubernetes v1.32.13 Rocky Linux 8.6 OpenTelemetry Operator Java Agent Sidecar/Init Container操作环境 / 对接原理 / 详细步骤 / 完整命令 / 配置文件 / 验证流程 / 排错方案# K8s集群部署K8s DaemonSet注入追踪实操## 操作环境- K8s 集群版本 v1.32.13应用部署于 default 命名空间- 链路追踪后端 Jaeger v1.55.x OpenTelemetry Collector部署于 observability- 容器运行时 Containerd 1.7.xDocker 镜像- 接入方式Init Container 挂载 Agent、Sidecar 采集、环境变量注入、Admission Webhook 自动注入- 多语言Java字节码增强、Go/Node.js/Python/.NETSDK 埋点- Agent 版本OpenTelemetry Java Agent v2.1.0、SkyWalking Agent v9.7.0、Pinpoint Agent v2.5.3## 对接原理容器应用追踪适配是将链路追踪 Agent/SDK 集成到 K8s 容器化应用中的一系列技术方案。核心接入方式包括Init Container初始化容器下载并挂载 Agent 到共享卷应用容器通过 -javaagent 加载、Sidecar边车容器运行采集器通过共享卷或网络与应用通信、环境变量注入通过 JAVA_TOOL_OPTIONS/OTEL_* 环境变量自动激活 Agent、Admission WebhookMutatingWebhook 自动为 Pod 注入 Init Container/Agent/环境变量无需修改应用配置。Java 应用通过字节码增强Java Agent实现无侵入埋点自动拦截 Spring/Tomcat/DB/Cache/MQ 等组件。Go/Node.js/Python/.NET 应用通过 OpenTelemetry SDK 手动或半自动埋点。多容器 Pod 需确保 Agent 挂载到正确容器TraceID 在容器间通过共享卷或网络传递。K8s 中通过 ConfigMap 管理 Agent 配置Secret 管理追踪后端凭据Resource 限制控制 Agent 资源开销。## 详细步骤**1. 环境变量自动注入 Agent**bash# 通过 ConfigMap 统一管理环境变量cat otel-env-configmap.yaml EOFapiVersion: v1kind: ConfigMapmetadata:name: otel-common-envdata:OTEL_EXPORTER_OTLP_ENDPOINT: http://jaeger-collector.observability:4317OTEL_TRACES_SAMPLER: traceidratioOTEL_TRACES_SAMPLER_ARG: 0.1OTEL_PROPAGATORS: tracecontext,baggage,b3OTEL_METRICS_EXPORTER: otlpOTEL_LOGS_EXPORTER: otlpJAVA_TOOL_OPTIONS: -javaagent:/otel/opentelemetry-javaagent.jarEOFkubectl apply -f otel-env-configmap.yaml# Deployment 引用 ConfigMap 环境变量cat env-from-deploy.yaml EOFapiVersion: apps/v1kind: Deploymentmetadata:name: order-servicespec:template:spec:initContainers:- name: otel-agent-initimage: otel/javaagent:2.1.0command: [cp, /opentelemetry-javaagent.jar, /otel/]volumeMounts:- name: otel-agentmountPath: /otelcontainers:- name: order-serviceimage: order-service:v1envFrom:- configMapRef:name: otel-common-envenv:- name: OTEL_SERVICE_NAMEvalue: order-service # 每个服务单独设置volumeMounts:- name: otel-agentmountPath: /otelvolumes:- name: otel-agentemptyDir: {}EOFkubectl apply -f env-from-deploy.yaml# 验证环境变量kubectl exec deployment/order-service -- env | grep -E OTEL|JAVA_TOOL# 批量为所有 Deployment 注入使用 kubectl patch# for deploy in $(kubectl get deploy -o name); do# kubectl patch $deploy --typejson -p[# {op:add,path:/spec/template/spec/initContainers,value:[...]},# {op:add,path:/spec/template/spec/containers/0/envFrom,value:[{configMapRef:{name:otel-common-env}}]}# ]# done## 验证流程bash# 1. 验证 Agent 注入kubectl get pod -l apporder-service -o jsonpath{.items[*].spec.initContainers[*].name}# 显示 Agent Init Container 名称# 2. 验证 Agent 加载kubectl logs deployment/order-service | grep -iE opentelemetry|skywalking|pinpoint|agent# 显示 Agent 启动日志# 3. 验证环境变量kubectl exec deployment/order-service -- env | grep -E OTEL|SW_|PINPOINT|JAVA_TOOL | sort# 显示追踪相关环境变量# 4. 验证 Trace 上报curl http://order-service:8080/api/test# Jaeger/SkyWalking/Zipkin UI 搜索 order-service有 Trace 数据# 5. 验证跨服务调用链# 调用入口服务检查完整调用链包含所有服务# 6. 验证资源使用kubectl top pod -l apporder-service# Agent 开销在合理范围内CPU5%, 内存200MB## 排错方案- Agent 不加载检查 JAVA_TOOL_OPTIONS 环境变量Agent jar 是否正确挂载到共享卷Init Container 是否成功执行应用启动命令是否覆盖 JAVA_TOOL_OPTIONS- 应用启动失败检查 Agent 版本与 JDK 版本兼容性Agent 与其他 Java Agent 冲突如 Arthas/JRebel增加启动超时时间查看启动错误日志- OOM 内存溢出增加容器内存 limits限制 Agent JVM 内存OTEL_JAVAAGENT_JVM_ARGS降低采样率减少 Span 标签禁用 Metrics/Logs 导出- Trace 不上报检查 OTEL_EXPORTER_OTLP_ENDPOINT/SW_AGENT_COLLECTOR_BACKEND_SERVICES 地址网络是否可达kubectl exec curl 测试Collector/后端是否正常采样率是否为0- Init Container 失败检查 Agent 镜像是否可拉取cp 命令路径是否正确共享卷挂载路径是否一致Init Container 资源是否充足- Sidecar 端口冲突检查 Sidecar 容器端口是否与主应用冲突修改 Collector 配置端口检查 Pod 内 localhost 通信- 自动注入不生效检查命名空间/Pod 注解是否正确Operator 是否正常运行MutatingWebhookConfiguration 是否存在Pod 是否在注入后创建需重启- 性能开销大降低采样率使用异步批量上报禁用不需要的插件限制 Agent 资源使用 DaemonSet Collector 聚合减少连接按需启用 Metrics/Logs
延伸阅读

更多相关文章

2026/10/21 9:17:06

# K8s集群监控K8s容器网络追踪对接实操

# K8s集群监控K8s容器网络追踪对接实操技术栈:Kubernetes v1.32.13 Rocky Linux 8.6 OpenTelemetry Operator Java Agent Sidecar/Init Container操作环境 / 对接原理 / 详细步骤 / 完整命令 / 配置文件 / 验证流程 / 排错方案# K8s集群监控K8s容器网络追踪对接…

2026/10/24 3:41:12

从混沌到专业:开源项目文档化与工程化实践指南

1. 这篇文章真正要解决的问题如果你在 GitHub 上看到过一个名为“魔绿向”的项目,点进去却发现 README 里只有一句“我到底做了个什么东西啊啊啊啊啊”,然后是一堆看似混乱的代码和文件,你的第一反应是什么?是觉得作者在恶搞&…

2026/10/22 20:23:35

Google Flow AI视频生成工作流:从草图到电影级成片

Google Flow 这类 AI 视频生成工具,已经不只是“输入一句话生成一段视频”的玩具。真正想用它产出电影质感、镜头连贯、故事线完整的成片,需要把分镜草图、提示词设计、镜头参数、多版本筛选和后期增强串成一条可复现的完整工作流。本文围绕 Google Flow…

2026/10/24 4:13:07

Mac 窗口切换工具推荐:DockGo 让「按住预览、松开直达」成为日常

一天切窗上百次的人,值得一个更顺手的入口。这篇工具推荐围绕 Mac 上的窗口切换场景,介绍 DockGo 这款窗口切换器的核心用法、按键映射、实现细节与上手步骤,并说明它适合谁、不适合谁,方便你判断是否值得装进自己的效率工具箱。 …

2026/10/24 4:08:07

Go语言学习day1

1变量的声明1.1go的变量声明是放在变量名后面var 是 Go 里声明变量的关键字,var 就是“我要声明一个变量”的标记。1.完整声明 var port int var host string var timeout time.Duration //time包里的类型,单位为ns2.有初始值,可…

2026/10/23 22:56:35

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/24 0:02:40

MATLAB缩进快捷键与批量格式化实战指南

1. 被自动缩进折磨的那些年如果你写过MATLAB代码,大概率经历过这种场景:从某个文档、网页或者聊天记录里复制了一段代码,粘贴进编辑器之后,每一行前面都带着莫名其妙的空格,有的行首是四个空格,有的是一个T…

2026/10/24 0:02:40

用Poco实现Qt风格信号与槽的跨平台C++方案

简介:本资源是一份面向C中级开发者的技术实践工程,聚焦于在非Qt框架环境下模拟实现Qt核心通信机制——信号与槽,借助Poco网络库的事件系统完成解耦式对象通信。适用于需在跨平台C项目中引入松耦合回调机制、但受限于无法集成Qt依赖的开发场景…

2026/10/24 0:02:40

ESXi裸机虚拟化安装指南:从硬件兼容到虚拟机部署

1. 为什么还要折腾ESXi:从一台闲置机器说起手里攒了几台淘汰下来的迷你主机,配置不算差,i5加16G内存,扔了可惜,装个桌面系统又觉得浪费。这种场景下,ESXi就成了一个绕不开的选择。它是一套裸机虚拟化平台&a…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑