
Jaeger Operator 是一个 Kubernetes Operator,用于在 Kubernetes 集群中自动化部署、配置、管理和升级 Jaeger 分布式追踪系统。通过自定义资源(Custom Resource, CR)抽象,Jaeger Operator 简化了 Jaeger 实例的生命周期管理,降低了在 Kubernetes 环境中构建可观测性平台的复杂度。
Jaeger 自定义资源定义(CRD)声明式管理 Jaeger 实例,支持 YAML 配置即部署。all-in-one(测试)、production(生产)等部署策略,适配不同环境需求。前提条件
安装方式
1. 通过 Helm Chart 安装(推荐)
Helm 是 Jaeger Operator 官方推荐的安装方式,支持版本控制和参数自定义:
bash# 添加 Jaeger Helm 仓库 helm repo add jaegertracing https://jaegertracing.github.io/helm-charts helm repo update # 安装 Operator(默认命名空间:observability) helm install jaeger-operator jaegertracing/jaeger-operator \ --namespace observability \ --create-namespace \ --version 2.48.0 # 替换为最新版本
2. 通过 Kubernetes Manifests 安装
直接 apply 官方维护的 YAML 清单(包含 CRD、RBAC 及 Operator Deployment):
bash# 安装 CRD kubectl apply -f https://github.com/jaegertracing/jaeger-operator/releases/download/v1.48.0/jaeger-operator.yaml
3. 通过 Operator Lifecycle Manager (OLM) 安装
若集群已部署 OLM(如 OpenShift 内置),可通过 OperatorHub 搜索 Jaeger 并一键安装。
安装 Operator 后,通过 Jaeger 自定义资源(CR)创建实例。以下为典型场景示例:
场景 1:All-in-One 模式(测试环境)
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
场景 2:Production 模式(生产环境)
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: ["https://elasticsearch:9200"] # 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
Jaeger 自定义资源(CR)核心字段
| 字段路径 | 说明 | 可选值/示例 |
|---|---|---|
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 存储追踪数据。若已有外部 Elasticsearch 集群,通过 spec.storage.elasticsearch.hosts 和 secretName 配置:
yamlspec: storage: type: elasticsearch elasticsearch: hosts: ["https://es-cluster:9200"] # 外部 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 个请求
安全配置(TLS)
为 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 https://jaegertracing.github.io/helm-charts 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: ["https://es-cluster:9200"] 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 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务