前言
本次最佳实践将介绍如何在 Kubernetes 集群中部署基于 Java 的若依系统。若依是一个开源的、轻量级的企业级 Java 快速开发平台,它构建于经典的 SpringCloud 框架之上,并集成了多种常用的开发组件。这样的设计旨在助力开发者高效地构建各类应用程序。在本实践案例中,我们将通过 Kubernetes 的 Deployment 资源来部署若依服务,所有操作均在默认命名空间(default)下进行。
部署 DataKit
- 下载
datakit.yaml
文件
wget https://static.guance.com/datakit/datakit.yaml
- 修改
datakit.yaml
文件,配置 DataWay 网关地址,该地址在观测云空间「管理」中可以看到
- name: ENV_DATAWAY
value: https://openway.guance.com?token=tkn_xxxxxxxxxxxxx
- 开启采集器
ddtrace
- name: ENV_DEFAULT_ENABLED_INPUTS
value: cpu,disk,diskio,mem,swap,system,hostobject,net,host_processes,container,ddtrace,profile
- 重启 DataKit
datakit service -R
安装 DataKit Operator
DataKit Operator 是 DataKit 在 Kubernetes 编排的联动项目,旨在协助 Datakit 更方便的部署,以及其他诸如验证、注入的功能。
目前 Datakit-Operator 提供以下功能:
- 注入 DDTrace SDK(Java/Python/Node.js)以及对应环境变量信息,参见文档
- 注入 Sidecar logfwd 服务以采集容器内日志,参见文档
- 支持 Datakit 采集器的任务选举,参见文档
- 在本最佳实践案例中,operator主要负责注入DDTrace SDK以及对应环境变量信息,并实现无侵入式接入业务应用链路数据(APM)。
下载 datakit-operator.yaml ,步骤如下:
wget https://static.guance.com/datakit-operator/datakit-operator.yaml
配置相关环境变量
{
"server_listen": "0.0.0.0:9543",
"log_level": "info",
"admission_inject": {
"ddtrace": {
"enabled_namespaces": [],
"enabled_labelselectors": [],
"images": {
"java_agent_image": "pubrepo.guance.com/datakit-operator/dd-lib-java-init:v1.30.1-guance",
"python_agent_image": "pubrepo.guance.com/datakit-operator/dd-lib-python-init:v1.6.2",
"js_agent_image": "pubrepo.guance.com/datakit-operator/dd-lib-js-init:v3.9.2"
},
"envs": {
"DD_AGENT_HOST": "datakit-service.datakit.svc",
"DD_TRACE_AGENT_PORT": "9529",
"DD_JMXFETCH_STATSD_HOST": "datakit-service.datakit.svc",
"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)"
}
},
"logfwd": {
"options": {
"reuse_exist_volume": "false"
},
"images": {
"logfwd_image": "pubrepo.guance.com/datakit/logfwd:1.28.1"
}
},
"profiler": {
"images": {
"java_profiler_image": "pubrepo.guance.com/datakit-operator/async-profiler:0.1.0",
"python_profiler_image": "pubrepo.guance.com/datakit-operator/py-spy:0.1.0",
"golang_profiler_image": "pubrepo.guance.com/datakit-operator/go-pprof:0.1.0"
},
"envs": {
"DK_AGENT_HOST": "datakit-service.datakit.svc",
"DK_AGENT_PORT": "9529",
"DK_PROFILE_VERSION": "1.2.333",
"DK_PROFILE_ENV": "prod",
"DK_PROFILE_DURATION": "240",
"DK_PROFILE_SCHEDULE": "0 * * * *"
}
}
}
}
enabled_namespaces 和 enabled_labelselectors 配置
enabled_namespaces
和 enabled_labelselectors
是 ddtrace
专属,可以对匹配到的 Pod 资源执行注入,不需要再给 Pod 添加 Annotation。它们的写法如下:
{
"server_listen": "0.0.0.0:9543",
"log_level": "info",
"admission_inject": {
"ddtrace": {
"enabled_namespaces": [
{
"namespace": "testns", # 指定 namespace
"language": "java" # 指定需要注入的 agent 语言
}
],
"enabled_labelselectors": [
{
"labelselector": "app=log-output", # 指定 labelselector
"language": "java" # 指定需要注入的 agent 语言
}
]
# other..
}
}
}
如果一个 Pod 即满足 enabled_namespaces
规则,又满足 enabled_labelselectors
,以 enabled_labelselectors
配置为准。
其中 admission_inject 包含三个配置模块 ddtrace、logfwd、profile ,在本案例中我们需要关注 ddtrace 相关配置,如图:
在 enabled_namespaces 的配置中填写业务应用的 namespace 或者相关 labelselectotrs(本案例中的 namespace 是 default )这样就可以根据相关 namespace 找到并拦截业务 yaml 并注入配置信息和镜像。
执行安装
kubectl apply -f datakit-operator.yaml
重启应用
重启需要使用 APM 的应用 pod。
实践效果
在本次实践活动中,我们通过模拟用户访问若依系统的页面来生成流量数据,并故意引入一些错误以测试系统的响应。通过这种方式,我们可以观察到在观测云控制台的「应用性能监控」(APM)模块中,若依系统已经成功接入了应用性能监控服务。这表明我们能够实时监控和分析系统的性能指标,确保其稳定运行。
在业务访问过程中产生的错误,我们同样可以在观测云的 APM(应用性能监控)页面上实时查看。这使得我们能够及时发现并处理系统中的问题,确保业务的顺畅运行。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。