蛮子哥 蛮子哥
首页
  • linux
  • windows
  • 中间件
  • 监控
  • 网络
  • 存储
  • 安全
  • 防火墙
  • 数据库
  • 系统
  • docker
  • 运维工具
  • other
  • elk
  • K8S
  • ansible
  • Jenkins
  • GitLabCI_CD
  • ArgoCD
  • 随笔
  • 面试
  • 工具
  • 收藏夹
  • Shell
  • python
  • golang
友链
  • 索引

    • 分类
    • 标签
    • 归档
    • 首页 (opens new window)
    • 关于我 (opens new window)
    • 图床 (opens new window)
    • 评论 (opens new window)
    • 导航栏 (opens new window)
周刊
GitHub (opens new window)

蛮子哥

业精于勤,荒于嬉
首页
  • linux
  • windows
  • 中间件
  • 监控
  • 网络
  • 存储
  • 安全
  • 防火墙
  • 数据库
  • 系统
  • docker
  • 运维工具
  • other
  • elk
  • K8S
  • ansible
  • Jenkins
  • GitLabCI_CD
  • ArgoCD
  • 随笔
  • 面试
  • 工具
  • 收藏夹
  • Shell
  • python
  • golang
友链
  • 索引

    • 分类
    • 标签
    • 归档
    • 首页 (opens new window)
    • 关于我 (opens new window)
    • 图床 (opens new window)
    • 评论 (opens new window)
    • 导航栏 (opens new window)
周刊
GitHub (opens new window)
  • ansible系列文章

  • Kubernetes笔记

    • 安装篇-kubeadm
    • k8s入门
    • k8s安装篇二进制
    • k8s面试题
    • kubernetes(k8s)yaml文件详解
    • k8s报错小结
    • Kubernetes 安装配置ingress controller
    • cka考试真题
    • ingress配置证书
    • cka考试作业
    • k8s部署java项目
    • jenkins脚本式流水线部署k8s项目实例一
    • helm v3安装并创建例子
    • 使用helm将本地部署文件上传到harbor chart上
    • helm公共仓库创建
    • helm适应minio作为私有仓库
    • helm release使用说明
    • kubernetes核心概念
    • kubectl使用技巧
    • kubernetes卷的几种类型
    • kubernetes安全框架
    • 云原生-什么是HPA和PDB、VPA
    • k8s部署php项目示例
    • 配置kubeconfig 文件访问 Kubernetes 集群
    • configmap配置的几种方式
    • k8s配置go服务
    • k8s部署java项目
    • kubernetes部署prometheus监控
    • kubernetes部署elk日志系统
    • kubernetes环境devops流水线
    • kubernetes高阶技能必备的工具
    • deployment中使用configmap、secret的方式
    • 业务pod 飘移pending排查分析
    • debian 12安装kubernetes
    • istio入门
    • kubernetes证书续签到100年
    • kubernetes网络模式
    • etcd的备份和还原
    • Kubernetes 安装和配置 NFS 存储卷
    • VictoriaLogs集群采集Kubernetes Pod日志
    • 解决容器时区问题
    • 日志采集操作示例
    • operator部署VictoriaMetrics
    • grafana高可用部署
    • kubernetes部署jaeger
      • victorialogs配置关键字告警
    • elk

    • jenkins

    • GitLabCI_CD

    • AI编程

    • 提示词

    • ArgoCD

    • 专题
    • Kubernetes笔记
    蛮子哥
    2026-05-30
    目录

    kubernetes部署jaeger

    # 引言

    在 Kubernetes 中为 Java 和 Go 程序实现链路追踪(Distributed Tracing)的最主流、最推荐的组合。

    • OpenTelemetry(OTel):统一的标准化探针,支持 Java 和 Go 的自动/手动埋点。
    • Jaeger:优秀的可视化后端,CNCF 项目,在 Kubernetes 上部署成熟。

    # 第一步:安装cert-manager(依赖)

    #在国内会出现镜像拉取问题,可以修改成代理镜像地址也可以直接拉取到本地,填写本地镜像地址
    # 先下载 yaml
    curl -LO https://github.com/cert-manager/cert-manager/releases/latest/download/cert-manager.yaml
    
    # 批量替换镜像源
    #搜索quay.io
    
    kubectl apply -f cert-manager.yaml
    
    1
    2
    3
    4
    5
    6
    7
    8

    报错问题,如果安装报错,删除不干净执行下面操作。清理 CRD(避免冲突)

    kubectl delete crd \
      certificates.cert-manager.io \
      certificaterequests.cert-manager.io \
      challenges.acme.cert-manager.io \
      clusterissuers.cert-manager.io \
      issuers.cert-manager.io \
      orders.acme.cert-manager.io \
      --ignore-not-found
    
    1
    2
    3
    4
    5
    6
    7
    8

    # 第二步:安装 OpenTelemetry Operator

    # 下载 operator yaml
    curl -LO https://github.com/open-telemetry/opentelemetry-operator/releases/latest/download/opentelemetry-operator.yaml
    
    # 替换 ghcr.io 为阿里云加速镜像
    #搜索ghcr.io
    
    kubectl apply -f opentelemetry-operator.yaml
    
    # 验证
    kubectl get pods -n opentelemetry-operator-system
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    # 第三步:部署 Jaeger v2(All-in-one,内存存储,开发/测试用)

    [root@k8s-master01 jaeger]# cat jaeger-allinone.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: jaeger
      namespace: observability
      labels:
        app: jaeger
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: jaeger
      template:
        metadata:
          labels:
            app: jaeger
        spec:
          containers:
          - name: jaeger
            image: docker.cnb.cool/zzppjj/docker-images/jaeger:2.1.0 
            ports:
            - containerPort: 4317   # OTLP gRPC
            - containerPort: 4318   # OTLP HTTP
            - containerPort: 16686  # Jaeger UI
            env:
            - name: SPAN_STORAGE_TYPE
              value: memory
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: jaeger
      namespace: observability
    spec:
      selector:
        app: jaeger
      ports:
      - name: otlp-grpc
        port: 4317
        targetPort: 4317
      - name: otlp-http
        port: 4318
        targetPort: 4318
      - name: ui
        port: 16686
        targetPort: 16686
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47

    # 第四步:部署 OpenTelemetry Collector

    [root@k8s-master01 jaeger]# cat otel-collector.yaml 
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: otel-collector-config
      namespace: observability
    data:
      config.yaml: |
        receivers:
          otlp:
            protocols:
              grpc:
                endpoint: 0.0.0.0:4317
              http:
                endpoint: 0.0.0.0:4318
    
        processors:
          batch:
            timeout: 1s
    
        exporters:
          otlp/jaeger:
            endpoint: jaeger.observability.svc.cluster.local:4317
            tls:
              insecure: true
    
        service:
          pipelines:
            traces:
              receivers: [otlp]
              processors: [batch]
              exporters: [otlp/jaeger]
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: otel-collector
      namespace: observability
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: otel-collector
      template:
        metadata:
          labels:
            app: otel-collector
        spec:
          containers:
          - name: otel-collector
            image: docker.cnb.cool/zzppjj/docker-images/opentelemetry-collector-contrib:0.105.0
            args: ["--config=/conf/config.yaml"]
            volumeMounts:
            - name: config
              mountPath: /conf
            ports:
            - containerPort: 4317
            - containerPort: 4318
          volumes:
          - name: config
            configMap:
              name: otel-collector-config
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: otel-collector
      namespace: observability
    spec:
      selector:
        app: otel-collector
      ports:
      - name: otlp-grpc
        port: 4317
      - name: otlp-http
        port: 4318
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77

    # 第五步:应用接入

    # 第五步:应用接入

    # Java(Spring Boot)

    在 pom.xml 中添加:

    xml

    <dependency>
      <groupId>io.opentelemetry.instrumentation</groupId>
      <artifactId>opentelemetry-spring-boot-starter</artifactId>
      <version>2.6.0</version>
    </dependency>
    
    1
    2
    3
    4
    5

    application.yaml 配置:

    spring:
      application:
        name: my-java-service
    
    management:
      tracing:
        sampling:
          probability: 1.0
    
    otel:
      exporter:
        otlp:
          endpoint: http://otel-collector.observability.svc.cluster.local:4318
      service:
        name: my-java-service
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15

    Go

    // tracer.go
    package tracer
    
    import (
        "context"
        "go.opentelemetry.io/otel"
        "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
        "go.opentelemetry.io/otel/sdk/resource"
        sdktrace "go.opentelemetry.io/otel/sdk/trace"
        semconv "go.opentelemetry.io/otel/semconv/v1.21.0"
    )
    
    func InitTracer(ctx context.Context) (*sdktrace.TracerProvider, error) {
        exporter, err := otlptracegrpc.New(ctx,
            otlptracegrpc.WithEndpoint("otel-collector.observability:4317"),
            otlptracegrpc.WithInsecure(),
        )
        if err != nil {
            return nil, err
        }
    
        res, _ := resource.New(ctx,
            resource.WithAttributes(
                semconv.ServiceName("my-go-service"),
            ),
        )
    
        tp := sdktrace.NewTracerProvider(
            sdktrace.WithBatcher(exporter),
            sdktrace.WithResource(res),
            sdktrace.WithSampler(sdktrace.AlwaysSample()),
        )
        otel.SetTracerProvider(tp)
        return tp, nil
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35

    # 第六步:访问 Jaeger UI

    kubectl port-forward svc/jaeger 16686:16686 -n observability
    
    1

    浏览器打开 http://localhost:16686

    image-20260530225102421

    微信 支付宝
    上次更新: 2026/05/30, 22:51:34

    ← grafana高可用部署 victorialogs配置关键字告警→

    最近更新
    01
    victorialogs配置关键字告警
    06-03
    02
    grafana高可用部署
    05-26
    03
    VictoriaLogs集群采集Kubernetes Pod日志
    05-24
    更多文章>
    Theme by Vdoing | Copyright © 2019-2026 | 点击查看十年之约 | 鄂ICP备2024072800号
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式