Jaeger Operator 是一个 Kubernetes Operator,用于在 Kubernetes 集群中自动化部署、配置、管理和升级 Jaeger 分布式追踪系统。通过自定义资源(Custom Resource, CR)抽象,Jaeger Operator 简化了 Jaeger 实例的生命周期管理,降低了在 Kubernetes 环境中构建可观测性平台的复杂度。
Jaeger 自定义资源定义(CRD)声明式管理 Jaeger 实例,支持 YAML 配置即部署。all-in-one(测试)、production(生产)等部署策略,适配不同环境需求。Helm 是 Jaeger Operator ***推荐的安装方式,支持版本控制和参数自定义:
bash# 添加 Jaeger Helm 仓库 helm repo add jaegertracing [***] helm repo update # 安装 Operator(默认命名空间:observability) helm install jaeger-operator jaegertracing/jaeger-operator \ --namespace observability \ --create-namespace \ --version 2.48.0 # 替换为最新版本
直接 apply ***维护的 YAML 清单(包含 CRD、RBAC 及 Operator Deployment):
bash# 安装 CRD kubectl apply -f [***]
若集群已部署 OLM(如 OpenShift 内置),可通过 OperatorHub 搜索 Jaeger 并一键安装。
安装 Operator 后,通过 Jaeger 自定义资源(CR)创建实例。以下为典型场景示例:
all-in-one 模式将 Jaeger 所有组件(Agent、Collector、Query、Ingester)打包为单个 Pod,适合快速测试,不持久化数据:
yaml# jaeger-all-in-one.yaml apiVersion: jaegertracing.io/v1 kind: Jaeger metadata: name: jaeger-test spec: strategy: allInOne # 测试模式 allInOne: image: jaegertracing/all-in-one:1.48 # Jaeger 镜像版本 ingress: enabled: true # 启用 Ingress 暴露 Query UI hosts: - jaeger-test.example.com # 替换为实际域名
应用配置:
bashkubectl apply -f jaeger-all-in-one.yaml -n observability
production 模式采用分布式部署,组件独立部署并使用持久化存储(如 Elasticsearch),适合生产环境:
yaml# jaeger-production.yaml apiVersion: jaegertracing.io/v1 kind: Jaeger metadata: name: jaeger-prod spec: strategy: production # 生产模式 collector: replicas: 2 # collector 副本数(高可用) resources: limits: cpu: 1000m memory: 1Gi query: replicas: 2 # Query 副本数 resources: limits: cpu: 500m memory: 512Mi storage: type: elasticsearch # 使用 Elasticsearch 存储追踪数据 elasticsearch: nodeCount: 3 # Elasticsearch 节点数(若需 Operator 自动部署 ES) # 若使用外部 ES,替换为: # hosts: ["[***]"] # secretName: jaeger-es-secret # 存储 ES 认证信息的 Secret 名称 agent: strategy: DaemonSet # Agent 以 DaemonSet 部署(每个节点一个实例) ingress: enabled: true hosts: - jaeger-prod.example.com
应用配置:
bashkubectl apply -f jaeger-production.yaml -n observability
| 字段路径 | 说明 | 可选值/示例 |
|---|---|---|
spec.strategy | 部署策略 | allInOne(测试)、production(生产) |
spec.storage.type | 存储后端类型 | elasticsearch、cassandra、memory |
spec.collector.replicas | Collector 副本数(生产环境建议 ≥2) | 2、3 |
spec.agent.strategy | Agent 部署模式 | DaemonSet(节点级)、Sidecar(应用级) |
spec.ingress.enabled | 是否启用 Ingress 暴露 Query UI | true、false |
spec.resources | 资源限制(可作用于 Collector/Query/Agent 等组件) | limits: {cpu: "1000m", memory: "1Gi"} |
Jaeger Operator 自身支持通过环境变量调整行为(通过 Operator Deployment 的 env 字段配置):
| 环境变量 | 说明 | 默认值 |
|---|---|---|
WATCH_NAMESPACE | Operator 监控的命名空间(多 namespace 用逗号分隔,为空时监控全集群) | 安装 Operator 的命名空间 |
LOG_LEVEL | 日志级别 | info |
JAEGER_AGENT_HOST | Operator 自身接入 Jaeger 追踪的 Agent 地址(用于调试 Operator) | 空(默认不开启) |
生产环境推荐使用 Elasticsearch 存储追踪数据。若已有外部 Elasticsearch 集群,通过 spec.storage.elasticsearch.hosts 和 secretName 配置:
yamlspec: storage: type: elasticsearch elasticsearch: hosts: ["[***]"] # 外部 ES 地址 secretName: es-credentials # 包含 ES 用户名密码的 Secret(key 为 `username` 和 `password`)
通过 spec.sampling 定义采样策略(如固定采样率、基于服务名动态调整):
yamlspec: sampling: options: default_strategy: type: probabilistic # 概率采样 param: 0.001 # 采样率(1/1000 请求) per_service_strategies: - service: "payment-service" # 对特定服务调整采样率 type: rateLimiting param: 10 # 每秒最多采样 10 个请求
为 Jaeger 组件间通信或外部访问启用 TLS:
yamlspec: ingress: tls: - hosts: [jaeger-prod.example.com] secretName: jaeger-tls # 包含 TLS 证书的 Secret(key 为 `tls.crt` 和 `tls.key`) collector: tls: enabled: true # 启用 Collector 服务端 TLS(客户端需验证证书) secretName: collector-tls # Collector 证书 Secret
bash# 添加仓库并安装 Operator(指定命名空间和版本) helm repo add jaegertracing [***] helm repo update helm install jaeger-operator jaegertracing/jaeger-operator \ --namespace observability \ --create-namespace \ --version 2.48.0 \ --set watchNamespace="" # 监控全集群(默认仅监控安装命名空间)
yaml# jaeger-prod-full.yaml apiVersion: jaegertracing.io/v1 kind: Jaeger metadata: name: jaeger-prod namespace: observability spec: strategy: production collector: replicas: 3 resources: requests: {cpu: "500m", memory: "512Mi"} limits: {cpu: "1000m", memory: "1Gi"} query: replicas: 2 resources: limits: {cpu: "500m", memory: "512Mi"} serviceType: ClusterIP # 内部访问用 ClusterIP,外部通过 Ingress 暴露 storage: type: elasticsearch elasticsearch: hosts: ["[***]"] secretName: es-creds indexCleaner: # 自动清理旧索引 enabled: true numberOfDays: 30 # 保留 30 天数据 agent: strategy: DaemonSet resources: limits: {cpu: "100m", memory: "64Mi"} ingress: enabled: true hosts: [jaeger.example.com] tls: - hosts: [jaeger.example.com] secretName: jaeger-tls sampling: options: default_strategy: {type: "probabilistic", param: 0.01}
部署后通过以下命令验证资源状态:
bash# 查看 Jaeger CR 状态 kubectl get jaeger -n observability # 查看 Jaeger 组件 Pod kubectl get pods -n observability -l app.kubernetes.io/instance=jaeger-prod # 查看 Ingress 地址 kubectl get ingress jaeger-prod -n observability -o jsonpath='{.status.load***.ingress[0].ip}'
来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429