# 在Mac上安装Istio并使用,有丰富的监控Kiali、Grafana、Jaeger
# 1 简介
之前在文章《服务网格Istio入门-详细记录Kubernetes安装Istio并使用 (opens new window)》已经详细地介绍了如何在Linux系统上在Kubernetes安装并使用Istio,但毕竟服务器是要钱的,几毛钱一小时,是我格局小了,但我还是想在Mac上安装使用。
# 2 安装Istio
我的电脑已经安装了Kubernetes了,可以参考《Mac上使用Docker Desktop启动Kubernetes,踩坑后终于搞掂 (opens new window)》,现在直接安装Istio。
下载对应的安装包:
$ curl -L https://istio.io/downloadIstio | sh -
目录如下:
把bin目录下的istioctl添加到PATH。
$ export ISTIO_HOME=/Users/larry/Software/istio/istio-1.10.3
$ export PATH=$PATH:$ISTIO_HOME/bin
检测是否可以执行安装:
$ istioctl x precheck
✔ No issues found when checking the cluster. Istio is safe to install or upgrade!
没有问题,就可以开始安装了:
$ istioctl install
因为要下载镜像,所以需要花一点时间,成功安装如下:
可以做一些简单的检查:
# 检查istio-system命令空间下的Pod
$ kubectl get pod -n istio-system
# 检查资源
$ kubectl api-resources | grep istio
结果如下:
# 3 使用istio
# 3.1 注入代理
Istio默认不会给其它Pod注入代理,需要给Namespace添加对应的标签才可以:
$ kubectl label namespace default istio-injection=enabled
但对于现有的Pod,也还是不会注入的,没关系,我们来使用官方提供的示例,新创建一些资源:
$ kubectl apply -f istio-1.10.3/samples/bookinfo/platform/kube/bookinfo.yaml
因为是第一次启动,要下载镜像,所以要花比较长的时间,如下面命令观察:
$ watch 'kubectl get pod -l app -l version'
几分钟后,终于搞定:
可以看到每个Pod都有两个Container,一个是应用的,一个是代理的。
# 3.2 安装监控插件
为了更好地可视化地监控应用,我们来安装一些插件:
$ kubectl apply -f istio-1.10.3/samples/addons
同样的等待:
$ watch 'kubectl get pod -n istio-system'
大概5分钟左右,成功启动了:
可以看到许多很常见的监控软件:Grafana、Prometheus等。
# 3.3 在外部访问资源
Istio给我们提供了Gateway的功能,我们给应用创建一个Gateway对外暴露服务:
$ kubectl apply -f istio-1.10.3/samples/bookinfo/networking/bookinfo-gateway.yaml
gateway.networking.istio.io/bookinfo-gateway created
virtualservice.networking.istio.io/bookinfo created
$ kubectl get gateway
NAME AGE
bookinfo-gateway 17s
$ kubectl get virtualservices.networking.istio.io
NAME GATEWAYS HOSTS AGE
bookinfo ["bookinfo-gateway"] ["*"] 29s
因为我很早之前就安装了Ingress Controller(Kubernetes用Helm安装Ingress并踩一下使用的坑 (opens new window)),为了防止冲突,把原来的给删掉:
# 安装命令,不执行
# helm install azure-ingress azure/nginx-ingress
# 删除Ingress Controller
helm delete azure-ingress
然后就可以正常访问应用了:http://localhost/productpage
我们可以多点击几次,多刷新几次,可以多产生一些流量,以便后续查看监控。
# 3.4 查看监控
同样,我们也需要在外部访问监控的内容,访问kiali如下,会直接帮我们打开浏览器:
$ istioctl dashboard kiali
http://localhost:20001/kiali
可以查看完整清晰的流量走向图,知道有什么组件,它们之间的调用关系是怎样的:
查看特定的组件productpage,会以它为中心显示与它直接关联的应用和关系:
当然,也可以查看Grafana:
$ istioctl dashboard grafana
界面如下:
查看Jaeger:
$ istioctl dashboard jaeger
界面如下:
查看Prometheus:
$ istioctl dashboard prometheus
界面如下:
# 总结
Istio给我们提供了很多有用的特性,光监控方面就非常丰富,更多细节我们后续再讨论吧。
Reference:
Istio Getting Started (opens new window)
Docker和Kubernetes常用命令(持续整理) (opens new window)