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…

相關文章
相關標籤/搜索