在本指南中,我们将引导您了解如何将 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 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 应用程序,它混合使用 gRPC 和 HTTP 调用,允许用户对他们最喜欢的表情符号进行投票。
通过运行以下命令将 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 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 图标来访问这些。