K8S 部署jaeger-operator,与其演示项目hotrod

07-21 1094阅读

最近在研究observabilty在K8S环境的onboard,查阅了一些资料,发现现在网上Prometheus/Metrics相关的资源,是比较全面的,而Trace相关的部分不是很全面,所以写下这篇博文,以做备忘和分享。

组件介绍

  • 这里选择使用jaeger-operator,Github主页为:GitHub - jaegertracing/jaeger-operator: Jaeger Operator for Kubernetes simplifies deploying and running Jaeger on Kubernetes.因为这里只是demo的需要所以采用了all-in-one的方式部署,生产环境建议朋友们采用可靠的持久化部署方式。
  • 为什么没有选择jaeger-kubernetes呢?因为它是有些过时的,从其主页上我们可以看到GitHub - jaegertracing/jaeger-kubernetes: Support for deploying Jaeger into Kubernetes

    K8S 部署jaeger-operator,与其演示项目hotrod

    此项目处于已经归档且久未更新的状态。

    部署jaeger-operator

    我们可以参考jeager的官方网站Operator for Kubernetes — Jaeger documentation

    请注意,可能官方网站的最新版本,和Github的最新版本是不一样的,如本人在起草文章的时候,Github的最新版是1.57,而官网的最新版是1.59,因此需要下载Github资源的时候请留意。

    创建命名空间observability

    kubectl create namespace observability

    资源创建

    kubectl create -f https://github.com/jaegertracing/jaeger-operator/releases/download/v1.59.0/jaeger-operator.yaml -n observability

    或者

    wget https://github.com/jaegertracing/jaeger-operator/releases/download/v1.57.0/jaeger-operator.yaml
    kubectl apply -f jaeger-operator.yaml -o observability

    这个yaml很长,而且是官网下载未编辑,就不贴给大家看了。

    我们可以检查是否部署成功

    $ kubectl get deployment jaeger-operator -n observability
    NAME              DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    jaeger-operator   1         1         1            1           48s
    

    创建Jaeger实例

    我们创建部署文件Jaeger-example.yaml

    apiVersion: jaegertracing.io/v1
    kind: Jaeger
    metadata:
      name: all-in-one
    spec:
      strategy: allinone
      agent:
        strategy: DaemonSet
      ingress:
        hosts:
        - xxx
      imagePullSecrets:
      - name: xxx

    其中ingress和imagePullSecrets部分可以省略或按需要配置,imagePullSecrets是因为docker.io限制了拉取次数,可能需要配置包括注册信息的Secret。

    kubectl -f jaeger-example.yaml -o observability

    然后我们查看是否完成创建

    k get svc -n observability | grep all-in-one

    部署hotrod

    资源创建

    创建配置文件hotrod.yaml

    metadata:
      name: hotrod
    spec:
      rules:
      - host: hotrod.jaeger.k8s.local
        http:
          paths:
          - backend:
              service:
                name: hotrod
                port:
                  number: 8080
            path: /
            pathType: Prefix
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: hotrod
      labels:
        app: hotrod
    spec:
      ports:
      - port: 8080
        protocol: TCP
      selector:
        app: hotrod
    ---
    apiVersion: v1
    kind: Pod
    metadata:
      name: hotrod
      labels:
        app: hotrod
    spec:
      containers:
      - name: hotrod
        image: jaegertracing/example-hotrod
        imagePullPolicy: IfNotPresent
        args:
        - all
        - --jaeger-ui=http://jaeger.k8s.local
        env:
        - name: JAEGER_AGENT_HOST
          value: xxxx
        - name: OTEL_EXPORTER_OTLP_ENDPOINT
          value: http://xxx:4318
      imagePullSecrets:
      - name: xx
    

    OTEL_EXPORTER_OTLP_ENDPOINT这个环境变量,是为了导出trace数据到Jaeger,它的默认值是localhost:4318,可以参考jaeger-operator部署出来的all-in-one-query服务;

    JAEGER_AGENT_HOST我也不清楚有什么用,可能是参考的配置文件版本有点老。。

    接下来我们部署资源。

    kubectl apply -f hotrod.yaml -o observability

    检查部署情况

    kubectl get svc -n observability | grep hot

    从UI检验

    方便起见可以将service以Nodeport启动

    Hotrod: http://node_IP:node_port

    K8S 部署jaeger-operator,与其演示项目hotrod

    我们可以点击UI产生一些trace;

    Jaeger:http://node_IP:node_port (all-in-one-query服务)

    K8S 部署jaeger-operator,与其演示项目hotrod

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]