• Istio微服务治理网格的全方面可视化监控(微服务架构展示、资源监控、流量监控、链路监控)


    Istio服务网格的可视化监控系统

    1.Istio服务网格的可视化系统

    Istio自带了三套可视化监控系统,分别是Kiali、Prometheus+Grafana、Jaeger。

    Kiali:在Kiali中可以浏览网格中部署的应用程序,包括微服务调用架构、流量监控图,还可以通过图形化界面修改Istio资源的编排文件。

    Prometheus+Grafana:由Prometheus采集监控数据,Grafana将监控数据展示成仪表盘。

    Jaeger:链路监控工具,可以追踪微服务调用之间的链路状态。

    2.在K8S集群中部署Istio自带的可视化系统

    2.1.将Kiali服务的CRD资源单独分离

    如果不单独从kiali.yaml文件中拿出来的话,会影响kiali服务的创建。

    1.进入编排文件所在的路径
    [root@k8s-master ~]# cd istio-1.8.2/samples/addons/
    [root@k8s-master addons]# ll
    总用量 304
    drwxr-xr-x 2 root root     57 1月  13 2021 extras
    -rw-r--r-- 1 root root 240054 1月  13 2021 grafana.yaml
    -rw-r--r-- 1 root root   2317 1月  13 2021 jaeger.yaml
    -rw-r--r-- 1 root root    397 2月  22 14:09 kiali-crb.yaml
    -rw-r--r-- 1 root root  35097 2月  22 15:13 kiali.yaml
    -rw-r--r-- 1 root root  13250 1月  13 2021 prometheus.yaml
    -rw-r--r-- 1 root root   5186 1月  13 2021 README.md
    
    2.将kiali资源编排文件中的crb资源放到单独的文件中
    #如果不单独拿出来会影响创建,直接从kiali.yaml中粘贴出来即可
    [root@k8s-master addons]# cat kiali-crd.yaml 
    apiVersion: apiextensions.k8s.io/v1beta1
    kind: CustomResourceDefinition
    metadata:
      name: monitoringdashboards.monitoring.kiali.io
    spec:
      group: monitoring.kiali.io
      names:
        kind: MonitoringDashboard
        listKind: MonitoringDashboardList
        plural: monitoringdashboards
        singular: monitoringdashboard
      scope: Namespaced
      versions:
      - name: v1alpha1
        served: true
        storage: true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    2.2.调整资源编排文件使用NodePort的方式

    调整kiali、prometheus、jaeger的service资源编排文件,使用nodeport的方式映射服务。

    1.kiali服务
    [root@k8s-master addons]# vim kiali.yaml 
    apiVersion: v1
    kind: Service
    metadata:
      name: kiali
    ···
      selector:
        app.kubernetes.io/name: kiali
        app.kubernetes.io/instance: kiali-server
      type: NodePort				#在357行增加此参数
      
    2.prometheus服务
    [root@k8s-master addons]# vim prometheus.yaml 
      type: NodePort			#在377行修改
    
    3.grafana服务
    [root@k8s-master addons]# vim grafana.yaml 
      type: NodePort		#94行增加
    
    4.jaeger服务
    [root@k8s-master addons]# vim jaeger.yaml 
    apiVersion: v1
    kind: Service
    metadata:
      name: tracing
      namespace: istio-system
      labels:
        app: jaeger
    spec:
      ports:
        - name: http-query
          port: 80
          protocol: TCP
          targetPort: 16686
      selector:
        app: jaeger
      type: NodePort		#72行
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    2.3.创建所有资源控制器

    1.先创建crd字资源
    [root@k8s-master addons]# kubectl apply -f kiali-crd.yaml -n istio-system
    customresourcedefinition.apiextensions.k8s.io/monitoringdashboards.monitoring.kiali.io created
    
    2.然后再创建其他资源控制器
    [root@k8s-master addons]# kubectl apply -f . -n istio-system
    serviceaccount/grafana created
    configmap/grafana created
    service/grafana created
    deployment.apps/grafana created
    configmap/istio-grafana-dashboards created
    configmap/istio-services-grafana-dashboards created
    deployment.apps/jaeger created
    service/tracing created
    service/zipkin created
    service/jaeger-collector created
    customresourcedefinition.apiextensions.k8s.io/monitoringdashboards.monitoring.kiali.io unchanged
    customresourcedefinition.apiextensions.k8s.io/monitoringdashboards.monitoring.kiali.io unchanged
    serviceaccount/kiali created
    configmap/kiali created
    clusterrole.rbac.authorization.k8s.io/kiali-viewer created
    clusterrole.rbac.authorization.k8s.io/kiali created
    clusterrolebinding.rbac.authorization.k8s.io/kiali created
    service/kiali created
    deployment.apps/kiali created
    monitoringdashboard.monitoring.kiali.io/envoy created
    monitoringdashboard.monitoring.kiali.io/go created
    monitoringdashboard.monitoring.kiali.io/kiali created
    monitoringdashboard.monitoring.kiali.io/micrometer-1.0.6-jvm-pool created
    monitoringdashboard.monitoring.kiali.io/micrometer-1.0.6-jvm created
    monitoringdashboard.monitoring.kiali.io/micrometer-1.1-jvm created
    monitoringdashboard.monitoring.kiali.io/microprofile-1.1 created
    monitoringdashboard.monitoring.kiali.io/microprofile-x.y created
    monitoringdashboard.monitoring.kiali.io/nodejs created
    monitoringdashboard.monitoring.kiali.io/quarkus created
    monitoringdashboard.monitoring.kiali.io/springboot-jvm-pool created
    monitoringdashboard.monitoring.kiali.io/springboot-jvm created
    monitoringdashboard.monitoring.kiali.io/springboot-tomcat created
    monitoringdashboard.monitoring.kiali.io/thorntail created
    monitoringdashboard.monitoring.kiali.io/tomcat created
    monitoringdashboard.monitoring.kiali.io/vertx-client created
    monitoringdashboard.monitoring.kiali.io/vertx-eventbus created
    monitoringdashboard.monitoring.kiali.io/vertx-jvm created
    monitoringdashboard.monitoring.kiali.io/vertx-pool created
    monitoringdashboard.monitoring.kiali.io/vertx-server created
    serviceaccount/prometheus created
    configmap/prometheus created
    clusterrole.rbac.authorization.k8s.io/prometheus created
    clusterrolebinding.rbac.authorization.k8s.io/prometheus created
    service/prometheus created
    deployment.apps/prometheus created
    
    3.查看创建的资源
    [root@k8s-master addons]# kubectl get pod,svc -n istio-system
    NAME                                        READY   STATUS    RESTARTS   AGE
    pod/grafana-784c89f4cf-dnjlj                1/1     Running   0          82s
    pod/istio-ingressgateway-559f565fcd-jxn5b   1/1     Running   1          11d
    pod/istiod-545bb98448-vqf84                 1/1     Running   0          11d
    pod/jaeger-7f78b6fb65-89gwt                 1/1     Running   0          81s
    pod/kiali-7476977cf9-mrw2g                  1/1     Running   0          79s
    pod/prometheus-7bfddb8dbf-jp7qr             2/2     Running   0          76s
    
    NAME                           TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                                                                      AGE
    service/grafana                NodePort       10.96.240.149            3000:30142/TCP                                                               94m
    service/istio-ingressgateway   LoadBalancer   10.107.107.206        15021:32381/TCP,80:31105/TCP,443:30793/TCP,15012:32259/TCP,15443:31377/TCP   11d
    service/istiod                 ClusterIP      10.109.130.252           15010/TCP,15012/TCP,443/TCP,15014/TCP                                        11d
    service/jaeger-collector       ClusterIP      10.106.34.192            14268/TCP,14250/TCP                                                          94m
    service/kiali                  NodePort       10.101.98.199            20001:30547/TCP,9090:32333/TCP                                               94m
    service/prometheus             NodePort       10.107.48.95             9090:32085/TCP                                                               94m
    service/tracing                NodePort       10.106.52.229            80:30821/TCP                                                                 94m
    service/zipkin                 ClusterIP      10.99.241.79             9411/TCP                                                                     94m
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71

    3.Kiali可视化系统简单使用

    浏览器访问任意集群节点的地址+kiali服务200001端口映射的NodePort端口:http://192.168.20.10:30547/

    无需账号密码即可登陆,但是不安全。

    3.1.Kiali仪表盘概览

    点击左侧的Overview即可跳转到kiali的仪表盘页面,在这里可以看到K8S集群中所有的Namespace列表。

    如果出现了警告或者错误的提示,就表示命名空间下某个程序的资源编排文件写的有问题,根据提示按钮进入YAML的编辑页面,会显示出那些YAML有问题,删除或者修改即可。

    image-20220222154205377

    3.2.浏览微服务的架构图

    kiali还支持观察微服务程序的架构图,包括程序访问的架构图、service资源的架构图、多版本类型的架构图、工作负载的架构图。

    点击Graph进入图形浏览页面—>选择微服务所在的命名空间---->选择要查看的信息可以全部勾选—>选择查看的图形类型。

    1)用户访问微服务程序的架构图

    图形类型选择App graph,可以清晰的看到从istio的ingressgateway到具体微服务的架构图,请求首先达到productpage然后由productpage调用details微服务,再调用reviews微服务,reviews微服务会调用ratings微服务。

    image-20220222154908281

    2)Service资源的架构图

    kiali支持显示微服务程序Service资源调用关系的架构图,图形类型选择Service graph。

    image-20220222155420545

    3)微服务程序多版本的架构图

    kiali支持显示微服务程序多个版本的架构图,图形类型选择Versioned app graph。

    image-20220222155707656

    4)微服务程序工作负载的架构图

    kiali可以展示各个微服务使用的deployment工作负载资源的架构图,类型选择Workload graph。

    image-20220222155940673

    3.3.查看某个命名空间下的程序列表

    1)点击左侧的Applications,选择命名空间。

    image-20220222160554490

    2)点击名称可跳转至详情页面。

    image-20220222161326681

    3.4.查看某个命名空间下的工作负载

    1)点击左侧的Workloads,选择命名空间,即可显示这个命名空间下的所有Deployment控制器资源。

    image-20220222160835804

    2)点击名称即可跳转到详情页面,也可以看到Deployment资源关联的Pod资源。

    image-20220222160944203

    3)点击logs还可以观察某个Pod的日志。

    image-20220222161046157

    4)在Inbound Metrics页面可以观察程序的流量监控图。

    image-20220222161224906

    3.5.查看某个命名空间下的Service资源

    1)点击左侧的Services,然后选择命名空间。

    image-20220222161411058

    2)点击名称可以跳转至详情页面,并且可以看到Service资源关联的Deployment资源。

    image-20220222161502462

    3.6.修改某个资源的编排文件

    Istio的流量管理需要通过配置VirtualService资源才可以实现,kiali可视化平台支持修改Istio各种资源的编排文件,保存后立即生效,方便我们修改各个资源的编排文件。

    1)点击左侧的Istio Config,选择资源所在的Namespace,然后选择要修改的资源类型,选择后会匹配出符合类的资源。

    image-20220222161745782

    2)点击资源的名称会跳转至编辑页面,修改完成后点击保存即可。

    image-20220222162048553

    4.通过Prometheus查看Itsio的监控视图

    浏览器访问:http://192.168.20.10:30142/

    4.1.在Grafana中查看Istio的监控视图

    Grafana中集成了很多Istio的监控视图,方便我们浏览监控数据

    image-20220222163317494

    • Istio Control Plane Dashboard:控制面板仪表盘

    • Istio Mesh Dashboard:网格仪表盘,查看应用(服务)数据

    • Istio Performance Dashboard:查看Istio 自身(各组件)数据

    • Istio Service Dashboard:服务仪表盘

    • Istio Workload Dashboard:工作负载仪表盘

    • Istio Wasm Extension Dashboard

    其中最主要的就是Istio Mesh Dashboard这张监控视图,这张图中包含了微服务的流量监控图

    4.2.查看微服务的流量监控仪表盘

    点击Istio Mesh Dashboard仪表盘,可以看到不同微服务程序的流量监控视图。

    image-20220222163704442

    4.3.查看微服务的资源利用率

    Istio Control Plane Dashboard仪表盘的主要展示资源利用率以及代理程序的连接信息监控图。

    image-20220222163914582

    4.4.查看Istio中各个应用程序的展示大屏

    Istio Service Dashboard这张监控图可以展示出各个程序Service资源的详细信息。

    image-20220222164110418

    Istio Workload Dashboard这张图可以展示出Deployment资源的详细视图。

    image-20220222164221762

    5.使用Jaeger查看微服务之间的链路监控

    Jaeger是Uber开源的分布式追踪系统,用于微服务的监控和全链路追踪。

    浏览器访问:http://192.168.20.10:30821/jaeger/search

    5.1.观察微服务的链路状态

    在Service中选择要链路跟踪的服务,这里我们选择istio-ingressgateway,然后点击Find Traces开始链路跟踪,在右侧会显示出该服务下有哪些程序有链路跟踪信息。

    image-20220222171204653

    点击某个服务即可跳转到链路跟踪页面,点击流量条可以展开显示详细信息。

    image-20220222171438217

  • 相关阅读:
    4S店提车注意事项
    TDengine数据迁移之数据对比
    Web前端:一些优化React Native应用程序性能的有用技巧
    springboot各个文件夹是干嘛的
    linux安全加固
    jenkins配置maven+git自动构建jar包
    电脑重装系统后序列号怎么查
    Redis
    SpringBoot死信队列、延迟队列
    Docker镜像的导入导出
  • 原文地址:https://blog.csdn.net/weixin_44953658/article/details/126027599