Linkerd SMI 扩展入门

本文涉及的产品
可观测监控 Prometheus 版,每月50GB免费额度
简介: Linkerd SMI 扩展入门

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



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


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


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


前提条件



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


安装 Linkerd-SMI 扩展



CLI

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


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


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

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

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


linkerd smi install | kubectl apply -f -


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


linkerd smi check


Helm


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


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


安装示例应用程序



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


# create a namespace for the sample application
kubectl create namespace trafficsplit-sample
# install the sample application
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


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


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


linkerd viz edges deploy -n trafficsplit-sample
SRC           DST           SRC_NS                DST_NS                SECURED
prometheus    backend       linkerd-viz           trafficsplit-sample   √
prometheus    failing       linkerd-viz           trafficsplit-sample   √
prometheus    slow-cooker   linkerd-viz           trafficsplit-sample   √
slow-cooker   backend       trafficsplit-sample   trafficsplit-sample   √


配置流量拆分


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


cat <<EOF | kubectl apply -f -
apiVersion: split.smi-spec.io/v1alpha2
kind: TrafficSplit
metadata:
  name: backend-split
  namespace: trafficsplit-sample
spec:
  service: backend-svc
  backends:
  - service: backend-svc
    weight: 500
  - service: failing-svc
    weight: 500
EOF


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


kubectl describe serviceprofile -n trafficsplit-sample
Name:         backend-svc.trafficsplit-sample.svc.cluster.local
Namespace:    trafficsplit-sample
Labels:       <none>
Annotations:  <none>
API Version:  linkerd.io/v1alpha2
Kind:         ServiceProfile
Metadata:
  Creation Timestamp:  2021-08-02T12:42:52Z
  Generation:          1
  Managed Fields:
    API Version:  linkerd.io/v1alpha2
    Fields Type:  FieldsV1
    fieldsV1:
      f:spec:
        .:
        f:dstOverrides:
    Manager:         smi-adaptor
    Operation:       Update
    Time:            2021-08-02T12:42:52Z
  Resource Version:  3542
  UID:               cbcdb74f-07e0-42f0-a7a8-9bbcf5e0e54e
Spec:
  Dst Overrides:
    Authority:  backend-svc.trafficsplit-sample.svc.cluster.local
    Weight:     500
    Authority:  failing-svc.trafficsplit-sample.svc.cluster.local
    Weight:     500
Events:         <none>


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


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


linkerd viz edges deploy -n trafficsplit-sample
SRC           DST           SRC_NS                DST_NS                SECURED
prometheus    backend       linkerd-viz           trafficsplit-sample   √
prometheus    failing       linkerd-viz           trafficsplit-sample   √
prometheus    slow-cooker   linkerd-viz           trafficsplit-sample   √
slow-cooker   backend       trafficsplit-sample   trafficsplit-sample   √
slow-cooker   failing       trafficsplit-sample   trafficsplit-sample   √


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


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


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


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


清理



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


kubectl delete namespace/trafficsplit-sample


结论


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

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
相关文章
|
6月前
|
Kubernetes 安全 API
Cilium 系列 -3-Cilium 的基本组件和重要概念
Cilium 系列 -3-Cilium 的基本组件和重要概念
|
6月前
|
Kubernetes 应用服务中间件 nginx
Kubernetes服务网络Ingress网络模型分析、安装和高级用法
Kubernetes服务网络Ingress网络模型分析、安装和高级用法
147 5
|
6月前
|
Kubernetes 网络协议 Docker
K8S核心插件-coredns服务
K8S核心插件-coredns服务
67 0
MoE 系列(七)| Envoy Go 扩展之沙箱安全
在本系列的第 5 篇《MoE 系列(五)|Envoy Go 扩展之内存安全》中我们介绍了内存安全如何实现。第 6 篇《MoE 系列(六)| Envoy Go 扩展之并发安全》又谈到了并发场景下的内存安全。今天,我们来到了安全性的最后一篇:沙箱安全,也是相对来说,最简单的一篇。
|
canal 存储 Kubernetes
Kubernetes 之7大CNI 网络插件用法和对比
的通信,支持多种网络后端,如 VXLAN、UDP 和 Host-GW。 Calico:Calico 是一种基于 BGP 的网络插件,它使用路由表来路由容器之间的流量,支持多种网络拓扑结构,并提供了安全性和网络策略功能。 Canal:Canal 是一个组合了 Flannel 和 Calico 的网络插件,它使用 Flannel 来提供容器之间的通信,同时使用 Calico 来提供网络策略和安全性功能。 Weave Net:Weave Net 是一种轻量级的网络插件,它使用虚拟网络技术来为容器提供 IP 地址,并支持多种网络后端,如 VXLAN、UDP 和 TCP/IP,同时还提供了网络策略
5959 0
|
Kubernetes Cloud Native Go
MoE 系列(三)|使用 Istio 动态更新 Go 扩展配置
上一篇我们用 Go 扩展实现了 Basic Auth,体验了 Go 扩展从 Envoy 接受配置。之所以这么设计,是想复用 Envoy 原有的 xDS 配置推送通道,今天我们就来体验一番,云原生的配置变更。
|
Kubernetes 容器
目前为止最全的Kubernetes最新版核心命令
目前为止最全的Kubernetes最新版核心命令
|
调度 Perl 容器
开源工具GPU Sharing:支持Kubernetes集群细粒度
问题背景 全球主要的容器集群服务厂商的Kubernetes服务都提供了Nvidia GPU容器调度能力,但是通常都是将一个GPU卡分配给一个容器。这可以实现比较好的隔离性,确保使用GPU的应用不会被其他应用影响;对于深度学习模型训练的场景非常适合,但是如果对于模型开发和模型预测的场景就会比较浪费。
16340 0
|
存储 Kubernetes API
浅入Kubernetes(13):dash mboard、api、访问配置
浅入Kubernetes(13):dash mboard、api、访问配置
404 0
浅入Kubernetes(13):dash mboard、api、访问配置
|
Kubernetes Linux 应用服务中间件
Kubernetes 网络插件工作原理
网络插件的主要工作就在于为容器提供网络环境,包括为 pod 设置 ip 地址、配置路由保证集群内网络的通畅。目前比较流行的网络插件是 Flannel 和 Calico。
688 0