Service Mesh 在過去的一年的迅猛發(fā)展,各大廠商都在投入精力開發(fā)適合自己的產(chǎn)品蹂随。而對于小廠來說雖不能自己開發(fā)十嘿,但選擇也有很多,Linkerd岳锁、Envoy绩衷、Istio 、Conduit (Linkerd 2.0)激率,甚至是 Consul 都在開發(fā) Service Mesh咳燕。當(dāng)中 Istio 因?yàn)槌錾砻T和優(yōu)秀的設(shè)計(jì)在眾星之中脫穎而出,社區(qū)紛紛站隊(duì)表示支持乒躺,尤其是發(fā)布 1.0 版本以后招盲,更是引來眾多關(guān)注。
Istio 雖然可以脫離 Kubernetes 運(yùn)行嘉冒,但從官方投入的精力和社區(qū)上的資料曹货,都是基于 Kubernetes,如果不想采坑讳推,還是老老實(shí)實(shí)的折騰 Kubernetes 吧顶籽。螞蟻金服的 Jimmy song 創(chuàng)建了一個 kubernetes-vagrant-centos-cluster 項(xiàng)目,可以幫助我們很容易的啟動 Kubernetes 集群银觅。唯一不足是啟動時會比較耗資源蜕衡,而 Docker 的新版本也同樣支持了 Kubernetes,于是便有了這篇文章。
安裝 Kubernetes
在 Docker 18.06.0 的增加對 Kubernetes 的正式支持(在之前的版本也有支持慨仿,只是非正式版本)
這里調(diào)整了 docker 的內(nèi)存為 4GB久脯,之前默認(rèn) 2GB 運(yùn)行 Kubernetes 感覺會很吃力(當(dāng)部署完Istio 這一套發(fā)現(xiàn) 4 GB也很吃緊,改成 7GB 后電腦才不那么熱...)镰吆。
找到 Kubernetes 選項(xiàng)帘撰,勾選 Enable 選擇 Kubernetes,然后執(zhí)行 Apply
我們會看到 Kubernetes 一直在 starting... 万皿,此時 docker 正在下載鏡像摧找,殊不知在遙遠(yuǎn)的東方有一堵“墻”,下載需要的鏡像越過墻才可以牢硅。
要相信這個世界上總會有人與你一樣遇到相同的問題蹬耘,于是這個人就寫了一個 github 倉庫。按照文檔所說减余,我們需要配置一下國內(nèi)的代理综苔,然后執(zhí)行下載鏡像腳本,再重新啟動 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/
如果是想玩玩單點(diǎn)的 Kubernetes 到這里就結(jié)束啦~
安裝 Istio
找個你心儀的地方解壓,然后配置環(huán)境變量:
export PATH="$PATH:/解壓的目錄/istio-1.0.0/bin"
如果放在 .bash_profile
或者 .zshrc
文件中記得要 source 一下
source ~/.bash_profile
驗(yàn)證一下是否生效
istioctl version
安裝 Istio
這里為了快速簡單的搭建 Istio 抒抬,使用 helm 來幫助我們杨刨。
安裝 Helm
Helm 是 Kubernetes 的包管理器
brew install kubernetes-helm
# 驗(yàn)證一下
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個選項(xiàng)是互斥的捉撮,只能二選一哦。
-
如果還沒有為 Tiller 配置 service account妇垢,請配置一個:
kubectl create -f install/kubernetes/helm/helm-service-account.yaml
-
使用 service account 在您的集群中安裝 Tiller
helm init --service-account tiller
-
安裝 Istio
helm install install/kubernetes/helm/istio --name istio --namespace istio-system \ --set tracing.enabled=true \ --set kiali.enabled=true \ --set grafana.enabled=true
默認(rèn) tracing 巾遭、kiali 、grafana 并不會開啟闯估,這里需要在安裝時手動 --set xxx.enabled=true
進(jìn)行開啟灼舍。配置說明可查看:install/kubernetes/helm/istio/README.md
PS: kiali pod 部署時會無法正常啟動,不影響使用涨薪,后面我們會再提到骑素。
部署 Bookinfo
我們來部署一個官方的 Bookinfo Examples,進(jìn)入 istio 的目錄
kubectl apply -f <(istioctl kube-inject -f samples/bookinfo/platform/kube/bookinfo.yaml)
確認(rèn)一下 service 和 pod 是否正確啟動了
kubectl get services
kubectl get pods
然后我們來創(chuàng)建網(wǎng)關(guān)
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
再 check 一下
istioctl get gateway
注意刚夺! 后面會和官方文檔不太一樣啦献丑,官方會去獲取 ingress 的 ip 和端口末捣,我們使用的 Docker for Mac 不需要查看映射端口,在 Dashboard 上找到 namespace 選擇為 istio-system 创橄,就可以看到我們映射的端口箩做。
激動人心的時刻到啦,訪問這里:http://localhost/productpage
就可以看到 Bookinfo 的demo啦妥畏!
卸載
可以直接參考官方文檔啦邦邦!
分布式跟蹤-Jaeger
開啟 Jaeger 網(wǎng)絡(luò)映射
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/
可以點(diǎn)開具體的一次Trace來查看鏈路情況
更多好玩的東西請參考官方文檔
使用Grafana 查詢指標(biāo)
先看來看我們的 Prometheus和 Grafana 是否正常
kubectl -n istio-system get svc prometheus
kubectl -n istio-system get svc grafana
開啟 Grafana 網(wǎng)絡(luò)映射
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
更多好玩的東西請參考官方文檔
kiali
kiali 目前還在開發(fā)當(dāng)中,所以不能用于生產(chǎn)醉蚁,在Istio 默認(rèn)不被開啟燃辖,不過玩玩還是可以的。前面提到 kiali 在部署的時候無法啟動网棍,查看了一下原因是拉取的鏡像為docker.io/kiali/kiali:istio-release-1.0
黔龟,而Docker hub 中根本沒有這個 Tag ...
所以抱著試試看的態(tài)度,在 Dashboard 手動改一下 tag 為 latest 确沸,更新捌锭!
開啟映射網(wǎng)絡(luò)端口
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
看起來還是蠻酷的,更多細(xì)節(jié)可以參考 Kiali 官方文檔
停止Kubernetes
在不需要的時候我們可以將Kubernetes 停止罗捎,以保證我們 Mac 的性能观谦,在安裝了太多的組件后會比較耗電。
一切都可以重來...
Docker for Mac 還提供了一個非常人性的功能——Reset
無論我們是安裝過程出了問題還是需要做各種測試桨菜,只需要輕輕點(diǎn)擊 【Reset Kubernetes cluster】一切就重新開始豁状。
總結(jié)
Istio 的 example 還有很多可以玩的,比如限流倒得、故障注入泻红、retry 等等,后面有機(jī)會再和大家分享霞掺。教程類的文章總有時效性谊路,尤其像發(fā)展迅猛的Istio ,所以如果有安裝失敗的同學(xué)可以給我留言菩彬,反正我也不會改的缠劝。
今天就到這里啦,謝謝大家骗灶。
我的博客即將搬運(yùn)同步至騰訊云+社區(qū)惨恭,邀請大家一同入駐:https://cloud.tencent.com/developer/support-plan?invite_code=2bvwm2k9kftw0