Istio 專案由 Google 和 IBM 的團隊與 Lyft 的 Envoy 團隊合作啟動。它已經完全在 GitHub 上公開開發。目前已經是「Service Mesh服務網格」的實際領導者。Istio官方圖示如下圖,是希臘語中的 英文「sail」,翻譯中文即「帆」。這個設計還是不錯的哈,比較貼切。
要執行istio需要搭建3步驟:
安裝Docker Desktop,用來管理容器
前提:先安裝Homebrew
brew install --cask --appdir=/Applications docker 預設安裝最新版本docker到mac的Application中。
提示docker was successfully installed!表示安裝成功。
安裝完後,可以找到小海豚圖示。
校驗docker是否安裝成功,開啟終端輸入:
docker version
Kubernetes虛擬化環境+控制檯Kubernetes Dashboard
1)直接在docker Desktop上選中安裝kubernetes.
Docker Desktop點開,可見Kubernetes is running,如下圖:
2)驗證是否安裝成功
1 kubectl cluster-info 檢視叢集資訊 2 3 kubectl get nodes 檢視節點 4 5 kubectl describe node 檢視節點明細
結果:
節點明細太長就不展示了。
1)部署kubernetes dashboard
https://github.com/搜尋kubernetes/dashboard,第一個就是:https://github.com/kubernetes/dashboard。找到安裝連結,如下圖:
命令列執行:
1 kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
結果:
2)授權 kube-system
預設服務賬號
新建一個資料夾docker-images-desktop, 作為git根目錄:
1 git clone https://github.com/AliyunContainerService/k8s-for-docker-desktop.git 2 cd k8s-for-docker-desktop 3 kubectl apply -f kube-system-default.yaml
3)獲取登陸token
新建token.sh
1 touch token.sh
開啟編輯
1 vim token.sh
將以下程式碼放入
1 TOKEN=$(kubectl -n kube-system describe secret default| awk '$1=="token:"{print $2}') 2 kubectl config set-credentials docker-desktop --token="${TOKEN}" 3 echo $TOKEN
:wq!儲存。
執行指令碼,獲取token:
4)登陸
開啟代理:
1 kubectl proxy
結果:
瀏覽器開啟:http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/#/workloads?namespace=default ,用第三步生成的token登入。
登入後介面如下:
1 curl -L https://istio.io/downloadIstio | sh -
下載包目錄如下:
把bin目錄下的istioctl新增到PATH,方便後續使用istioctl命令操作。
export PATH="$PATH:/Users/**/soft/istio-1.16.0/bin" 替換為bin目錄的全路徑
安裝istio:
istioctl install
結果:
給名稱空間新增標籤,指示 Istio 在部署應用的時候,自動注入 Envoy 邊車代理:
kubectl label namespace default istio-injection=enabled
1)部署bookinfo自帶範例應用
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yam
結果:
2)檢查服務
應用很快會啟動起來。當每個 Pod 準備就緒時,Istio 邊車將伴隨應用一起部署。
kubectl get services
結果:
檢視pod狀態
kubectl get pods
多執行幾次,當所有POD的READY=2代表完成了,如下圖:
3)驗證啟動
執行下面命令,通過檢查返回的頁面標題來驗證應用是否已在叢集中執行,並已提供網頁服務:
kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS productpage:9080/productpage | grep -o "<title>.*</title>"
1)應用關聯閘道器
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yam
2)確保組態檔沒有問題:
istioctl analyze
操作結果如下圖:
3)確定入站IP和埠
export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}') export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}') export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].port}')
Docker For Desktop: 注意docker環境要把host改一下。
export INGRESS_HOST=127.0.0.1
設定環境變數 GATEWAY_URL
:
export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
確保 IP 地址和埠均成功地賦值給了環境變數:
echo "$GATEWAY_URL"
結果:127.0.0.1:80
4)驗證存取「bookinfo 產品頁面」
echo "http://$GATEWAY_URL/productpage"
結果:http://127.0.0.1:80/productpage,瀏覽器開啟,如下圖:
不要看這個"The Comdedy of Errors"以為是錯誤哈,這個是莎士比亞早期的一部喜劇...
samples中內建Istio 和整合了很多常用監控。
kubectl apply -f samples/addons
結果:
1)驗證 prometheus
服務正在自身叢集中執行。
kubectl -n istio-system get svc prometheus
結果:
2)驗證 Grafana 服務正在自身叢集中執行。
kubectl -n istio-system get svc grafana
結果:
3)通過 Grafana UI 開啟 Istio Dashboard。
istioctl dashboard grafana
自動開啟頁面,控制面板如下圖:
網格監控,如下圖:
1)安裝kiali
kubectl rollout status deployment/kiali -n istio-system
結果:
2)存取 Kiali 儀表板
istioctl dashboard kiali
存取幾次http://127.0.0.1/productpage#,再重新整理kiali監控,如下圖:
可見在服務監控「視覺化」這一塊,做的還不錯。雖然目前不火。
====參考======
如果你覺得本文對你有點幫助的話,記得在右下角點個「推薦」哦,博主在此感謝!