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