社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  docker

Docker for mac 安装 Istio

谢小呆 • 5 年前 • 398 次点击  
阅读 28

Docker for mac 安装 Istio

  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 的正式支持(在之前的版本也有支持,只是非正式版本)

docker支持kubernetes

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

调整内存设置

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

开启kubernetes

启动中...

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

无奈

  要相信这个世界上总会有人与你一样遇到相同的问题,于是这个人就写了一个 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/

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
复制代码

get services

kubectl get pods
复制代码

get pods

然后我们来创建网关

kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
复制代码

再 check 一下

istioctl get gateway
复制代码

gateway

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

查看 gateway 端口

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

就可以看到 Bookinfo 的demo啦!

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/

Jaeger UI

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

Trace

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

使用Grafana 查询指标

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

kubectl -n istio-system get svc prometheus
kubectl -n istio-system get svc grafana
复制代码

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

Grafana

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

kiali

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

docker hub

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

修改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

kiali UI

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

停止Kubernetes

停止Kubernetes

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

一切都可以重来...

重新开始

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

一切都可以重来...

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

总结

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

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

简书地址:www.jianshu.com/p/131bf1523…


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/0AqpeRwWxb
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/22677
 
398 次点击