Docker for mac 安裝 Istio

謝小呆發表於2018-08-16

  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…

相關文章