赞
踩
istio的安装包里是带有jaeger部署方式的,但是他提供的部署方式是all-in-one,即数据存储是内存,这对于生产环境来说是不合适的,因此,我们需要根据官方的生产环境的部署方式进行部署,这个在istio的官方文档里也有说明
而在kubernetes中,官方是推荐使用operator的方式进行部署,部署的方式不难,参照官方文档进行即可,但是在对接istio时,有一些需要注意的地方,下面记录下我的安装过程。
本文只是记录在生产环境中如何部署jaeger,关于jaeger的深层次应用,不在此进行介绍,有需求的同学可以自行参阅官方文档
参考文档:jaeger-operator
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.6.3/cert-manager.yaml
部署jaeger-operator
根据官方文档,继续操作
因为1.46.0在github上还没打出版本来,所以按照官方文档的命令执行是失败的,因此我们可以退而求其次,安装1.45.0
kubectl create ns observability
kubectl create -f https://github.com/jaegertracing/jaeger-operator/releases/download/v1.45.0/jaeger-operator.yaml -n observability
kubectl get deployment jaeger-operator -n observability
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
jaeger-operator 1 1 1 1 48s
注意,这里可能会发生pod启动失败,当你
kubectl describe pod -n observability jaeger-operator-58d97648c5-****
,你会发现gcr.io/kubebuilder/kube-rbac-proxy:v0.13.0下载失败,经常玩K8S的应该就知道了,google库是被墙了的,需要你自己想办法搞定这个镜像,你可以通过国内的镜像地址拉取后重新tag,或者在梯子环境下下载后,导出导入镜像…总之办法很多。
这一步因为每个人面对的环境是不同的,所以需要根据自己的实际环境进行定制化的配置,建议多看几遍文档
这里说下我的需求:我使用的存储是外部的ES,同时参照官方的配置,使用Elasticsearch rollover的配置方式,然后外部ES是有账号密码的,所以可以使用Secrets Support配置账号密码,secrets的具体配置方式可以参见External Elasticsearch的第四条说明kubectl create secret generic jaeger-secret --from-literal=ES_PASSWORD=changeme --from-literal=ES_USERNAME=elastic
下面贴出我的配置
#创建elasticsearch的用户密码secrets $ kubectl create secret generic jaeger-secret --from-literal=ES_PASSWORD=changeme --from-literal=ES_USERNAME=elastic $ kubectl get secrets -n observability NAME TYPE DATA AGE default-token-fc756 kubernetes.io/service-account-token 3 23h jaeger-operator-service-cert kubernetes.io/tls 3 23h jaeger-operator-token-dmrzc kubernetes.io/service-account-token 3 20h jaeger-secret Opaque 2 22h jaeger-token-n5xfx kubernetes.io/service-account-token 3 20h ##jaeger部署文件 $ cat jaeger.yaml apiVersion: jaegertracing.io/v1 kind: Jaeger metadata: name: jaeger namespace: observability spec: strategy: production collector: maxReplicas: 2 resources: limits: cpu: 100m memory: 128Mi storage: type: elasticsearch options: es: server-urls: http://192.168.8.105:9200 use-aliases: true esRollover: conditions: "{\"max_age\": \"2d\"}" readTTL: 168h schedule: "55 23 * * *" secretName: jaeger-secret query: serviceType: NodePort $ kubectl apply -f jaeger.yaml $ kubectl get svc,pod -n observability NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/jaeger-collector ClusterIP 10.233.19.93 <none> 9411/TCP,14250/TCP,14267/TCP,14268/TCP,4317/TCP,4318/TCP 20h service/jaeger-collector-headless ClusterIP None <none> 9411/TCP,14250/TCP,14267/TCP,14268/TCP,4317/TCP,4318/TCP 20h service/jaeger-operator-metrics ClusterIP 10.233.29.204 <none> 8443/TCP 20h service/jaeger-operator-webhook-service ClusterIP 10.233.28.228 <none> 443/TCP 20h service/jaeger-query NodePort 10.233.23.105 <none> 16686:32003/TCP,16685:32004/TCP 20h NAME READY STATUS RESTARTS AGE pod/jaeger-collector-c498bfb45-khtrq 1/1 Running 0 20h pod/jaeger-es-index-cleaner-28102555-t4v77 0/1 Completed 0 14h pod/jaeger-es-lookback-28102555-d98x8 0/1 Completed 0 14h pod/jaeger-es-rollover-28102555-2rxlw 0/1 Completed 0 14h pod/jaeger-es-rollover-create-mapping-k4x5r 0/1 Completed 0 20h pod/jaeger-operator-58d97648c5-gr2kx 2/2 Running 0 20h pod/jaeger-query-79754974c7-7gnk9 2/2 Running 0 20h pod/jaeger-spark-dependencies-28102555-dbnxt 0/1 Completed 0 14h
到此为止,基本的部署已经完成了,你已经可以使用jaeger-query提供的WEB-UI,但是此时却并没有istio相关的tracing信息,之前我们看istio官方文档的时候,已经提过了,需要在istio的配置中定义jaeger-collector的地址,官方给出的方式是在安装(更新)istio的时候定义参数,其实还有一个方法:
$ kubectl get cm -n istio-system NAME DATA AGE grafana 4 63d istio 2 63d istio-ca-root-cert 1 63d istio-gateway-deployment-leader 0 63d istio-gateway-status-leader 0 63d istio-grafana-dashboards 2 63d istio-leader 0 63d istio-namespace-controller-election 0 63d istio-services-grafana-dashboards 4 63d istio-sidecar-injector 2 63d kiali 1 63d kube-root-ca.crt 1 63d prometheus 5 63d
istiod有一个cm,名字就叫istio,我们只需要在istio中添加或者修改即可
修改完了,并不代表已经能正常使用了,此时你需要重启istiod,然后你会发现,你先前部署的服务的tracing信息还是无法通过jaeger看到,此时你就需要重启被istio注入的服务,然后你就能看到tracing信息了
用过kiali的同学都知道,kiali的好几个菜单都能查看traces,而数据来源就是jaeger,如果我们使用istio自带的jaeger,那么不用任何配置,直接就能看
但现在我们是自己部署的jaejer,就跟istio自带的安装方式有一定的差异,所以我们需要配置一下,具体的方式也很简单,就是修改kiali的configmap
$ kubectl get cm -n istio-system kiali
NAME DATA AGE
kiali 1 63d
然后找到external_services
,在下面添加如下内容
tracing:
url: http://192.168.8.104:32003
in_cluster_url: http://jaeger-query.observability:16685/jaeger
url就相当于你外部访问jaeger的webUI的地址,其作用就是可以让你在kiali直达jaeger,in_cluster_url就是在kiali展示traces
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。