【问题标题】:Connecting jaeger with elasticsearch backend storage on kubernetes cluster将 jaeger 与 kubernetes 集群上的 elasticsearch 后端存储连接起来
【发布时间】:2019-05-23 16:49:44
【问题描述】:

我在谷歌云平台上有一个 kubernetes 集群,在它上面,我通过 jaeger-kubernetes templates 的开发设置进行了 jaeger 部署 因为我的目的是像后端存储一样设置elasticsearch,因此,我按照 jaeger-kubernetes github 文档进行了以下操作

这里配置了访问elasticsearch服务器的URL和用户名密码和端口

kubectl create -f https://raw.githubusercontent.com/jaegertracing/jaeger-kubernetes/master/production-elasticsearch/configmap.yml

这里,配置了 elasticsearch 服务的 docker 镜像的下载和它们的卷挂载。

kubectl create -f https://raw.githubusercontent.com/jaegertracing/jaeger-kubernetes/master/production-elasticsearch/elasticsearch.yml

然后,此时我们有一个运行在 9200 和 9300 端口上的弹性搜索服务

 kubectl get service elasticsearch                                                                                                                                [a89fbe2]
NAME            TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)             AGE
elasticsearch   ClusterIP   None         <none>        9200/TCP,9300/TCP   1h

λ bgarcial [~] → kubectl create -f https://raw.githubusercontent.com/jaegertracing/jaeger-kubernetes/master/jaeger-production-template.yml        
deployment.extensions/jaeger-collector created
service/jaeger-collector created
service/zipkin created
deployment.extensions/jaeger-query created
service/jaeger-query created
daemonset.extensions/jaeger-agent created

λ bgarcial [~/workspace/jaeger-elastic] at  master ?

根据Jaeger architecturejaeger-collectorjaeger-query 服务需要访问后端存储。

因此,这些是我在 Kubernetes 集群上运行的服务:

λ bgarcial [~/workspace/jaeger-elastic] at  master ?
→ kubectl get services                                                                                  [baefdf9]
NAME               TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)                        AGE
elasticsearch      ClusterIP      None            <none>           9200/TCP,9300/TCP              3h
jaeger-collector   ClusterIP      10.55.253.240   <none>           14267/TCP,14268/TCP,9411/TCP   3h
jaeger-query       LoadBalancer   10.55.248.243   35.228.179.167   80:30398/TCP                   3h
kubernetes         ClusterIP      10.55.240.1     <none>           443/TCP                        3h
zipkin             ClusterIP      10.55.240.60    <none>           9411/TCP                       3h

λ bgarcial [~/workspace/jaeger-elastic] at  master ?
  • 我要去configmap.yml弹性搜索文件kubectl edit configmap jaeger-configuration命令,以便尝试编辑它与弹性搜索URL端点相关的内容(可能是?...此时我想这是下一步。 ..)

我执行它:

λ bgarcial [~] → kubectl edit configmap jaeger-configuration 

我得到以下编辑条目:

 apiVersion: v1
data:
  agent: |
    collector:
      host-port: "jaeger-collector:14267"
  collector: |
    es:
      server-urls: http://elasticsearch:9200
      username: elastic
      password: changeme
    collector:
      zipkin:
        http-port: 9411
  query: |
    es:
      server-urls: http://elasticsearch:9200
      username: elastic
      password: changeme
  span-storage-type: elasticsearch
kind: ConfigMap
metadata:
  creationTimestamp: "2018-12-27T13:24:11Z"
  labels:
    app: jaeger
    jaeger-infra: configuration
  name: jaeger-configuration
  namespace: default
  resourceVersion: "1387"
  selfLink: /api/v1/namespaces/default/configmaps/jaeger-configuration
  uid: b28eb5f4-09da-11e9-9f1e-42010aa60002

这里...我需要设置我们自己的收集器和查询服务的 URL,它们将与 elasticsearch 后端服务连接吗?

如何在此处设置 elasticsearch IP 地址或 URL?

在jaeger组件中,查询和收集器需要访问存储,但是不知道弹性端点是什么...

server-urls: http://elasticsearch:9200 是正确的端点吗?

我从 kubernetes 和 DevOps 世界开始,如果有人可以在概念上帮助我并指出正确的地址以便将 jaeger 和 elasticsearch 设置为后端存储,我将不胜感激。

【问题讨论】:

    标签: elasticsearch kubernetes google-cloud-platform devops jaeger


    【解决方案1】:

    当您从 同一命名空间 中的 pod 访问服务时,您可以只使用服务名称。 示例:

    http://elasticsearch:9200
    

    如果您从 不同命名空间 中的 pod 访问服务,您还应该指定命名空间。 示例:

    http://elasticsearch.mynamespace:9200
    http://elasticsearch.mynamespace.svc.cluster.local:9200
    

    要检查服务所在的命名空间,请使用以下命令:

    kubectl get svc --all-namespaces -o wide
    

    注意:更改 ConfigMap 不会立即将其应用于部署。通常,您需要重新启动部署中的所有 pod 以应用新的 ConfigMap 值。目前没有滚动重启功能,但您可以使用以下命令作为解决方法:
    (将部署名称和 pod 名称替换为真实名称)

    kubectl patch deployment mydeployment -p '{"spec":{"template":{"spec":{"containers":[{"name":"my-pod-name","env":[{"name":"START_TIME","value":"'$(date +%s)'"}]}]}}}}'
    

    【讨论】:

    • 您的回答非常有用,谢谢。如果我在 Kubernetes 集群之外有一个弹性端点怎么办。我在cloud.elastic.co 上创建了一个弹性实例,我的端点就是这个,在 9243 端口而不是 9200 下侦听
    • 在这种情况下,您可以使用 ExternalName 类型的服务来缩短外部链接。有关详细说明,请点击此链接:kubernetes.io/docs/concepts/services-networking/service/… 更多示例您可以在这里找到:cloud.google.com/blog/products/gcp/…
    • 重启 pod 进程由什么组成?你是为了这个目的引用我这个命令吗? kubectl patch deployment mydeployment -p '{"spec":{"template":{"spec":{"containers":[{"name":"my-pod-name","env":[{"name":"START_TIME","value":"'$(date +%s)'"}]}]}}}}' 我一直在阅读一些帖子博客并谈到这一点,但我还不清楚如何重新启动 pod,因为许多网站会根据它们的创建方式以及我删除一些 pod 时谈论它via kubectl ... GKE 立即创建其他具有相似特征的 pod。
    • 甚至建议转到 pod 内的特定容器并重新启动或终止 pod 内的进程容器,例如重新启动 ..stackoverflow.com/a/47799862/2773461 我对此很感兴趣。
    • 该命令启动部署的滚动更新(根据更新设置重新启动此部署的所有 pod),因为您更改了 pod 规范,即使您只更改了环境变量的值。日期用于确保每次运行命令时变量的值都会发生变化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2022-10-31
    • 2017-03-09
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 2020-01-28
    相关资源
    最近更新 更多