设置
在我们做任何事情之前,我们需要确保您可以访问 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
图标来访问这些。