1 Istio监控功能
1.1 prometheus和grafana
- Prometheus存储服务的监控数据,数据来自于istio组件mixer上报
- Grafana开源数据可视化工具,展示Prometheus收集到的监控数据
istio已经默认帮我们把grafana和prometheus已经默认部署好了
(1)执行命令查看istio自带的组件
kubectl get pods -n istio-ns
我们打开istio-demo.yaml文件找到找到prometheus和grafana
其实istio已经默认帮我们安装好了grafana和prometheus,只是对应的Service类型是clusterIP类型,表示集群内部可以访问,如果我们需要能够通过浏览器访问,我们只需要ingress访问规则即可,ingress之前已经介绍过了,这边就不在重复了
配置prometheus-ingress.yaml和grafana-ingress.yaml配置文件
prometheus-ingress.yaml
#ingress apiVersion: extensions/v1beta1 kind: Ingress metadata: name: prometheus-ingress namespace: istio-system spec: rules: - host: prometheus.istio.qy.com http: paths: - path: / backend: serviceName: prometheus servicePort: 9090
- 执行命令
kubectl apply -f prometheus-ingress.yaml和grafana-ingress.yaml
grafana-ingress.yaml
#ingress apiVersion: extensions/v1beta1 kind: Ingress metadata: name: grafana-ingress namespace: istio-system spec: rules: - host: grafana.istio.qy.com http: paths: - path: / backend: serviceName: grafana servicePort: 3000 ~
- 执行命令
kubectl get ingress -n istio-system
配置prometheus访问域名
在hosts文件里面增加ip域名的映射关系
192.168.187.137 prometheus.istio.qy.com
配置grafana访问域名
在hosts文件里面增加ip域名的映射关系
192.168.187.137 grafana.istio.qy.com
1.2 访问prometheus
浏览器输入地址:prometheus.istio.qy.com
1.3 访问grafana
- 设置prometheus地址
找到prometheus在k8s里面服务地址
命令
kubectl get svc -o wide -n istio-system
选择DataSources
选择settings ,把url改成prometheus即可
2 项目案例:bookinfo
2.1 理解什么是bookinfo
这是istio官方给我们提供的案例,Bookinfo 应用中的几个微服务是由不同的语言编写的。 这些服务对 Istio 并无依赖,但是构成了一个有代表性的服务网格的例子:它由多个服务、多个语言构成,并且 `reviews` 服务具有多个版本。
下图展示了这个应用的端到端架构。
这个案例部署了一个用于演示Istio 特性的应用,该应用由四个单独的微服务构成。 这个应用模仿在线书店的一个分类,显示一本书的信息。 页面上会显示一本书的描述,书籍的细节(ISBN、页数等),以及关于这本书的一些评论。
Bookinfo 应用分为四个单独的微服务:
productpage. 这个微服务会调用 details 和 reviews 两个微服务,用来生成页面。
details. 这个微服务中包含了书籍的信息。
reviews. 这个微服务中包含了书籍相关的评论。它还会调用 ratings 微服务。
ratings. 这个微服务中包含了由书籍评价组成的评级信息。
reviews 微服务有 3 个版本:
v1 版本不会调用 ratings 服务。
v2 版本会调用 ratings 服务,并使用 1 到 4个黑色星形图标来显示评分信息。
v3 版本会调用 ratings 服务,并使用 1 到 4个红色星形图标来显示评分信息。
大家一定要从spring cloud思维模式里面跳出来,站着服务网格的立场上思考问题,我们是不需要了解服务的业务代码是什么样的,业务的服务只需要交给istio管理即可
所以大家一定要有一颗拥抱变化的心
2.2 sidecar自动注入到微服务
所以第一步我们需要给每一个服务配置一个Sidecar,但是配置sidecar我们前面也说过,可以有两种方式实现,一种是手动注入,一种是自动注入,如果自动注入需要与命名空间相关,需要准备一个命名空间
- 查看命名空间:
kubectl get ns
这个时候我们需要创建一个命名空间,需要打上一个lable表示只要是在这个lable的命名空间里面的都自动注入
- 创建命名空间命令:
kubectl create namespace bookinfo-ns
- 给命名空间加上label命令
kubectl label namespace bookinfo-ns istio-injection=enabled
- 查看命名空间下有哪些label命
kubectl get ns bookinfo-ns --show-labels