Docker for mac 安装 Istio

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

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

安装 Kubernetes

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

docker支持kubernetes

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

调整内存设置

找到 Kubernetes 选项,勾选 Enable 选择 Kubernetes,而后执行 Applyjson

开启kubernetes

启动中...

咱们会看到 Kubernetes 一直在 starting... ,此时 docker 正在下载镜像,却不知在遥远的东方有一堵“墙”,下载须要的镜像越过墙才能够。centos

无奈

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

安装 kubectl

kubectl 是 Kubernetes 的客户端bash

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 到这里就结束啦~app

安装 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…

相关文章
相关标签/搜索