K8S 部署jaeger-operator,与其演示项目hotrod
最近在研究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
此项目处于已经归档且久未更新的状态。
部署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
我们可以点击UI产生一些trace;
Jaeger:http://node_IP:node_port (all-in-one-query服务)