对于部署在 Kubernetes 上的应用,腾讯云可观测团队提供了 Operator 方案:tencent-opentelemetry-operator, 此方案在社区 opentelemetry-operator 基础上构建,可以实现探针自动注入,方便应用快速接入 APM。目前 tencent-opentelemetry-operator 支持的编程语言包括 Java、Python、Node.js 和 .NET。
说明:
tencent-opentelemetry-operator 支持 Kubernetes 1.19及以上版本。
安装方式
通过 APM 控制台一键安装(推荐)
由于配置项的填写比较复杂,推荐您使用 APM 控制台的一键安装 tencent-opentelemetry-operator 功能,以简化安装步骤。
1. 登录 应用性能监控 控制台。
2. 在左侧菜单栏中选择应用列表,单击接入应用。
3. 选择需要接入的语言,并指定 TKE 环境自动接入的上报方式。
4. 单击一键安装 Operator。
5. 在弹出对话框中,选择对应的上报地域、默认业务系统、TKE 所在地域、TKE 集群,单击安装后即可完成安装。
说明:
仅支持 TKE 标准集群和 TKE Serverless 集群,暂不支持 TKE 边缘集群和 TKE 注册集群。
通过 APM 控制台一键安装的 tencent-opentelemetry-operator,会被安装到 kube-system 命名空间。
如果需要修改默认业务系统等配置项,可以在一键安装界面对该 TKE 集群进行更新操作。
通过 TKE 应用市场安装
1. 登录 容器服务 控制台。
2. 在左侧菜单栏中选择运维中心 > 应用市场,搜索 tencent-opentelemetry-operator 并单击进入。
3. 单击创建应用,选择需要安装的 TKE 集群,参考 配置项说明,填入必要参数,即可完成安装。
说明:
仅支持 TKE 标准集群和 TKE Serverless 集群,暂不支持 TKE 边缘集群和 TKE 注册集群。
通过 TKE 应用市场安装 tencent-opentelemetry-operator,可以安装在任何命名空间。在同一个 TKE 集群中,只能安装最多一个 tencent-opentelemetry-operator。
通用 K8s 集群安装
tencent-opentelemetry-operator 支持通用 K8s 集群以及混合云场景。对于部署在线下 IDC 以及其他云平台的 K8s 集群,只要 K8s 的版本符合要求,并且 APM 服务端之间的网络可达,就可以通过 Operator 模式实现快速接入。
1. 安装 kubectl 和 Helm CLI,安装方式请参考 安装 kubectl 和 安装 Helm CLI。请确保使用3.6或以上版本的 Helm CLI。
2. 下载 Chart 包 和配置文件 values.yaml。您也可以使用 wget 命令下载,对应的地址如下:
3. 参考 配置项说明,在 values.yaml 中填入必要的字段。
说明:
env.TKE_CLUSTER_ID 和 env.TKE_REGION 只适用于 TKE 集群,因此请将这两个配置项设置为
"N/A"。如果从公网接入,请将 env.FROM_INTERNET 设置为
"true",同时将 env.ENDPOINT 设置为公网接入点。4. 使用本地文件安装 Operator,其中
my-release 为 Chart 名,可以自定义。--values 代表 values.yaml 的文件路径。helm install my-release /path/to/your/chart.tgz --values /path/to/your/values.yaml
说明:
在通用 K8s 集群安装 tencent-opentelemetry-operator 的时候,需要有公网访问权限,否则无法拉取 Operator 镜像。
配置项说明
tencent-opentelemetry-operator 通过 Helm 部署安装,所有的配置项都集中于
values.yaml。请注意 YAML 文件中的参数存在层级关系,请参考如下 YAML 片段:env:TKE_CLUSTER_ID: "cls-ky8nmlra"TKE_REGION: "ap-guangzhou"ENDPOINT: "http://pl.ap-guangzhou.apm.tencentcs.com:4317"APM_TOKEN: "apmdemotoken"
必填字段
参数 | 描述 |
env.TKE_CLUSTER_ID | TKE 集群 ID。对于非 TKE 集群,请设置为 "N/A"。 |
env.TKE_REGION | |
env.ENDPOINT | APM 接入点。每个集群只能使用唯一的 APM 接入点,请从业务系统获取接入点。如果使用公网接入点,需要同时设置 env.FROM_INTERNET: "true" |
env.APM_TOKEN | 集群默认的 APM Token。APM token 代表了需要接入的业务系统,请从业务系统中获取 token。可以在工作负载中指定其他业务系统的 Token,以覆盖集群默认的 Token。 |
选填字段
参数 | 描述 |
env.JAVA_INSTR_VERSION | Java 探针版本号,可以设置为 latest(默认)或具体的版本号,非必要情况下不推荐设置此字段。 |
env.PYTHON_INSTR_VERSION | Python 探针版本号,可以设置为 latest(默认)或具体的版本号,非必要情况下不推荐设置此字段。 |
env.NODEJS_INSTR_VERSION | Node.js 探针版本号,可以设置为 latest(默认)或具体的版本号,非必要情况下不推荐设置此字段。 |
env.DOTNET_INSTR_VERSION | .NET 探针版本号,可以设置为 latest(默认)或具体的版本,非必要情况下不推荐设置此字段。 |
env.INTL_SITE | 在国际站需要设置为 "true"。 |
env.FROM_INTERNET | 如果从公网接入,请设置为 "true",(同时需要将 env.ENDPOINT 设置为公网接入点)。 |
说明:
接入应用
安装完 tencent-opentelemetry-operator 后,在需要接入 APM 的工作负载中添加相关 annotation,就可以实现探针自动注入,并向 APM 上报监控数据。请参考如下文档完成应用接入:
业务系统与 K8s 集群的映射关系
在安装 Operator 的时候,必填参数
env.APM_TOKEN 需要从业务系统获取,代表该集群默认的 APM Token。因此,每个安装 Operator 的 K8s 集群,只能指定唯一的业务系统作为默认接入目标。但在实际使用过程中,部署在同一个 K8s 集群中的不同应用可能需要接入到不同的业务系统,在这种情况下就需要通过在工作负载中指定业务系统 Token,以覆盖集群级别的 env.APM_TOKEN 配置。场景 | 是否支持 | 实现方式 |
1个 K8s 集群 → 1个业务系统(1:1) | ✅ 支持 | 安装 Operator 时指定默认业务系统。 |
多个 K8s 集群 → 1个业务系统(N:1) | ✅ 支持 | 每个集群各自安装 Operator,指定同一个默认业务系统。 |
1个 K8s 集群 → 多个业务系统(1:N) | ✅ 支持 | Operator 指定默认业务系统 + 工作负载中指定其他业务系统的 Token。 |
多个 K8s 集群 → 多个业务系统(N:N) | ✅ 支持 | Operator 指定默认业务系统 + 工作负载中指定其他业务系统的 Token。 |
示例
参考如下场景:
K8s 集群部署了3个 Java 应用:service-1、service-2、service-3。
service-1 和 service-2 需要接入业务系统 A。
service-3 需要接入业务系统 B。
可以通过如下步骤实现:
1. 在安装 Operator 的时候,指定默认业务系统为 A,即设置
env.APM_TOKEN 为业务系统 A 的 Token。2. 在接入 service-1 和 service-2 的时候,不需要在工作负载中配置 Token。以 service-1 为例,需要添加的 Pod Annotation 如下:
annotations:cloud.tencent.com/inject-java: "true"cloud.tencent.com/otel-service-name: service-1
3. 在接入 service-3 的时候,在工作负载中配置 Token,覆盖集群级别的配置项。需要添加的 Pod Annotation 如下:
annotations:cloud.tencent.com/inject-java: "true"cloud.tencent.com/otel-service-name: service-3cloud.tencent.com/apm-token: "<Token>" # Token from System B