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

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行

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    <none>        3000:30142/TCP                                                               94m
service/istio-ingressgateway   LoadBalancer   10.107.107.206   <pending>     15021:32381/TCP,80:31105/TCP,443:30793/TCP,15012:32259/TCP,15443:31377/TCP   11d
service/istiod                 ClusterIP      10.109.130.252   <none>        15010/TCP,15012/TCP,443/TCP,15014/TCP                                        11d
service/jaeger-collector       ClusterIP      10.106.34.192    <none>        14268/TCP,14250/TCP                                                          94m
service/kiali                  NodePort       10.101.98.199    <none>        20001:30547/TCP,9090:32333/TCP                                               94m
service/prometheus             NodePort       10.107.48.95     <none>        9090:32085/TCP                                                               94m
service/tracing                NodePort       10.106.52.229    <none>        80:30821/TCP                                                                 94m
service/zipkin                 ClusterIP      10.99.241.79     <none>        9411/TCP                                                                     94m

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

猜你喜欢

转载自blog.csdn.net/weixin_44953658/article/details/126027599