目前,Linkerd 2.0 已宣布普遍可用(GA),這表明它已準備好用於生產。在這個教程中,我們將指導你如何在幾秒鐘內在 Kubernetes 集群上啟動和運行 Linkerd 2.0。

Linkerd 2.0 教程

在開始教程之前,我們先說說什麼是 Linkerd?以及你為什麼要學這個教程?Linkerd 是一種 service sidecar,可增強 Kubernetes 服務,提供零配置 Dashboard 和 UNIX 風格的 CLI 工具,用於運行時調試,診斷和可靠性。Linkerd 也是一個 Service Mesh,應用於集群中的多個(或所有)服務,為它們提供統一的遙測,安全和控制層。

Linkerd 的工作原理是將超輕代理安裝到服務的每個 Pod 中。這些代理將遙測數據報告給控制層,並從控制層接收信號。這意味著不需要做任何代碼更改就能直接使用 Linkerd ,甚至可以在正在運行的服務上實時安裝。Linkerd 獲得了 Apache v2 許可,是完全開源的,目前由雲原生計算基金會(CNCF)託管(與 Kubernetes 一樣!)。

接下來就讓我們看看在 Kubernetes 集群上運行 Linkerd 的速度有多快。接下來,我們將向你介紹如何在任意 Kubernetes 1.9 + 集群上部署 Linkerd,以及如何使用它來調試一個示例 gRPC 應用程序中的故障。

第 1 步:安裝 demo 應用程序 ??

在安裝 Linkerd 之前,讓我們首先在 Kubernetes 集群上安裝一個名為 Emojivoto 的基本 gRPC demo 應用程序。要安裝 Emojivoto,請運行:

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

此命令用來下載 Emojivoto 的 Kubernetes manifest,使用 kubectl 將其應用於你的 Kubernetes 集群上。Emojivoto 由幾個在 「emojivoto」 namespace 中運行的服務組成。你可以通過運行以下命令來查看服務:

kubectl get -n emojivoto deployments

你還可以通過運行以下命令查看應用程序

minikube -n emojivoto service web-svc --url # if you』re on minikube

或:

kubectl get svc web-svc -n emojivoto -o jsonpath="{.status.loadBalancer.ingress[0].*}" #

.....如果你在別的地方

點擊其他地方。你可能會注意到應用程序的某些部分已損壞!如果要你檢查本地 Kubernetes dashboard,你很難感受到樂趣。就 Kubernetes 而言,應用程序運行得很好。這是一種非常普遍的情況!Kubernetes 很了解你的 Pod 是否正在運行,但卻不知道它們是否能夠正常響應。

在接下來的幾個步驟中,我們將介紹如何使用 Linkerd 來診斷問題。

第 2 步:安裝 Linkerd 的 CLI

首先將 Linkerd 的命令行界面(CLI)安裝到本地計算機上。訪問 Linkerd 發布頁面,或者只需運行:

curl -sL https://run.linkerd.io/install | sh

安裝完成後,將 linkerd 命令添加到路徑中:

export PATH=$PATH:$HOME/.linkerd2/bin

你現在應該能夠運行該命令 linkerd version,該命令應顯示為:

Client version: v2.0
Server version: unavailable

「Server version: unavailable」 意味著我們需要將 Linkerd 的控制層添加到集群,我們接下來會這樣做。但首先,讓我們運行以下命令來驗證,你的集群是否已經為 Linkerd 做好準備:

linkerd check --pre

這個便捷的命令將向你反饋所有會影響你安裝 Linkerd 的問題。希望你進展順利並已經準備好繼續下一步了。

第 3 步:將 Linkerd 的控制層安裝到集群上

在這一步中,我們將 Linkerd 的輕量級控制層安裝到集群中自己的 namespace(「linkerd」)中。為此,請運行:

linkerd install | kubectl apply -f -

此命令可生成一個 Kubernetes manifest ,然後使用 kubectl 命令將其應用於 Kubernetes 集群。(在應用之前,請隨意檢查 manifest )

注意:如果你的 Kubernetes 集群在啟用了 RBAC 的 GKE 後,則需要額外的步驟:首先,你必須向你的 Google Cloud 帳戶授予 ClusterRole 集群管理員許可權,以便在控制層中安裝某些遙測功能。為此,運行:

kubectl create clusterrolebinding cluster-admin-binding-$USER --clusterrole=cluster-admin --user=$(gcloud config get-value account)

你的 Kubernetes 集群可能需要一兩分鐘才能獲取 Linkerd 鏡像,這取決於你的互聯網連接速度。在發生這種情況時,我們可以通過運行以下命令來驗證是否一切正常:

linkerd check

此命令將耐心等待 Linkerd 安裝並運行。

最後,我們準備好查看 Linkerd 的 dashboard 了!只需要運行:

linkerd dashboard

如果你看到類似下面的內容,那麼 Linkerd 現在應該正在你的集群上運行了。??

第 4 步:將 Linkerd 添加到 Web 服務

此時,我們在 「linkerd」 namespace 中安裝了 Linkerd 控制層,並且在 「emojivoto」 namespace 中安裝了我們的 emojivoto demo 應用程序。但我們還沒有將 Linkerd 添加到我們的服務中。所以,接下來讓我們行動起來。

在這個例子中,讓我們假裝自己就是 「web」 服務的所有者。其他服務,如 「emoji」 和 「voting」,屬於其他團隊,所以我們不能觸及。

有幾種方法可以將 Linkerd 添加到我們的服務中。出於演示目的,最簡單的方法是執行以下操作:

kubectl get -n emojivoto deploy/web -o yaml | linkerd inject - | kubectl apply -f -

此命令在 Kubernetes 檢索 「web」 服務的清單,通過 linkerd inject 運行此清單 ,最後將其重新應用於 Kubernetes 集群。該 linkerd inject 命令將清單擴充為包含 Linkerd 的數據層代理。與之一樣 linkerd install,linkerd inject 是純文本操作,這意味著你可以在使用之前檢查輸入和輸出。

由於「web」是一個 Deployment,Kubernetes 可以一次性慢慢地將服務推送到一個 Pod 中,這意味著當我們將 Linkerd 添加到 Kubernetes 時,「web」 可以提供流量服務!

我們現在在 「web」 服務上運行服務 service sidecar!

第 5 步:調試 Fun 和 for Profit

恭喜!你現在已經在 Kubernetes 集群上運行了一個完整的 gRPC 應用程序,並在 「web」 服務上安裝了 Linkerd。但是當你使用它時,應用程序失敗了。所以現在讓我們使用 Linkerd 來追蹤這些錯誤。

非常棒是不是,但你可能首先注意到的是成功率遠低於 100%!點擊 「web」,讓我們深入挖掘。

你現在應該查看 Web 服務的「Deployment 」頁面。你首先將看到的是 Web 正在從 vote-bot (包含在 Emojivoto manifest 中的服務,以持續生成低水平的實時流量)中獲取流量,並且具有兩個輸出依賴項,emoji 和 voting。

emoji 服務的運行率為 100%,但 voting 服務失敗了!依賴服務中的故障可能正是導致 Web 返回錯誤的原因。

讓我們把頁面向上滾動一點,我們將看到 「web」 正在接收的所有流量端點的實時列表。這很有趣:

其中有兩個不是 100% 的調用:第一個是 vote-bot 調用 「/ api / vote」 端點。第二個是從 Web 服務到 voting 服務的 「VotePoop」 調用。很有意思!由於 / api / vote 是一個呼入,而 「/ VotePoop」 是一個呼出,這是一個很好的線索,表明 vote 服務的 VotePoop 端點失敗是造成問題的原因!

最後,如果我們點擊最右側列中該行的 「tap」 圖標,我們將會看到與該端點匹配的實時列表。我們可以確認請求失敗(它們都具有 gRPC 狀態代碼 2,表示錯誤)。

在這一點上,我們有了與投票 「voting」 服務的所有者談判的籌碼。我們已經在其服務上確定了一個始終返回錯誤的端點,並且在系統中沒有發現其他明顯的故障源。

我們希望你可以與 Linkerd 2.0 一起享受這段旅程。還有更多值得探索的地方。例如,我們在上面使用 Web UI 所做的一切,也可以通過純粹的 CLI 命令,如完成 linkerd top,linkerd stat 和 linkerd tap。

另外,你注意到第一頁上的小 Grafana 圖標了嗎?Linkerd 附帶所有這些指標的自動 Grafana dashboard,可以讓你以時間序列格式查看 Linkerd dashboard 中所有內容。趕快一探究竟吧!

在本教程中,我們向你展示了如何在集群上安裝 Linkerd,將其作為 service sidecar 添加到一個服務,而服務正在接收實時流量! 並使用它來調試運行時問題。但這只是冰山一角。我們甚至沒有觸及任何 Linkerd 的可靠性或安全性功能!

未來發展

Linkerd 社區深入了解其 Service Mesh 平台的最新更新,以進一步提高開發人員和服務所有者的效率,並與不斷發展的 Kubernetes 生態系統更緊密地集成。這次更新還為 Linkerd 在日益擁擠的 Service Mesh 空間中提供了一些喘息空間。

Bouyant 首席執行官兼 Linkerd 創始開發者之一 William Morgan 表示,Linkerd 2.0 版本最重要的特點是完全重寫其基礎代碼庫,並更加註重簡化 Service Mesh 部署。

這次重寫將控制層從 JVM 編程語言變為 Go 編程語言。Morgan 表示,與之前的迭代相比,此次更新讓 Linkerd 2.0 「規模更小,速度更快」。

除了性能優勢之外,轉向 Go 語言的 Linkerd 更接近 Kubernetes 生態系統。「我們的大多數用戶都身處 Kubernetes 陣營,所以我們希望能儘早解決這個問題,」 Morgan 說。

Morgan 解釋說,除了與 Kubernetes 生態系統相結合之外,Go 編程語言「更容易上手」,並將推動平台的更大創新。Linkerd 和 Kubernetes 都是雲原生計算基金會(CNCF)生態系統的一部分。

Morgan 表示,儘管 Service Mesh 選項越來越多,但 Linkerd 社區仍然專註於提高平台的可用性。他指出,由於這一重點,該平台本身仍然收到人們的額外關注。Morgan 預計接下來 Linkerd 將儘快從 CNCF 的「孵化」項目轉為「全面畢業」項目。


推薦閱讀:
相关文章