雲原生架構(二)環境搭建(Mac上安裝Docker+Kubernetes+Istio一條龍)

2022-12-09 18:01:06

一、背景

Istio 專案由 Google 和 IBM 的團隊與 Lyft 的 Envoy 團隊合作啟動。它已經完全在 GitHub 上公開開發。目前已經是「Service Mesh服務網格」的實際領導者。Istio官方圖示如下圖,是希臘語中的 英文「sail」,翻譯中文即「帆」。這個設計還是不錯的哈,比較貼切。

二、安裝

要執行istio需要搭建3步驟:

2.1 安裝Docker

安裝Docker Desktop,用來管理容器

前提:先安裝Homebrew

brew install --cask --appdir=/Applications docker  預設安裝最新版本docker到mac的Application中。

提示docker was successfully installed!表示安裝成功。

安裝完後,可以找到小海豚圖示。

校驗docker是否安裝成功,開啟終端輸入:

docker version

 

2.2 安裝Kubernetes

Kubernetes虛擬化環境+控制檯Kubernetes Dashboard

2.2.1 安裝Kubernetes

1)直接在docker Desktop上選中安裝kubernetes.

Docker Desktop點開,可見Kubernetes is running,如下圖:

2)驗證是否安裝成功

1 kubectl cluster-info     檢視叢集資訊
2 
3 kubectl get nodes        檢視節點
4 
5 kubectl describe node    檢視節點明細

結果:

節點明細太長就不展示了。

2.2.2 安裝 kubernetes dashboard

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登入。

登入後介面如下:

 

2.3 安裝Istio

2.3.1 安裝Istio

1)命令列下載Istio

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

結果:

2)注入代理

給名稱空間新增標籤,指示 Istio 在部署應用的時候,自動注入 Envoy 邊車代理:

kubectl label namespace default istio-injection=enabled

 2.3.2 部署範例應用

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>"

2.3.3 對外開放應用程式

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"以為是錯誤哈,這個是莎士比亞早期的一部喜劇...

 

2.4 監控

samples中內建Istio 和整合了很多常用監控。

kubectl apply -f samples/addons

結果:

2.4.1 Grafana監控

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

自動開啟頁面,控制面板如下圖:

網格監控,如下圖:

 

2.4.2 kiali安裝和監控

1)安裝kiali

kubectl rollout status deployment/kiali -n istio-system

結果:

2)存取 Kiali 儀表板

istioctl dashboard kiali

存取幾次http://127.0.0.1/productpage#,再重新整理kiali監控,如下圖:

可見在服務監控「視覺化」這一塊,做的還不錯。雖然目前不火。

 

 

 

 

 

 

 

 

 

 

====參考======

Mac上安裝k8s 

Istio官方入門檔案