快速上手 Linkerd v2 Service Mesh(服務網格)

為少發表於2021-06-04

在本指南中,我們將引導您瞭解如何將 Linkerd 安裝到您的 Kubernetes 叢集中。 然後我們將部署一個示例應用程式來展示 Linkerd 的功能。

安裝 Linkerd 很容易。首先,您將在本地計算機上安裝 CLI(命令列介面)。 使用此 CLI,然後您將控制平面安裝到您的 Kubernetes 叢集上。 最後,您將通過向它們新增 Linkerd 的資料平面來“網格化(mesh)”您自己的一個或多個服務。

設定

在我們做任何事情之前,我們需要確保您可以訪問 Kubernetes 叢集並在本地機器上執行 kubectl 命令。(如果您還沒有 Kubernetes 叢集,一個簡單的選擇是在您的本地機器上執行一個。有很多方法可以做到這一點,包括 kindk3dDocker for Desktop更多。)

您可以通過執行以下命令來驗證設定:

kubectl version --short

您應該看到包含 Client VersionServer Version 元件的輸出。

現在我們有了叢集,我們將安裝 Linkerd CLI 並使用它來驗證您的叢集是否能夠託管 Linkerd 控制平面。

安裝 CLI

如果這是您第一次執行 Linkerd,則需要將 linkerd 命令列介面 (CLI) 下載到本地計算機上。 CLI 將允許您與 Linkerd 部署進行互動。

要手動安裝 CLI,請執行:

curl -sL https://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 應用程式,它混合使用 gRPCHTTP 呼叫,允許使用者對他們最喜歡的表情符號進行投票。

通過執行以下命令將 emojivoto 安裝到 emojivoto 名稱空間中:

curl -sL https://run.linkerd.io/emojivoto.yml \
  | kubectl apply -f -

在我們對它進行網格(mesh)劃分之前,讓我們先來看看這個應用程式。 如果此時您正在使用 Docker Desktop,則可以直接訪問 http://localhost。 如果你沒有使用 Docker Desktop,我們需要轉發 web-svc 服務。要將 web-svc 本地轉發到埠 8080,您可以執行:

kubectl -n emojivoto port-forward svc/web-svc 8080:80

現在訪問 http://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 applyKubernetes 將執行滾動部署(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 顯示跨單個 poddeployment 甚至 emojivoto 名稱空間中的所有內容的請求流:

linkerd -n emojivoto viz tap deploy/web

如果您想改用瀏覽器,所有這些功能也可在儀表板中使用:

那過去發生的事情呢?Linkerd 包含 Grafana 來視覺化 Prometheus 收集的指標,並附帶一些預配置的儀表板。您可以通過單擊概覽頁面中的 Grafana 圖示來訪問這些。

我是為少
微信:uuhells123
公眾號:黑客下午茶
加我微信(互相學習交流),關注公眾號(獲取更多學習資料~)

相關文章