为了账号安全,请及时绑定邮箱和手机立即绑定

Docker for mac 安装 Istio

标签:
Docker

Service Mesh 在过去的一年的迅猛发展,各大厂商都在投入精力开发适合自己的产品。而对于小厂来说虽不能自己开发,但选择也有很多,LinkerdEnvoyIstioConduit (Linkerd 2.0),甚至是 Consul 都在开发 Service Mesh。当中 Istio 因为出身名门和优秀的设计在众星之中脱颖而出,社区纷纷站队表示支持,尤其是发布 1.0 版本以后,更是引来众多关注。

Istio 虽然可以脱离 Kubernetes 运行,但从官方投入的精力和社区上的资料,都是基于 Kubernetes,如果不想采坑,还是老老实实的折腾 Kubernetes 吧。蚂蚁金服的 Jimmy song 创建了一个 kubernetes-vagrant-centos-cluster 项目,可以帮助我们很容易的启动 Kubernetes 集群。唯一不足是启动时会比较耗资源,而 Docker 的新版本也同样支持了 Kubernetes,于是便有了这篇文章。

安装 Kubernetes

在 Docker 18.06.0 的增加对 Kubernetes 的正式支持(在之前的版本也有支持,只是非正式版本)

webp

docker支持kubernetes

这里调整了 docker 的内存为 4GB,之前默认 2GB 运行 Kubernetes 感觉会很吃力(当部署完Istio 这一套发现 4 GB也很吃紧,改成 7GB 后电脑才不那么热...)。

webp

调整内存设置

找到 Kubernetes 选项,勾选 Enable 选择 Kubernetes,然后执行 Apply

webp

开启kubernetes

webp

启动中...

我们会看到 Kubernetes 一直在 starting... ,此时 docker 正在下载镜像,殊不知在遥远的东方有一堵“墙”,下载需要的镜像越过墙才可以。

webp

无奈

要相信这个世界上总会有人与你一样遇到相同的问题,于是这个人就写了一个 github 仓库。按照文档所说,我们需要配置一下国内的代理,然后执行下载镜像脚本,再重新启动 Kubernetes ,Kubernetes 就这样奇迹般的启动起来了。

安装 kubectl

kubectl 是 Kubernetes 的客户端

brew install kubernetes-cli# 或者更新brew upgrade kubernetes-cli

安装 Kubernetes dashboard

kubectl create -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml

启动 proxy

kubectl proxy

访问这里:http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

webp

Dashboard

如果是想玩玩单点的 Kubernetes 到这里就结束啦~

安装 Istio

下载 Istio 最新版本

找个你心仪的地方解压,然后配置环境变量:

export PATH="$PATH:/解压的目录/istio-1.0.0/bin"

如果放在 .bash_profile 或者 .zshrc 文件中记得要 source 一下

source ~/.bash_profile

验证一下是否生效

istioctl version

安装 Istio

这里为了快速简单的搭建 Istio ,使用 helm 来帮助我们。

安装 Helm

Helm 是 Kubernetes 的包管理器

brew install kubernetes-helm# 验证一下helm version

然后我们安装 Istio 步骤

如果 Helm 版本小于 2.10.0 ,请通过 kubectl apply 安装 Istio,并等待几秒钟,以便在kube-apiserver 中提交CRD:

kubectl apply -f install/kubernetes/helm/istio/templates/crds.yaml
kubectl apply -f install/kubernetes/helm/istio/charts/certmanager/templates/crds.yaml

官方文档提供了安装几种方式,Option 1 使用 helm template 安装,可选的东西比较少。所以我们选择  Option 2

注意:这2个选项是互斥的,只能二选一哦。

  1. 如果还没有为 Tiller 配置 service account,请配置一个:

    kubectl create -f install/kubernetes/helm/helm-service-account.yaml
  2. 使用 service account 在您的集群中安装 Tiller

    helm init --service-account tiller
  3. 安装 Istio

    helm install install/kubernetes/helm/istio --name istio --namespace istio-system \
    --set tracing.enabled=true \
    --set kiali.enabled=true \
    --set grafana.enabled=true

默认 tracing 、kiali 、grafana 并不会开启,这里需要在安装时手动 --set xxx.enabled=true 进行开启。配置说明可查看:install/kubernetes/helm/istio/README.md

PS: kiali pod 部署时会无法正常启动,不影响使用,后面我们会再提到。

部署 Bookinfo

我们来部署一个官方的 Bookinfo Examples,进入 istio 的目录

kubectl apply -f <(istioctl kube-inject -f samples/bookinfo/platform/kube/bookinfo.yaml)

确认一下 service 和 pod 是否正确启动了

kubectl get services

webp

get services

kubectl get pods

webp

get pods

然后我们来创建网关

kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml

再 check 一下

istioctl get gateway

webp

gateway

注意! 后面会和官方文档不太一样啦,官方会去获取 ingress 的 ip 和端口,我们使用的 Docker for Mac 不需要查看映射端口,在 Dashboard 上找到 namespace 选择为 istio-system ,就可以看到我们映射的端口。

webp

查看 gateway 端口

激动人心的时刻到啦,访问这里:http://localhost/productpage

就可以看到 Bookinfo 的demo啦!

webp

Bookinfo demo

卸载

可以直接参考官方文档啦!

分布式跟踪-Jaeger

开启 Jaeger 网络映射

kubectl port-forward -n istio-system $(kubectl get pod -n istio-system -l app=jaeger -o jsonpath='{.items[0].metadata.name}') 16686:16686 &

访问 http://127.0.0.1:16686/

webp

Jaeger UI

可以点开具体的一次Trace来查看链路情况

webp

Trace

更多好玩的东西请参考官方文档

使用Grafana 查询指标

先看来看我们的 Prometheus和 Grafana 是否正常

kubectl -n istio-system get svc prometheus
kubectl -n istio-system get svc grafana

webp

Prometheus和 Grafana 状态

开启 Grafana 网络映射

kubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l app=grafana -o jsonpath='{.items[0].metadata.name}') 3000:3000 &

访问 http://localhost:3000/d/LJ_uJAvmk/istio-service-dashboard?refresh=10s&orgId=1

webp

Grafana

更多好玩的东西请参考官方文档

kiali

kiali 目前还在开发当中,所以不能用于生产,在Istio 默认不被开启,不过玩玩还是可以的。前面提到 kiali 在部署的时候无法启动,查看了一下原因是拉取的镜像为docker.io/kiali/kiali:istio-release-1.0,而Docker hub 中根本没有这个 Tag ...

webp

docker hub

所以抱着试试看的态度,在 Dashboard 手动改一下 tag 为 latest ,更新!


webp

修改tag


开启映射网络端口

kubectl port-forward -n istio-system $(kubectl get pod -n istio-system -l app=kiali -o jsonpath='{.items[0].metadata.name}') 20001:20001 &

访问:http://localhost:20001/
账号密码:admin/admin

webp

kiali UI

看起来还是蛮酷的,更多细节可以参考 Kiali 官方文档

停止Kubernetes

webp

停止Kubernetes

在不需要的时候我们可以将Kubernetes 停止,以保证我们 Mac 的性能,在安装了太多的组件后会比较耗电。

一切都可以重来...

webp

重新开始

Docker for Mac 还提供了一个非常人性的功能——Reset

webp

一切都可以重来...

无论我们是安装过程出了问题还是需要做各种测试,只需要轻轻点击 【Reset Kubernetes cluster】一切就重新开始。

总结

Istio 的 example 还有很多可以玩的,比如限流、故障注入、retry 等等,后面有机会再和大家分享。教程类的文章总有时效性,尤其像发展迅猛的Istio ,所以如果有安装失败的同学可以给我留言,反正我也不会改的。


webp

见笑啦


今天就到这里啦,谢谢大家。



作者:谢小呆呆呆
链接:https://www.jianshu.com/p/131bf15235b1


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消