Istio自带了三套可视化监控系统,分别是Kiali、Prometheus+Grafana、Jaeger。
Kiali:在Kiali中可以浏览网格中部署的应用程序,包括微服务调用架构、流量监控图,还可以通过图形化界面修改Istio资源的编排文件。
Prometheus+Grafana:由Prometheus采集监控数据,Grafana将监控数据展示成仪表盘。
Jaeger:链路监控工具,可以追踪微服务调用之间的链路状态。
如果不单独从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
调整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.先创建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
浏览器访问任意集群节点的地址+kiali服务200001端口映射的NodePort端口:http://192.168.20.10:30547/
无需账号密码即可登陆,但是不安全。
点击左侧的Overview即可跳转到kiali的仪表盘页面,在这里可以看到K8S集群中所有的Namespace列表。
如果出现了警告或者错误的提示,就表示命名空间下某个程序的资源编排文件写的有问题,根据提示按钮进入YAML的编辑页面,会显示出那些YAML有问题,删除或者修改即可。
kiali还支持观察微服务程序的架构图,包括程序访问的架构图、service资源的架构图、多版本类型的架构图、工作负载的架构图。
点击Graph进入图形浏览页面—>选择微服务所在的命名空间---->选择要查看的信息可以全部勾选—>选择查看的图形类型。
1)用户访问微服务程序的架构图
图形类型选择App graph,可以清晰的看到从istio的ingressgateway到具体微服务的架构图,请求首先达到productpage然后由productpage调用details微服务,再调用reviews微服务,reviews微服务会调用ratings微服务。
2)Service资源的架构图
kiali支持显示微服务程序Service资源调用关系的架构图,图形类型选择Service graph。
3)微服务程序多版本的架构图
kiali支持显示微服务程序多个版本的架构图,图形类型选择Versioned app graph。
4)微服务程序工作负载的架构图
kiali可以展示各个微服务使用的deployment工作负载资源的架构图,类型选择Workload graph。
1)点击左侧的Applications,选择命名空间。
2)点击名称可跳转至详情页面。
1)点击左侧的Workloads,选择命名空间,即可显示这个命名空间下的所有Deployment控制器资源。
2)点击名称即可跳转到详情页面,也可以看到Deployment资源关联的Pod资源。
3)点击logs还可以观察某个Pod的日志。
4)在Inbound Metrics页面可以观察程序的流量监控图。
1)点击左侧的Services,然后选择命名空间。
2)点击名称可以跳转至详情页面,并且可以看到Service资源关联的Deployment资源。
Istio的流量管理需要通过配置VirtualService资源才可以实现,kiali可视化平台支持修改Istio各种资源的编排文件,保存后立即生效,方便我们修改各个资源的编排文件。
1)点击左侧的Istio Config,选择资源所在的Namespace,然后选择要修改的资源类型,选择后会匹配出符合类的资源。
2)点击资源的名称会跳转至编辑页面,修改完成后点击保存即可。
浏览器访问:http://192.168.20.10:30142/
Grafana中集成了很多Istio的监控视图,方便我们浏览监控数据
• Istio Control Plane Dashboard:控制面板仪表盘
• Istio Mesh Dashboard:网格仪表盘,查看应用(服务)数据
• Istio Performance Dashboard:查看Istio 自身(各组件)数据
• Istio Service Dashboard:服务仪表盘
• Istio Workload Dashboard:工作负载仪表盘
• Istio Wasm Extension Dashboard
其中最主要的就是Istio Mesh Dashboard这张监控视图,这张图中包含了微服务的流量监控图
点击Istio Mesh Dashboard仪表盘,可以看到不同微服务程序的流量监控视图。
Istio Control Plane Dashboard仪表盘的主要展示资源利用率以及代理程序的连接信息监控图。
Istio Service Dashboard这张监控图可以展示出各个程序Service资源的详细信息。
Istio Workload Dashboard这张图可以展示出Deployment资源的详细视图。
Jaeger是Uber开源的分布式追踪系统,用于微服务的监控和全链路追踪。
浏览器访问:http://192.168.20.10:30821/jaeger/search
在Service中选择要链路跟踪的服务,这里我们选择istio-ingressgateway,然后点击Find Traces开始链路跟踪,在右侧会显示出该服务下有哪些程序有链路跟踪信息。
点击某个服务即可跳转到链路跟踪页面,点击流量条可以展开显示详细信息。