当前位置: 首页 > 科技观察

说说LinkerdSmi扩展介绍

时间:2023-03-19 17:35:15 科技观察

文末,本文转载自微信公众号《黑客下午茶》,作者是Shao。转载本文请联系黑客下午茶公众号。服务网格接口是Kubernetes上服务网格的标准接口。它定义了一组资源,可用于实现该资源的服务网格。您可以在规范中阅读更多相关信息。https://smi-spec.io/https://github.com/servicemeshinterface/smi-spec目前Linkerd支持SMI的TrafficSplit规范,可用于本地跨服务进行流量拆分。这意味着您可以在没有任何额外组件/配置的情况下应用SMI资源,但这显然有一些缺点,因为Linkerd可能无法添加特定于它的额外特定配置,因为SMI更像是服务网格功能的最小公分母.为了解决这些问题,Linkerd可以使用适配器将SMI规范转换为它可以理解和执行的本地Linkerd配置。这也消除了与SMI资源和控制平面的额外本机耦合,并且适配器可以独立移动并具有自己的发布周期。LinkerdSMI就是一个可以做到这一点的扩展。https://www.github.com/linkerd/linkerd-smi本指南将引导您安装SMI扩展并配置TrafficSplit规范以跨服务执行流量拆分。先决条件要使用本指南,您需要在集群上安装Linkerd。安装Linkerd-SMI扩展CLI通过运行以下命令安装SMI扩展CLI二进制文件:curl-sLhttps://linkerd.github.io/linkerd-smi/install|sh或者,您可以直接通过发布页面下载CLI。https://github.com/linkerd/linkerd-smi/releases第一步是将Linkerd-SMI扩展安装到您的集群上。此扩展包含一个SMI-Adaptor,可将SMI资源转换为本机Linkerd资源。要安装Linkerd-SMI扩展,请运行以下命令:linkerdsmiinstallkubectlapply-f-您可以通过运行以下命令验证Linkerd-SMI扩展是否已正确安装:linkerdsmicheckHelm要安装linkerd-smiHelmchart,请运行:helmrepoaddl5d-smihttps://linkerd.github.io/linkerd-smihelminstalll5d-smi/linkerd-smi--generate-name安装示例应用程序首先,让我们安装示例应用程序。#createanamespaceforthesampleapplicationkubectlcreatenamespacetrafficsplit-sample#installthesampleapplicationlinkerdinjecthttps://raw.githubusercontent.com/linkerd/linkerd2/main/test/integration/trafficsplit/testdata/application.yaml|kubectl-ntrafficsplit-sampleapply-f-这将安装一个简单的客户端和两个服务器部署。其中一个服务器部署,faling-svc总是返回500错误,而另一个,backend-svc总是返回200。客户端将访问backend-svc服务。这在edges子命令中很明显。linkerdvizedgesdeploy-ntrafficsplit-sampleSRCDSTSRC_NSDST_NSSECUREDprometheusbackendlinkerd-viztrafficsplit-sample√prometheusfailinglinkerd-viztrafficsplit-sample√prometheusslow-cookerlinkerd-viztrafficsplit-sample√slow-cookerbackendtrafficsplit-sampletrafficsplit-sample√配置流量拆分现在,让我们应用一个TrafficSplit资源在backend-svc上执行流量被拆分以在它和failing-svc之间分配负载。猫<注解:APIVersion:linkerd.io/v1alpha2Kind:ServiceProfileMetadata:CreationTimestamp:2021-08-02T12:0742f0-a7a8-9bbcf5e0e54eSpec:DstOverrides:Authority:backend-svc.trafficsplit-sample.svc.cluster.localWeight:500Authority:failing-svc.trafficsplit-sample.svc.cluster.localWeight:500Events:<无>正如我们所见,已创建具有DstOverrides的相关ServiceProfile以执行TrafficSplit。可以通过运行edges命令来验证流量拆分。linkerdvizedgesdeploy-ntrafficsplit-sampleSRCDSTSRC_NSDST_NSSECUREDprometheusbackendlinkerd-viztrafficsplit-sample√prometheusfailinglinkerd-viztrafficsplit-sample√prometheusslow-cookerlinkerd-viztrafficsplit-sample√slow-cookerbackendtrafficsplit-sampletrafficsplit-sample√slow-cookerfailingtrafficsplit-sampletrafficsplit-sample√这也可以通过在TrafficSplit资源上运行statsubcommandtoverify.linkerdvizstatts/backend-split-ntraffic-sampleNAMEAPEXLEAFWEIGHTSUCCESSRPSLATENCY_P50LATENCY_P95LATENCY_P99backend-splitbackend-svcbackend-svc500100.00%0.5rps1ms1ms1msbackend-splitbackend-svcfailing-svc5000.00%0.5rps1ms1ms1ms这也可以通过检查smi-adaptor日志来验证。kubectl-nlinkerd-smilogsdeploy/smi-adaptorsmi-adaptortime="2021-08-04T11:04:35Z"level=infomsg="Usingclusterdomain:cluster.local"time="2021-08-04T11:04:35Z"level=infomsg="StartingSMIController"time="2021-08-04T11:04:35Z"level=infomsg="Waitingforinformercachestosync"time="2021-08-04T11:04:35Z"level=infomsg="startingadminserveron:9995"time="2021-08-04T11:04:35Z"level=infomsg="Startingworkers"time="2021-08-04T11:04:35Z"level=infomsg="Startedworkers"time="2021-08-04T11:05:17Z"level=infomsg="createdserviceprofile/backend-svc.trafficsplit-sample.svc.cluster.localfortrafficsplit/backend-split"time="2021-08-04T11:05:17Z"level=infomsg="Successfullysynced'trafficsplit-sample/backend-split'"cleanup通过运行kubectldeletenamespace/trafficsplit-sample删除trafficsplit-sample资源结论但是,Linkerd目前支持直接读取TrafficSplit资源、ServiceProfiles始终优先于TrafficSplit资源在进一步的版本中将删除对TrafficSplit资源的支持,其中需要linkerd-smi扩展才能将SMI资源与Linkerd一起使用。