1. 程式人生 > 其它 >Istio讀書筆記-03-安裝

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,結果,還需要安裝(準備工作):

  1. GO
  2. Docker
  3. 搭建Kubernetes平臺

Kubernetes是Istio的 首推部署平臺。

複雜的依賴關係》使用Helm安裝

Helm:K8S下的包管理工具。

英文:heml——n. 舵,舵柄; 掌舵,掌管; (國家,企業等的)機要部門,領; 頭盔;

除了在自己的計算機安裝Istio,一些雲平臺也提供了K8S服務,比如:

  1. Amazon AWS的EKS
  2. Google Cloud的GKE
  3. 騰訊雲的CIS
  4. 阿里雲的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

---