动手使用Linkerd 2.0

作者 :托马斯·兰佩尔伯格(漂浮)

Linkerd 2.0最近被宣布为通用(GA),这表明它已准备好投入生产。在本教程中,我们将逐步指导您在几秒钟内如何启动Linkerd 2.0并使其在Kubernetes集群上运行。

但是首先,林克(Linkerd)是什么?为什么要关心它? Linkerd是服务的补充,它增强了Kubernetes服务,为运行时调试,诊断和可靠性提供了零配置仪表板和UNIX风格的CLI工具。 Linkerd还是一个服务网格,应用于群集中的多个(或所有)服务,以在它们之间提供统一的遥测,安全性和控制层。

Linkerd通过在服务的每个吊舱中安装超轻代理来工作。这些代理将遥测数据报告给控制平面,并从控制平面接收信号。这意味着使用Linkerd不需要任何代码更改,甚至可以实时安装在正在运行的服务上。 Linkerd是完全开源的,Apache v2许可,并且由Cloud Native Computing Foundation托管(就像Kubernetes本身一样!)

事不宜迟,让我们看看如何快速地在Linkerd集群上运行Linkerd。在本教程中,我们将引导您完成如何在任何Kubernetes 1.9+集群上部署Linkerd以及如何使用它来调试示例gRPC应用程序中的故障。

第1步:安装演示应用程序-

在安装Linkerd之前,首先要在Kubernetes集群上安装一个名为Emojivoto的基本gRPC演示应用程序。要安装Emojivoto,请运行:

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

该命令下载Emojivoto的Kubernetes清单,并使用kubectl将其应用于您的Kubernetes集群。 Emojivoto由在“ emojivoto”命名空间中运行的若干服务组成。您可以通过运行以下命令查看服务:

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仪表板,您将不会看到太多有趣的事情-就Kubernetes而言,该应用程序运行良好。这是非常普遍的情况! Kubernetes 知道您的Pod是否正在运行,但不知道它们是否响应正确。

在接下来的几个步骤中,我们将引导您逐步了解如何使用Linkerd诊断问题。

步骤2:安装Linkerd的CLI

我们将从在您的本地计算机上安装Linkerd的命令行界面(CLI)开始。造访 Linkerd版本页面,或者简单地运行:

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

Once installed, add the linkerd command to your path with:

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

You should now be able to run the command linkerd version, which should display:

Client version: v2.0
Server version: unavailable

“服务器版本:不可用”表示我们需要将Linkerd的控制平面添加到群集中,接下来我们将进行操作。但是首先,通过运行以下命令来验证您的集群已为Linkerd做好准备:

linkerd check --pre

这个方便的命令将报告任何会干扰您安装Linkerd的问题。希望一切看起来都很好,您已经准备好进行下一步。

步骤3:将Linkerd的控制平面安装到集群上

在此步骤中,我们将Linkerd的轻型控制面板安装到集群上其自己的名称空间(“ linkerd”)中。为此,请运行:

linkerd install | kubectl apply -f -

This command generates a Kubernetes manifest 和 uses kubectl command to apply it to your Kubernetes cluster. (Feel free to inspect the manifest before you apply it.)

(Note: if your Kubernetes cluster is on GKE with RBAC enabled, you’ll need an extra step: you must grant a ClusterRole of cluster-admin to your Google Cloud account first, in order to install certain telemetry features in the control plane. To do that, run: kubectl create clusterrolebinding cluster-admin-binding-$USER --clusterrole=cluster-admin --user=$(gcloud config get-value account).)

根据您的Internet连接速度,您的Kubernetes群集可能需要一两分钟才能提取Linkerd图像。在发生这种情况时,我们可以通过运行以下命令来验证一切是否正确:

linkerd check

该命令将耐心等待,直到Linkerd已安装并正在运行。

最后,我们准备查看Linkerd的信息中心!赶紧跑:

linkerd dashboard

如果您看到类似下面的内容,则Linkerd现在正在您的集群上运行。 --

步骤4:将Linkerd添加到Web服务

至此,我们已经在“ linkerd”命名空间中安装了Linkerd控制平面,并在“ emojivoto”命名空间中安装了emojivoto演示应用程序。但是我们实际上尚未将Linkerd添加到我们的服务中。因此,让我们这样做。

在此示例中,假设我们是“网络”服务的所有者。其他服务(例如“表情符号”和“投票”)归其他团队所有-因此我们不想碰它们。

有两种方法可以将Linkerd添加到我们的服务中。出于演示目的,最简单的方法是执行以下操作:

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

This command retrieves the manifest of the “web” service from Kubernetes , runs this manifest through linkerd inject, 和 finally reapplies it to the Kubernetes cluster. The linkerd inject command augments the manifest to include Linkerd’s data plane proxies. As with linkerd install, linkerd inject is a pure text operation, meaning that you can inspect the input 和 output before you use it. Since “web” is a Deployment, Kubernetes is kind enough to slowly roll the service one pod at a time--meaning that “web” can be serving traffic live while we add Linkerd to it!

现在,我们在“ Web”服务上运行了一个服务边车!

第5步:调试娱乐性和盈利性

恭喜你!您现在已经在Kubernetes集群上运行了完整的gRPC应用程序,并在“ Web”服务上安装了Linkerd。当然,当您使用该应用程序时,它会发生故障-因此,现在让我们使用Linkerd来查找这些错误。

If you glance at the Linkerd dashboard (the linkerd dashboard command), you should see all services in the “emojivoto” namespace show up. Since “web” has the Linkerd service sidecar installed on it, you’ll also see success rate, requests per second, 和 latency percentiles show up.

这很不错,但是您可能会注意到的第一件事是成功率远低于100%!点击“网络”,开始深入研究。

您现在应该在查看Web服务的“部署”页面。您会在这里看到的第一件事是,网络正在从表决机器人获取流量(Emojivoto清单中包含的一项服务,会不断产生少量实时流量),并且具有两个传出的依存关系,即表情符号和投票。

表情符号服务正在100%运行,但是投票服务失败了!依赖服务的失败可能正是导致网络返回错误的原因。

让我们向下滚动一点,我们将看到“网络”正在接收的所有流量端点的实时列表。这很有趣:

有两个呼叫未达到100%:第一个是表决机器人的“ / api / vote”端点。第二个是从Web服务到投票服务的“ VotePoop”调用。很有意思!由于/ api / vote是呼入电话,“ / VotePoop”是呼出电话,因此可以很好地说明投票服务的VotePoop端点失败是导致此问题的原因!

最后,如果我们点击最右边一栏中该行的“点击”图标,我们将被带到与该端点匹配的实时请求列表。这使我们可以确认请求失败(它们都包含 gRPC状态码2,表明存在错误)。

至此,我们有了所需的弹药,需要与投票“投票”服务的所有者联系。我们已确定其服务上的一个端点始终返回错误,并且没有发现系统中其他明显的故障源。

We hope you’ve enjoyed this journey through Linkerd 2.0. There is much more for you to explore. For example, everything we did above using the web UI can also be accomplished via pure CLI commands, e.g. linkerd top, linkerd stat, 和 linkerd tap.

另外,您是否注意到我们看到的第一页上的小Grafana图标? Linkerd随附了针对所有这些指标的自动Grafana仪表板,使您可以按时间序列格式查看在Linkerd仪表板中看到的所有内容。看看这个!

想要更多?

在本教程中,我们向您展示了如何在群集上安装Linkerd,如何将Linkerd作为服务附带工具添加到一个服务中(当该服务正在接收实时流量!)时,以及如何使用它调试运行时问题。但这只是冰山一角。我们甚至还没有触及Linkerd的可靠性或安全性功能!

Linkerd拥有一个繁荣的采用者和贡献者社区,我们非常希望您能加入其中。有关更多信息,请查看 docs 的GitHub 回购,加入 Linkerd松弛 和邮件列表( 使用者 , 开发商 , 宣布 ),当然 @linkerd 在Twitter上!我们迫不及待要您加入!