DataKit Operator 注入 DDTrace¶
使用说明¶
- 在目标 Kubernetes 集群,下载和安装 DataKit-Operator
-
在 Operator 中增加如下 ConfigMap 配置
{ "server_listen": "0.0.0.0:9543", // 服务监听地址 "log_level": "info", // 日志级别 "admission_inject_v2": { // 注入配置 v2(operator version >= v1.7.0) "ddtraces": [ // DDTrace 配置数组 { // 此处填写 DDTrace 注入配置。.. }, { // 可再注入另一个 DDTrace 配置。.. } ] }, "admission_inject": { // 注入配置 v1 "ddtrace": { // 此处填写 DDTrace 注入配置。.. // 对 v1 版本的配置,operator 只支持注入一份 DDTrace 配置,建议使用 v2 更灵活一些 } }, }DDTrace 注入有如下可配置字段:
字段 类型 描述 是否必填 示例值 envsobject 环境变量映射 Y4 见下方示例 imagestring DDTrace 镜像地址 Y2 见下方示例 label_selectorsarray 标签选择器数组 Y1 ["app=nginx", "tier=frontend"]languagestring 支持的语言类型(可选 java)Y3 "java"namespace_selectorsarray 命名空间选择器,支持正则 Y1 ["prod-*", "test"]resourcesobject 资源限制配置 N 见下方示例 enabled_namespacesobject 选择要注入的 Kubernetes namespace 并设定对应的开发语言 Y 1.7.0 中 admission_inject_v2已弃用enabled_labelselectorsobject 通过 Kubernetes label 选择要注入的目标 Y 1.7.0 中 admission_inject_v2已弃用如下是一个示例:
{ "namespace_selectors": [], "label_selectors": [], "image": "pubrepo.guance.com/datakit-operator/dd-lib-java-init:v1.55.10-ext", "language": "java", "envs": { "DD_AGENT_HOST": "datakit-service.datakit.svc.cluster.local", "DD_TRACE_AGENT_PORT": "9529", "DD_JMXFETCH_STATSD_HOST": "datakit-service.datakit.svc.cluster.local", "DD_JMXFETCH_STATSD_PORT": "8125", "DD_SERVICE": "{fieldRef:metadata.labels['service']}", "POD_NAME": "{fieldRef:metadata.name}", "POD_NAMESPACE": "{fieldRef:metadata.namespace}", "NODE_NAME": "{fieldRef:spec.nodeName}", "DD_TAGS": "pod_name:$(POD_NAME),pod_namespace:$(POD_NAMESPACE),host:$(NODE_NAME)" }, "resources": { "requests": { "cpu": "100m", "memory": "64Mi" }, "limits": { "cpu": "500m", "memory": "512Mi" } } }
特殊 Deployment 的处理¶
上面 Operator 的配置是针对整个集群中的 DDTrace 注入配置,某些时候这种一刀切的方式不适合特定的某些 Deployment,为此我们可以单独为这些 Deployment 做一些 Annotation 标记:
Operator 能识别如下两个 Annotation:
admission.datakit/ddtrace.enabled:在单个 Deployment 标准自己是否开启注入,填写"true"即开启注入,"false"则屏蔽注入,屏蔽后,Operator 会忽略注入这个 Deploymentadmission.datakit/java-lib.version:指定特定的 DDTrace 版本
Annotation 示例¶
给 Deployment 标注是否注入标记:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-deployment
labels:
app: my-app
spec:
replicas: 1
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
annotations:
admission.datakit/ddtrace.enabled: "true"
spec:
containers:
- name: my-app
image: my-app:1.2.3
ports:
- containerPort: 80
给 Deployment 注入 dd-java-lib 特定版本号 5:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-deployment
labels:
app: my-app
spec:
replicas: 1
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
annotations:
admission.datakit/java-lib.version: "v1.55.10-ext"
spec:
containers:
- name: my-app
image: my-app:1.2.3
ports:
- containerPort: 80
使用 yaml 文件创建资源:
验证如下: