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

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 本文基于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。


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2月前
|
Kubernetes 监控 容器
Istio安装及Bookinfo环境部署
文章详细介绍了如何在Kubernetes集群上安装和配置Istio服务网格,并通过部署Bookinfo示例应用来演示Istio的核心功能,如流量管理、服务监控和故障注入等。
43 1
Istio安装及Bookinfo环境部署
|
3月前
|
Kubernetes 负载均衡 C++
Istio的部署模型介绍
Istio的部署模型介绍
43 1
|
5月前
|
Kubernetes 监控 负载均衡
Istio:微服务开发的终极利器,你还在为繁琐的通信和部署流程烦恼吗?
本文介绍了服务网格(Service Mesh)的概念及其在微服务架构中的重要性。微服务强调围绕业务构建团队和去中心化的数据管理,带来更高的灵活性和扩展性。然而,随着服务数量增加,网络通信成为挑战,包括服务发现、路由和安全等问题。 Service Mesh如Istio应运而生,通过边车代理解决服务间通信,提供服务发现、负载均衡、智能路由、安全和监控等功能。它与Kubernetes结合,增强了容器环境的服务管理能力。Istio的bookinfo示例展示了其在多语言微服务中的应用,简化了代码中的服务调用逻辑,使开发更专注于业务本身。
630 3
Istio:微服务开发的终极利器,你还在为繁琐的通信和部署流程烦恼吗?
|
Kubernetes 前端开发 Dubbo
Spring Boot+gRPC构建微服务并部署到Istio(详细教程)
Spring Boot+gRPC构建微服务并部署到Istio(详细教程)
|
SpringCloudAlibaba Kubernetes Java
Istio初体验:使用Spring Boot+gRPC构建微服务并部署
Istio初体验:使用Spring Boot+gRPC构建微服务并部署
602 0
|
Kubernetes Docker 微服务
Kubernetes 实战教学,手把手教您在 K8s 集群上部署 Istio Mesh(一)
Istio 是一个完全的开源服务网格,它可以对现有的分布式应用程序进行清晰的分层处理。近期,Istio v1.0版本已经正式上线。Istio 完全由 Go 语言编写,它是一个相当成熟的平台......
12142 0
|
监控 负载均衡 数据可视化
微服务治理 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目录。
462 0
从docker到istio之二 - 使用compose部署应用