Istio讀書筆記-03-安裝
《Istio實戰指南》 by 馬若飛 2019年9月第1版
書中的 Istio 為 1.1版
---
聽說 Istio的官網是 https://istio.io ,只是還沒能成功訪問過。
後來發現了Istio中文社群:https://istio.cn/ ,其下還有 官方文件映象 http://docs.istio.cn/。
Github地址:https://github.com/istio/istio 。
索引
安裝Istio,本以為只是安裝Istio,結果,還需要安裝(準備工作):
- GO
- Docker
- 搭建Kubernetes平臺
Kubernetes是Istio的 首推部署平臺。
複雜的依賴關係》使用Helm安裝
Helm:K8S下的包管理工具。
英文:heml——n. 舵,舵柄; 掌舵,掌管; (國家,企業等的)機要部門,領; 頭盔;
除了在自己的計算機安裝Istio,一些雲平臺也提供了K8S服務,比如:
- Amazon AWS的EKS
- Google Cloud的GKE
- 騰訊雲的CIS
- 阿里雲的Kubernetes容器服務
2、4 內建了Istio元件,可以使安裝整合工作更簡單。
(書中 第3章)
安裝GO
Istio是使用GO語言實現的
Linux安裝
golang官網:https://golang.org/ ,訪問不了
golang中文:https://golang.google.cn/
2021-10-05最新版本1.17.1
下載原始碼、解壓;
Ubuntu中:sudo apt-get install golang-go
PATH環境變數,$HOME/.bash_profile 或 /etc/profile
GOPATH環境變數:$HOME/go
驗證:go version
安裝Docker
容器和映象的相關操作都需要Docker支援
最新的Docker(什麼版本?)桌面版已經集成了K8S環境》方便進行本地叢集環境的搭建
Ubuntu安裝:sudo apt-get install docker-ce 安裝的是最新版本嗎?
CentOS安裝:sudo yum install docker-ce 安裝的是最新版本嗎?
驗證:docker version
搭建Kubernetes平臺
Istio被設計為支援多平臺執行,但它目前只適用於K8S環境。
限制:完整的K8S環境》要求高》計算機配置不高的話,無法啟動或正常執行一個叢集
兩種簡單方法在 個人計算機 上啟動一個 極簡K8S叢集:1)Docker桌面版自帶的K8S環境,2)Minikube。適合本地開發。
Istio要求 K8S版本 1.9及以上
最新K8S:Latest Release: 1.22.2 (released: 2021-09-15)
安裝:
命令列工具:Linux》kubectl;Mac》使用Homebrew安裝。
啟用Docker桌面版中的K8S:Docker 17.02的Edge版,2018年7月,Docker 18.06的穩定版提供K8S整合。
Docker圖示》選單-Kubernetes》Kubernetes is running;
檢視K8S節點狀況:kubectl get nodes
安裝Minikube
推薦。更成熟和統一的叢集操作方式。Linux系統。
Minikube使用Docker管理K8S虛擬機器》虛擬機器相關驅動》建議使用VirtualBox。
注意,由於網路環境問題,可能無法下載,可以選擇我國大陸的映象地址(是什麼?)
安裝好後,啟動一個K8S叢集:minikube start
檢視啟動情況:minikube status
檢視K8S執行狀況
K8S的視覺化儀表板(Dashboard)》對叢集進行監控和管理
Minikube方式,啟動儀表板:minikube dashboard
Docker桌面版:複雜一些,略
檢視儀表板是否已執行:kubectl get pods --namespace kube-system
訪問連結:好長!略,,開頭——http://localhost:8001...
K8S叢集環境構建完成,準備工作結束。
安裝Istio
Istio每個元件都是K8S叢集中的Deployment,並以Pod的形式執行。
Helm安裝
下載安裝包:curl -L https://git.io/getLatestIstio | sh -
注,瀏覽器中 git.io 訪問失敗。
安裝包內容:bin, install, samples, Istio.VERSION
istioctl命令 新增到 PATH:export PATH=$PWD/bin:$PATH
安裝Helm
Istio官方推薦使用Helm安裝:定製的方式靈活配置安裝選項
Helm:客戶端Helm、服務端Tiller。
為簡單,只安裝客戶端。
curl安裝 略
檢查:helm version
使用Helm安裝Istio
Istio的CRD(K8S的CRD,Custom Resource Definition),K8S API的擴充套件方法。
CRD初始化、註冊、物件,Istio的初始化工作
Istio初始化了大約50個CRD,4大類:
*.authentication.Istio.io
*.config.Istio.io
*.networking.Istio.io
*.rbac.Istio.io
安裝這些CRD:kubectl apply -f .../crds.yaml
Helm兩種安裝Istio的方式:helm template, helm install(需要服務端Tiller)。
Istio的Helm chart安裝目錄結構
--set key=value:自定義安裝選項,附錄A
helm template:
生成部署的清單檔案——非常長
Istio-system命令空間
建立名稱空間:kubectl create namespace Istio-system
檢視Pod的狀態:kubectl get pods -n Istio-system
helm install:
不用生成安裝清單,但需要 服務端Tiller支援。
Tiller安裝步驟繁瑣,略。
確認安裝結果
$ kubectl get svc -n Istio-system
$ kubectl get pods -n Istio-system
問題處理
1)Minikube虛擬機器驅動
minikube start --vm-driver=none
2)Pilot啟動失敗
記憶體不夠?預設需要2GB!
至少分配8GB記憶體!
調小內容需求:helm引數 --set pilot-resources.requests.memory="512Mi"
3)映象獲取錯誤
ImagePullBackOff這樣的資訊
我國大陸網路環境問題倒是無法下載映象,需要搜尋可用映象
(書中 第9章)
理論上,任何雲平臺的K8S產品都可以部署Istio,只要匯入Istio的CRD,並使用官方提供的Helm進行安裝即可。
需要花錢的
在Google Cloud GKE(Google Kubernetes Engine)上啟用Istio
內建了Istio
註冊Google賬號(需要繫結信用卡)
下載Cloud SDK
安裝gcloud命令
建立Istio叢集:至少4個節點的叢集
圖形化介面安裝、驗證安裝
……
使用阿里雲Kubernetes容器服務
視覺化方式搭建K8S叢集
提供Istio作為元件
阿里雲賬號》支付寶賬號
容器服務Kubernetes版,,當前為:服務網格 ASM
建立叢集、新增Istio元件,DONE
都是圖形化安裝,方便快捷,就是,費錢(阿里雲這個 是不是有 試用版呢?)。
其它(書中 第9章):
高階流量控制
故障注入:延遲故障——fault標記,中斷故障——abort關鍵字;
流量映象;
除錯和故障排查
通過日誌和內建的命令來除錯和排查問題
Istio的日誌框架
範圍:adapters, api, attributes, default, grpcAdapter
基本:none, error, warning, info, debug
通過ControlZ來進行日誌設定:Istio ControlZ
除錯(istioctl):proxy-status命令(網格狀態),proxy-config命令(代理配置),使用GDB
故障排查:
Istio對Pod和服務的要求(埠命名、Pod埠、關聯服務、Deployment標籤、Applicatin UID、NET_ADMIN功能)
請求被Envoy拒絕:檢查Envoy日誌
設定目標規則後出現503:DestinationRule,服務的TLS衝突
Headless TCP服務連線丟失:如果部署了Istio-citadel,則Envoy會每隔15min重啟一次,來完成證書的重新整理任務——造成長連線以及TCP流中斷。禁止TLS。(哇~)
Envoy崩潰:高併發大流量下Envoy有可能崩潰。ulimit -a檢查。提高ulimit上限(ulimit -n 16384)。
Envoy無法連線HTTP/1.0服務:Nginx、proxy_http_version為1.1
---