快速上手 Linkerd v2 Service Mesh(服務網格)
- 2021 年 6 月 4 日
- 筆記
在本指南中,我們將引導您了解如何將 Linkerd
安裝到您的 Kubernetes
集群中。 然後我們將部署一個示例應用程式來展示 Linkerd
的功能。
安裝 Linkerd
很容易。首先,您將在本地電腦上安裝 CLI
(命令行介面)。 使用此 CLI
,然後您將控制平面安裝到您的 Kubernetes
集群上。 最後,您將通過向它們添加 Linkerd
的數據平面來「網格化(mesh
)」您自己的一個或多個服務。
設置
在我們做任何事情之前,我們需要確保您可以訪問 Kubernetes
集群並在本地機器上運行 kubectl
命令。(如果您還沒有 Kubernetes
集群,一個簡單的選擇是在您的本地機器上運行一個。有很多方法可以做到這一點,包括 kind、k3d、Docker for Desktop 等更多。)
您可以通過運行以下命令來驗證設置:
kubectl version --short
您應該看到包含 Client Version
和 Server Version
組件的輸出。
現在我們有了集群,我們將安裝 Linkerd CLI
並使用它來驗證您的集群是否能夠託管 Linkerd
控制平面。
安裝 CLI
如果這是您第一次運行 Linkerd
,則需要將 linkerd
命令行介面 (CLI) 下載到本地電腦上。 CLI
將允許您與 Linkerd
部署進行交互。
要手動安裝 CLI
,請運行:
curl -sL //run.linkerd.io/install | sh
請務必按照說明將其添加到您的路徑中。
或者,如果您使用 Homebrew,則可以使用 brew install linkerd
安裝 CLI
。 您還可以通過 Linkerd releases 頁面直接下載 CLI
。
安裝後,使用以下命令驗證 CLI
是否正常運行:
linkerd version
您應該會看到 CLI
版本以及 Server version: unavailable
。 這是因為您尚未在集群上安裝控制平面。別擔心 – 我們會儘快解決這個問題。
驗證你的 Kubernetes 集群
Kubernetes
集群可以通過多種不同的方式進行配置。在我們安裝 Linkerd
控制平面之前,我們需要檢查並驗證所有配置是否正確。 要檢查您的集群是否已準備好安裝 Linkerd
,請運行:
linkerd check --pre
如果有任何檢查未通過,請確保按照提供的鏈接並在繼續之前解決這些問題。
安裝控制平面(Control Plane)在你的集群
現在您已經在本地運行了 CLI
,並且集群已經準備就緒,是時候安裝控制平面了。
第一步是安裝控制平面核心。為此,請運行:
linkerd install | kubectl apply -f -
在此命令中,linkerd install
命令生成一個 Kubernetes manifest
,其中包含所有必要的控制平面資源。將此清單通過管道傳輸到 kubectl apply
然後指示 Kubernetes
將這些資源添加到您的集群中。
現在讓我們等待控制平面完成安裝。根據集群 Internet
連接的速度,這可能需要一兩分鐘。通過運行以下命令等待控制平面準備就緒(並驗證您的安裝):
linkerd check
接下來,我們將安裝一些擴展。擴展為 Linkerd
添加了非關鍵但通常有用的功能。 對於本指南,我們需要 viz
擴展,它會將 Prometheus
、儀錶板(dashboard
)和指標組件(metrics components
)安裝到集群上:
linkerd viz install | kubectl apply -f - # on-cluster metrics stack
或者,此時您可以安裝其他擴展。例如:
## optional
linkerd jaeger install | kubectl apply -f - # Jaeger collector and UI
linkerd multicluster install | kubectl apply -f - # multi-cluster components
請注意,擴展也可以來自第三方來源。例如,Buoyant Cloud 是針對 Linkerd 的,可免費託管指標儀錶板(metrics dashboard
)。可以與 viz
一起安裝,但它是可選的:
## optional
curl -sL buoyant.cloud/install | sh
linkerd buoyant install | kubectl apply -f - # hosted metrics dashboard
一旦您安裝了 viz
擴展程式和您想要的任何其他擴展程式,我們將再次驗證所有內容:
linkerd check
假設一切都是綠色的,我們已準備好進行下一步!
瀏覽 Linkerd
安裝並運行控制平面和擴展後,您現在可以通過運行以下命令查看 Linkerd
儀錶板:
linkerd viz dashboard &
此命令設置從本地系統到 linkerd-web pod 的埠。(也可以暴露儀錶板供所有人訪問。)
由於控制平面組件都在其 pod 中安裝了代理,因此每個組件也是數據平面本身的一部分。 這提供了深入了解控制平面本身在幕後發生了什麼的能力。事實上,你可以運行:
linkerd -n linkerd-viz viz top deploy/web
這是您通過查看儀錶板本身產生的流量!
安裝 demo app
要了解 Linkerd
如何為您的一項服務工作,您可以安裝一個 demo
應用程式。 emojivoto
應用程式是一個獨立的 Kubernetes
應用程式,它混合使用 gRPC
和 HTTP
調用,允許用戶對他們最喜歡的表情符號進行投票。
通過運行以下命令將 emojivoto 安裝到 emojivoto 命名空間中:
curl -sL //run.linkerd.io/emojivoto.yml \
| kubectl apply -f -
在我們對它進行網格(mesh
)劃分之前,讓我們先來看看這個應用程式。 如果此時您正在使用 Docker Desktop,則可以直接訪問 //localhost。 如果你沒有使用 Docker Desktop
,我們需要轉發 web-svc
服務。要將 web-svc
本地轉發到埠 8080
,您可以運行:
kubectl -n emojivoto port-forward svc/web-svc 8080:80
現在訪問 //localhost:8080。
點擊周圍,您可能會注意到 emojivoto 的某些部分已損壞!例如,如果你點擊一個甜甜圈表情符號(doughnut emoji
),你會得到一個 404
頁面。別擔心,這些錯誤是故意的。(我們可以使用 Linkerd
來識別問題。如果您對如何準確找出問題感興趣,請查看調試指南。)
接下來,讓我們通過運行以下命令將 linker
添加到 emojivoto
:
kubectl get -n emojivoto deploy -o yaml \
| linkerd inject - \
| kubectl apply -f -
此命令檢索在 emojivoto
命名空間中運行的所有部署(deployments
),通過 linkerd inject
運行清單,然後將其重新應用到集群。linkerd inject
命令向 pod spec
添加註解(annotations
),指示 Linkerd
將代理(proxy
)作為容器添加(「注入」)到 pod spec
中。 (有關更多資訊,請參閱自動代理注入。)
與 install
一樣,inject
是純文本操作,這意味著您可以在使用之前檢查輸入和輸出。一旦通過管道傳輸到 kubectl apply
,Kubernetes
將執行滾動部署(rolling deploy
)並使用數據平面的代理更新每個 pod,所有這些都沒有任何停機時間。
恭喜!您現在已將 Linkerd
添加到現有服務中!就像控制平面一樣,可以驗證一切是否按照數據平面應有的方式工作。要進行此檢查,請運行:
linkerd -n emojivoto check --proxy
監測它的運行
您現在可以查看 Linked
面板並查看 demo app
中的所有服務。由於 demo app
附帶了 load generator
,我們可以通過運行以下命令查看實時流量指標(live traffic metrics
):
linkerd -n emojivoto viz stat deploy
這將顯示每個部署的「黃金(golden
)」指標:
- 成功率(
Success rates
) - 請求率(
Request rates
) - 延遲分布百分位數(
Latency distribution percentiles
)
為了進一步深入,可以使用 top
來實時查看正在調用哪些路徑:
linkerd -n emojivoto viz top deploy
為了更深入,我們可以使用 tap
顯示跨單個 pod
、deployment
甚至 emojivoto
命名空間中的所有內容的請求流:
linkerd -n emojivoto viz tap deploy/web
如果您想改用瀏覽器,所有這些功能也可在儀錶板中使用:
那過去發生的事情呢?Linkerd
包含 Grafana
來可視化 Prometheus
收集的指標,並附帶一些預配置的儀錶板。您可以通過單擊概覽頁面中的 Grafana
圖標來訪問這些。
我是為少
微信:uuhells123
公眾號:黑客下午茶
加我微信(互相學習交流),關注公眾號(獲取更多學習資料~)