文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

让我们一起聊聊 Linkerd Smi 扩展入门

2024-12-02 18:11

关注

文末本文转载自微信公众号「黑客下午茶」,作者为少  。转载本文请联系黑客下午茶公众号。

Service Mesh Interface 是 Kubernetes 上服务网格的标准接口。它定义了一组资源,可用于实现该资源的服务网格。您可以在规范中阅读有关它的更多信息。

目前,Linkerd 支持 SMI 的 TrafficSplit 规范, 该规范可用于在本地执行跨服务的流量拆分。这意味着您可以在没有任何额外组件/配置的情况下应用 SMI 资源, 但这显然有一些缺点,因为 Linkerd 可能无法添加特定于它的额外特定配置, 因为 SMI 更像是服务网格功能的最小公分母。

为了解决这些问题,Linkerd 可以使用一个适配器, 将 SMI 规范转换为它可以理解和执行操作的原生 Linkerd 配置。这也消除了与 SMI 资源与控制平面的额外原生耦合, 并且适配器可以独立移动并拥有自己的发布周期。Linkerd SMI 是一个可以做到这一点的扩展。

本指南将引导您安装 SMI 扩展并配置 TrafficSplit 规范,以跨服务执行流量拆分(Traffic Splitting)。

前提条件

要使用本指南,您需要在集群上安装 Linkerd。

安装 Linkerd-SMI 扩展

CLI

通过运行以下命令安装 SMI 扩展 CLI 二进制文件:

  1. curl -sL https://linkerd.github.io/linkerd-smi/install | sh 

或者,您可以直接通过发布页面下载 CLI。

第一步是将 Linkerd-SMI 扩展安装到您的集群上。此扩展包含一个 SMI-Adaptor,可将 SMI 资源转换为原生 Linkerd 资源。

要安装 Linkerd-SMI 扩展,请运行以下命令:

  1. linkerd smi install | kubectl apply -f - 

您可以通过运行以下命令来验证 Linkerd-SMI 扩展是否已正确安装:

  1. linkerd smi check 

Helm

要安装 linkerd-smi Helm chart,请运行:

  1. helm repo add l5d-smi https://linkerd.github.io/linkerd-smi 
  2. helm install l5d-smi/linkerd-smi --generate-name 

安装示例应用程序

首先,让我们安装示例应用程序。

  1. create a namespace for the sample application 
  2. kubectl create namespace trafficsplit-sample 
  3.  
  4. # install the sample application 
  5. linkerd inject https://raw.githubusercontent.com/linkerd/linkerd2/main/test/integration/trafficsplit/testdata/application.yaml | kubectl -n trafficsplit-sample apply -f - 

这将安装一个简单的客户端和两个服务器部署。服务器部署之一,即 faling-svc 总是返回 500 错误, 而另一个,即 backend-svc 总是返回 200。

  1. kubectl get deployments -n trafficsplit-sample 
  2. NAME          READY   UP-TO-DATE   AVAILABLE   AGE 
  3. backend       1/1     1            1           2m29s 
  4. failing       1/1     1            1           2m29s 
  5. slow-cooker   1/1     1            1           2m29s 

默认情况下,客户端将访问 backend-svc 服务。这在 edges 子命令中很明显。

  1. linkerd viz edges deploy -n trafficsplit-sample 
  2. SRC           DST           SRC_NS                DST_NS                SECURED 
  3. prometheus    backend       linkerd-viz           trafficsplit-sample   √ 
  4. prometheus    failing       linkerd-viz           trafficsplit-sample   √ 
  5. prometheus    slow-cooker   linkerd-viz           trafficsplit-sample   √ 
  6. slow-cooker   backend       trafficsplit-sample   trafficsplit-sample   √ 

配置流量拆分

现在,让我们应用一个 TrafficSplit 资源在 backend-svc 上执行流量拆分, 以在它和 failing-svc 之间分配负载。

  1. cat <
  2. apiVersion: split.smi-spec.io/v1alpha2 
  3. kind: TrafficSplit 
  4. metadata: 
  5.   name: backend-split 
  6.   namespace: trafficsplit-sample 
  7. spec: 
  8.   service: backend-svc 
  9.   backends: 
  10.   - service: backend-svc 
  11.     weight: 500 
  12.   - service: failing-svc 
  13.     weight: 500 
  14. EOF 

因为 smi-adaptor 监视 TrafficSplit 资源, 它会自动创建相应的 ServiceProfile 资源来执行相同的操作。这可以通过检索 ServiceProfile 资源来验证。

  1. kubectl describe serviceprofile -n trafficsplit-sample 
  2. Name:         backend-svc.trafficsplit-sample.svc.cluster.local 
  3. Namespace:    trafficsplit-sample 
  4. Labels:        
  5. Annotations:   
  6. API Version:  linkerd.io/v1alpha2 
  7. Kind:         ServiceProfile 
  8. Metadata: 
  9.   Creation Timestamp:  2021-08-02T12:42:52Z 
  10.   Generation:          1 
  11.   Managed Fields: 
  12.     API Version:  linkerd.io/v1alpha2 
  13.     Fields Type:  FieldsV1 
  14.     fieldsV1: 
  15.       f:spec: 
  16.         .: 
  17.         f:dstOverrides: 
  18.     Manager:         smi-adaptor 
  19.     Operation:       Update 
  20.     Time:            2021-08-02T12:42:52Z 
  21.   Resource Version:  3542 
  22.   UID:               cbcdb74f-07e0-42f0-a7a8-9bbcf5e0e54e 
  23. Spec: 
  24.   Dst Overrides: 
  25.     Authority:  backend-svc.trafficsplit-sample.svc.cluster.local 
  26.     Weight:     500 
  27.     Authority:  failing-svc.trafficsplit-sample.svc.cluster.local 
  28.     Weight:     500 
  29. Events:          

正如我们所见,已经创建了一个带有 DstOverrides 的相关 ServiceProfile 来执行 TrafficSplit。

可以通过运行 edges 命令来验证流量拆分。

  1. linkerd viz edges deploy -n trafficsplit-sample 
  2. SRC           DST           SRC_NS                DST_NS                SECURED 
  3. prometheus    backend       linkerd-viz           trafficsplit-sample   √ 
  4. prometheus    failing       linkerd-viz           trafficsplit-sample   √ 
  5. prometheus    slow-cooker   linkerd-viz           trafficsplit-sample   √ 
  6. slow-cooker   backend       trafficsplit-sample   trafficsplit-sample   √ 
  7. slow-cooker   failing       trafficsplit-sample   trafficsplit-sample   √ 

这也可以通过在 TrafficSplit 资源上运行 stat 子命令来验证。

  1. linkerd viz stat ts/backend-split -n traffic-sample 
  2. NAME            APEX          LEAF          WEIGHT   SUCCESS      RPS   LATENCY_P50   LATENCY_P95   LATENCY_P99 
  3. backend-split   backend-svc   backend-svc      500   100.00%   0.5rps           1ms           1ms           1ms 
  4. backend-split   backend-svc   failing-svc      500     0.00%   0.5rps           1ms           1ms           1ms 

这也可以通过检查 smi-adaptor 日志来验证。

  1. kubectl -n linkerd-smi logs deploy/smi-adaptor smi-adaptor 
  2. time="2021-08-04T11:04:35Z" level=info msg="Using cluster domain: cluster.local" 
  3. time="2021-08-04T11:04:35Z" level=info msg="Starting SMI Controller" 
  4. time="2021-08-04T11:04:35Z" level=info msg="Waiting for informer caches to sync" 
  5. time="2021-08-04T11:04:35Z" level=info msg="starting admin server on :9995" 
  6. time="2021-08-04T11:04:35Z" level=info msg="Starting workers" 
  7. time="2021-08-04T11:04:35Z" level=info msg="Started workers" 
  8. time="2021-08-04T11:05:17Z" level=info msg="created serviceprofile/backend-svc.trafficsplit-sample.svc.cluster.local for trafficsplit/backend-split" 
  9. time="2021-08-04T11:05:17Z" level=info msg="Successfully synced 'trafficsplit-sample/backend-split'" 

清理

通过运行以下命令删除 trafficsplit-sample 资源

  1. kubectl delete namespace/trafficsplit-sample 

结论

 

不过,Linkerd 目前支持直接读取 TrafficSplit 资源,ServiceProfiles 总是优先于 TrafficSplit 资源。将在进一步的版本中删除对 TrafficSplit 资源的支持,在该版本中,需要 linkerd-smi 扩展以将 SMI 资源与 Linkerd 一起使用。

 

来源:黑客下午茶内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯