在istio中部署非all-in-one的jaeger

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 本文基于istion 1.0.4版本,并且置tracing.enable=true的情况下部署istio环境。 然后去部署非all-in-one的jaeger,jaeger版本为1.7,使用elasticsearch作为存储。

在istion中集成了all-in-one的jaeger(pod:istion-tracing-xxxxx, service:tracing)。同时istion中也部署了jaeger-agent, jaeger-collector, jaeger-query这三个service.

部署非all-in-one的jaeger之前,先修改istion-tracing deployment中的replicas为0,以便删除目前部署好的all-in-one的pod。

然后开始部署jaeger:

         1. 部署configmap:

#
# Copyright 2017-2018 The Jaeger Authors
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
# in compliance with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software distributed under the License
# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
# or implied. See the License for the specific language governing permissions and limitations under
# the License.
#

apiVersion: v1
kind: ConfigMap
metadata:
  name: jaeger-configuration
  namespace: kube-system
  labels:
    app: jaeger
    jaeger-infra: configuration
data:
  span-storage-type: elasticsearch
  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
        2. elasticsearch

        非all-in-one的jaeger使用elasticsearch作为存储。

        部署elasticsearch statefulset:

  apiVersion: apps/v1beta1
  kind: StatefulSet
  metadata:
    name: elasticsearch
    namespace: kube-system
    labels:
      app: jaeger
      jaeger-infra: elasticsearch-statefulset
  spec:
    serviceName: elasticsearch
    replicas: 1
    template:
      metadata:
        labels:
          app: jaeger-elasticsearch
          jaeger-infra: elasticsearch-replica
      spec:
        containers:
          - name: elasticsearch
            image: docker.elastic.co/elasticsearch/elasticsearch:5.6.0
            imagePullPolicy: Always
            command:
              - bin/elasticsearch
            args:
              - "-Ehttp.host=0.0.0.0"
              - "-Etransport.host=127.0.0.1"
            volumeMounts:
              - name: data
                mountPath: /data
            readinessProbe:
              exec:
                command:
                - curl
                - --fail
                - --silent
                - --output
                - /dev/null
                - --user
                - elastic:changeme
                - localhost:9200
              initialDelaySeconds: 5
              periodSeconds: 5
              timeoutSeconds: 4
        volumes:
          - name: data
            emptyDir: {}
       部署elasticsearch service:
  apiVersion: v1
  kind: Service
  metadata:
    name: elasticsearch
    namespace: kube-system
    labels:
      app: jaeger
      jaeger-infra: elasticsearch-service
  spec:
    clusterIP: None
    selector:
      app: jaeger-elasticsearch
    ports:
    - port: 9200
      name: elasticsearch
    - port: 9300
      name: transport

        3. jaeger-agent
        部署deployment
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: istio-tracing-agent
  namespace: kube-system
  labels:
    app: istio-tracing-agent
    chart: tracing-agent-0.1.0
    release: istio
    heritage: Tiller
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: istio-tracing-agent
      annotations:
        sidecar.istio.io/inject: "false"
        scheduler.alpha.kubernetes.io/critical-pod: ""
    spec:
      containers:
        - name: jaeger-agent
          image: jaegertracing/jaeger-agent:latest
          ports:
            - containerPort: 5778
              protocol: TCP
            - containerPort: 5775
              protocol: UDP
            - containerPort: 6831
              protocol: UDP
            - containerPort: 6832
              protocol: UDP
          command:
            - "/go/bin/agent-linux"
            - "--collector.host-port=jaeger-collector.kube-system.svc.cluster.local:14267"

           修改jaeger-agent service中的selector值为 app: istio-tracing-agent

          4.jaeger-collector

           部署jaeger-collector deployment:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: istio-tracing-collector
  namespace: kube-system
  labels:
    app: istio-tracing-collector
    chart: tracing-collector-0.1.0
    release: istio
    heritage: Tiller
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: istio-tracing-collector
      annotations:
        sidecar.istio.io/inject: "false"
        scheduler.alpha.kubernetes.io/critical-pod: ""
    spec:
      containers:
      - image: jaegertracing/jaeger-collector:latest
        name: jaeger-collector
        args: ["--config-file=/conf/collector.yaml"]
        ports:
        - containerPort: 14267
          protocol: TCP
        - containerPort: 14268
          protocol: TCP
        - containerPort: 9411
          protocol: TCP
        readinessProbe:
          httpGet:
            path: "/"
            port: 14269
        volumeMounts:
        - name: jaeger-configuration-volume
          mountPath: /conf
        env:
        - name: SPAN_STORAGE_TYPE
          valueFrom:
            configMapKeyRef:
              name: jaeger-configuration
              key: span-storage-type
      volumes:
        - configMap:
            name: jaeger-configuration
            items:
              - key: collector
                path: collector.yaml
          name: jaeger-configuration-volume
        修改jaeger-collector service中的selector值为 app: istio-tracing-collector

        5. jaeger-query

           部署jaeger-query deployment:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: istio-tracing-query
  namespace: kube-system
  labels:
    app: istio-tracing-query
    chart: tracing-query-0.1.0
    release: istio
    heritage: Tiller
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: istio-tracing-query
      annotations:
        sidecar.istio.io/inject: "false"
        scheduler.alpha.kubernetes.io/critical-pod: ""
    spec:
      containers:
      - image: jaegertracing/jaeger-query:latest
        name: jaeger-query
        args: ["--config-file=/conf/query.yaml"]
        ports:
        - containerPort: 16686
          protocol: TCP
        readinessProbe:
          httpGet:
            path: "/"
            port: 16687
        volumeMounts:
        - name: jaeger-configuration-volume
          mountPath: /conf
        env:
        - name: SPAN_STORAGE_TYPE
          valueFrom:
            configMapKeyRef:
              name: jaeger-configuration
              key: span-storage-type
      volumes:
        - configMap:
            name: jaeger-configuration
            items:
              - key: query
                path: query.yaml
          name: jaeger-configuration-volume
          修改jaeger-query service中的selector值为 app: istio-tracing-query

   

          由于istio中的all-in-one jaeger集成了spark-dependencies, 因此 部署非all-in-one的jaeger 需要手动再部署spark-dependencies. 

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: jaeger-spark-dependencies-cronjob
spec:
  schedule: "*/10 * * * *"
  successfulJobsHistoryLimit: 1
  failedJobsHistoryLimit: 2
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: jaeger-spark-dependencies-cronjob
            image: jaegertracing/spark-dependencies:latest
            env:
              - name: STORAGE
                value: elasticsearch
              - name: ES_NODES
                value: elasticsearch:9200
              - name: ES_USERNAME
                value: elastic
              - name: ES_PASSWORD
                value: changeme
          restartPolicy: Never

 

        如果istio中使用了virtalservices, 并且暴露了jaeger-query至公共的URL。 则需要修改virtalservices的配置。

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: mgmt-api-vs-dev
  namespace: dev
spec:
  hosts:
  - jqeger-query.xxx.xxxx
  gateways:
  - istio-autogenerated-k8s-ingress
  http:
  - match:
    route:
    - destination:
        host: jaeger-query
        port:
          number: 443
      weight: 100
         需要注意的是route下的host的值为jaeger-service的name。


相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
10月前
|
SpringCloudAlibaba Kubernetes Java
Istio初体验:使用Spring Boot+gRPC构建微服务并部署
Istio初体验:使用Spring Boot+gRPC构建微服务并部署
447 0
|
Kubernetes 前端开发 Dubbo
Spring Boot+gRPC构建微服务并部署到Istio(详细教程)
Spring Boot+gRPC构建微服务并部署到Istio(详细教程)
|
监控 负载均衡 数据可视化
微服务治理 Istio 1.6部署和应用(下)
微服务治理 Istio 1.6部署和应用
微服务治理 Istio 1.6部署和应用(下)
|
自然语言处理 Kubernetes 负载均衡
微服务治理 Istio 1.6部署和应用(上)
微服务治理 Istio 1.6部署和应用
微服务治理 Istio 1.6部署和应用(上)
|
Kubernetes 监控 安全
基于阿里云 ASK 的 Istio 微服务应用部署初探
本文会通过在 ASK 上试用 Istio 部署微服务应用的方式,来验证 ASK 对标准 Kubernetes 的兼容性。Istio 作为 Service Mesh(服务网格)的领导解决方案,一方面本身足够复杂具有代表性,另一方面它也代表了云原生时代微服务架构的趋势具有参考意义。
基于阿里云 ASK 的 Istio 微服务应用部署初探
|
Kubernetes Cloud Native NoSQL
从docker到istio之二 - 使用compose部署应用
这是第二篇,使用compose部署应用,同样演示都在docker2istio目录。
348 0
从docker到istio之二 - 使用compose部署应用
|
Kubernetes Docker 微服务
Kubernetes 实战教学,手把手教您在 K8s 集群上部署 Istio Mesh(一)
Istio 是一个完全的开源服务网格,它可以对现有的分布式应用程序进行清晰的分层处理。近期,Istio v1.0版本已经正式上线。Istio 完全由 Go 语言编写,它是一个相当成熟的平台......
11994 0
|
Prometheus Kubernetes 负载均衡
如何使用 Istio 进行多集群部署管理:多控制平面
本文摘自于阿里云高级技术专家王夕宁撰写的《Istio 服务网格技术解析与实战》一书,讲述了如何使用 Istio 进行多集群部署管理来阐述服务网格对多云环境、多集群即混合部署的支持能力。
如何使用 Istio 进行多集群部署管理:多控制平面
|
Kubernetes 负载均衡 Cloud Native
如何使用 Istio 进行多集群部署管理:多控制平面
本文摘自于阿里云高级技术专家王夕宁撰写的《Istio 服务网格技术解析与实战》一书,讲述了如何使用 Istio 进行多集群部署管理来阐述服务网格对多云环境、多集群即混合部署的支持能力。
如何使用 Istio 进行多集群部署管理:多控制平面
Istio 在阿里云容器服务的部署及流量治理实践
在阿里云容器服务 Kubernetes 集群上部署 Istio 服务网格;实践灰度发布、故障注入、熔断等 Istio 流量管理特性
27224 0