使用云原生管理平台 Meshery 进行可视化管理,部署和测试

作者:黄鑫,英特尔云原生软件开发工程师

Meshery 是什么?

Meshery[1],作为一个 CNCF 项目,是一个开源的云原生管理平台。你可以以可视化和多人协作的方式管理和部署你的基础设施,服务网格和工作负载。目前 Meshery 不仅可以管理 Kubernetes 集群上个任意资源,而且还集成了包括常见的服务网格以及各种 CNCF 项目在内的超过 260 个组件[2],从而帮助你可以更轻松地与集群进行交互,管理各个项目的生命周期。通过 Meshery,你可以掌控你的云原生环境。

除了基础功能,Meshery 还提供了一系列强大的工具,包括便捷的性能测试组件,各种项目的最佳实践模板,以及支持多人协作的 MeshMap 等等。

Meshery 的社区非常活跃,关注度也非常高。最近,Meshery 发布了 v0.7[3] 版本,在 Github[4] 上已经获得了超过 4K 的 Stars。值得一提的是,Meshery 在 200 多个 CNCF 项目中的增长速度位列第十!

作为 Meshery 的发起和维护方 Layer5[5] 也创建了一个 Slack 频道[6], 供 Meshery 开发者和用户们一起交流。

Meshery 与 Service Mesh

从 Meshery 的名字就可以看出,它与 Service Mesh 有着密切的关系。主流的 Service Mesh 通常分为数据平面(Data Plane)和控制平面(Control Plane)。数据平面负责处理网络流量,包括服务发现、负载均衡、流量控制、安全认证等功能。而控制平面则负责管理数据平面,包括配置、路由、策略、监控等功能。

在控制平面之上,我们还可以定义一层管理平面(Management Plane),用于统一管理和配置不同的 Service Mesh。Meshery 就是这一管理平面的软件实现,它提供了对不同 Service Mesh 的统一管理能力,使运维人员、开发者和应用服务提供者能够最大化地发挥 Service Mesh 的潜能。

Service Mesh 管理平面

Meshery 架构

让我们一起深入了解 Meshery 的架构和工作原理。下图描绘了 Meshery 的架构全貌:

Meshery 架构图

Meshery 可以通过 Docker 部署,或者直接安装在 Kubernetes 集群中。此外,Meshery 还提供了 Restful APIs,供各种客户端(如 UI,Mesheryctl 命令和脚本)进行连接。

Meshery Adapters 是一组负责管理各种服务网格生命周期的组件。目前,市面上的主流服务网格都有对应的 Adapter[7]。Adapters 通过 GRPC 的方式与 Meshery 连接。

在架构图的右边蓝色部分,是 Meshery 负责管理的 Kubernetes 集群。Meshery 会在该集群中部署 Meshery Operator,通过 MeshSync[8] 以获取和同步该集群的资源信息。有了这些信息,Meshery 就可以部署和管理服务网格和工作负载,并将集群的资源信息同步展示在 Meshery 的 UI 上。

此外,Meshery 还支持通过 HTTP 的方式获取集群上的 Prometheus 和 Grafana 信息和图表,并将其展示在 Meshery 的 UI 上。

想要了解更多关于 Meshery 架构的内容,请参考:https://docs.meshery.io/concepts/architecture[9]

请注意,Meshery 目前还处在快速开发阶段,最新的版本可能和文中介绍的版本在功能使用上有差异,请以 Meshery 官方文档为准。

使用 Meshery 可视化管理,部署和测试基础设施,服务网格和工作负载

让我们通过实际的操作流程,来探索 Meshery 是如何管理基础设施的。

部署 Meshery

Meshery 提供了两种部署方式:

部署在 Kubernetes 集群:

代码语言:javascript
复制
$ curl -L https://meshery.io/install | PLATFORM=kubernetes bash -

通过 Docker 的方式部署:

代码语言:javascript
复制
$ curl -L https://meshery.io/install | PLATFORM=docker bash -

登陆 Meshery UI

打开浏览器,访问 Meshery UI 的默认地址:http://<hostname>:9081。然后,使用你的账号登录 Meshery UI。

Meshery 登陆界面

连接 Kubernetes 集群

Meshery 会自动发现和连接主机上的 $HOME/.kube 目录下 kubeconfig 对应的集群,你也可以通过上传 kubeconfig 的方式,连接到指定的 Kubernetes 集群。

连接 Kubernetes 集群

使用 Meshery Adaptars 部署服务网格和工作负载

在 Lifecycle 页面你可以看到 Meshery Adaptars。以 Istio Adaptar 为例,你可以通过它部署和管理 Istio 以及一些示例应用。

Istio Adaptar

使用 Meshery Design 进行更精细的服务网格和工作负载部署

虽然 Meshery Adapters 的功能相对有限,但如果你想进行更精细的服务网格和工作负载配置,那么 Meshery Design 将是你的理想选择。Meshery Design 提供了基于 Open Application Model[10] 的配置方式,并提供了大量不同组件的配置模板,以简化 Meshery Design 配置的编写过程。目前,Intel® 已经上传了两个用于加速 Istio 中 TLS 握手过程的 Meshery Design,

(1). 使用 Intel® AVX-512 指令集(CryptoMB)卸载和加速 Istio 中的 TLS 握手[11]

(2). 使用 Intel® QAT 加速器卸载和加速 Istio 中的 TLS 握手 [12]

以 (1) 为例,我们来看看如何通过 Meshery Design 一键部署具有 Intel® 加速功能的 Istio。

首先,你可以通过 (1) 的 URL 直接将 Meshery Design 导入到 Meshery 中。当然,你也可以下载这个 Meshery Design,进行修改,然后通过文件上传的方式将其导入到 Meshery 中。

导入 Meshery Design

接下来,你就可以直接在 Kubernetes 集群中部署这个 Meshery Design 了。

Deploy Meshery Design

部署完成后,你可以看到集群中已经部署了 Istio,通过查看 Istio ingressgateway pod 的信息,你会发现 Intel® AVX-512 (CryptoMB)的 Key Provider 配置已经生效。

)

使用 Meshery 部署工作负载

在之前提到的 Lifecycle 页面,你可以对某个 namespace 进行 Sidecar 注入,然后部署一些简单的示例应用,如 Istio HTTPBin:

Sidecar 注入

HTTPBin 部署

此外,你还可以在 Configuration - Applications 页面中,通过 Helm Chart,Docker Compose 或者 Kubernetes Manifest 的方式导入自己的应用。以做性能测试经常用的到 Fortio[13] 为例,我们上传了一个 fortio-server-manifests.yaml[14],通过它可以一键部署 Fortio test server 应用到集群中,以便后面做性能测试时使用:

Fortio test server

使用 Meshery 部署和连接 Prometheus 和 Grafana

在 Lifecycle 页面中,你也可以一键部署 Prometheus 和 Grafana,也可以通过右上角的设置按钮进入到 Metrics 设置页面,通过 URL 的方式连接和配置 Prometheus 和 Grafana,Meshery 则会获取对应的 Metrics 数据和图表。

Metrics 配置

使用 Meshery 进行性能测试

Meshery 提供了一个易于使用的界面,让你可以创建性能配置文件,并使用相同的配置重复运行性能测试。你甚至可以通过日历安排在特定时间运行性能测试。

值得一提的是,Meshery 采用了 Service Mesh Performance(SMP)这一中立规范标准,以捕获和描述性能测试的结果。关于 SMP 性能测试规范的详细介绍,你可以参考 SMP 官方网站[15]

进入到 Performance 页面,点击 Run Test,你就可以创建一个新的性能配置文件。以之前部署的 Fortio test server 为例,你只需要输入对应的 application url(这里省略了额外配置 virtual service,gateway,以及创建证书的过程),想要测试的请求数,QPS,测试时间,以及 Load generator。此外,你还可以通过 Advanced Options 进行更多的配置,比如上传证书等等。

性能测试文件

然后,点击 Save Profile,就可以将配置文件保存下来,以便重复使用。当然,也可以点击 Run Test,直接进行性能测试。

MeshMap 功能预览

MeshMap 是 Meshery 的一项预览扩展,它提供了两种模式:Designer 和 Visualizer,以可视化和多人协作的方式与我们的基础设施进行交互。接下来,我们将预览如何使用 Meshery MeshMap 来设计 Meshery Design,将它们部署到我们的集群,并最终通过可视化的方式验证部署。

MeshMap

在 Design 页面中,你可以通过拖放资源的方式来创建自己的 Meshery Design,或者直接使用其他人创建的 Design。例如,你可以搜索 “QAT-TLS-handshake-acceleration-for-Istio”,然后你将看到该 Design 中的所有组件。:

QAT-TLS-handshake-acceleration-for-Istio Design

你还可以将另一个 Design 合并到当前 Design 中:

Design 合并

然后就可以在集群中验证并部署当前 Design:

验证并部署 Design

最后,让我们转到 Visualize 页面,它展示出了整个集群中的资源,通过它你可以检查 Design 的部署是否成功,也可以执行一些额外的操作,例如执行性能测试、查看任意 Pod 的日志等等。

MeshMap Visualize

其他

除了上述功能,Meshery 还提供了多人协作和 Wasm Plugin 集成等功能。在 IstioCon 2023 上的演讲 Multiplayer Istio: Collaborative WASM Plugins with Intel and Layer5 - Lee Calcote & Xin Huang[16] 中, 你可以更加清晰地了解如何通过 Meshery 以多人协作的方式创建并部署带有 Wasm Plugin 的 Desgin。

总结

本文深入地介绍了 Meshery 这一款强大的云原生管理平台,它以直观和高效的方式帮助用户管理和部署服务网格和工作负载。总的来说,借助 Meshery,用户可以更轻松地掌握他们的云原生环境,并探索和扩展 Service Mesh 的可能性。无论你是云原生技术的初学者,还是经验丰富的专家,Meshery 都将是你理想的工具,帮助你更好地发挥云原生技术的潜力!

参考资料

[1]

Meshery: https://meshery.io/

[2]

包括常见的服务网格以及各种 CNCF 项目在内的超过 260 个组件: https://meshery.io/integrations

[3]

v0.7: https://meshery.io/blog/meshery-v07-release-announcement

[4]

Github: https://github.com/meshery/meshery

[5]

Layer5: https://layer5.io/

[6]

Slack 频道: https://slack.layer5.io/

[7]

Adapter: https://docs.meshery.io/concepts/architecture/adapters#meshery-adapters-for-lifecycle-management

[8]

MeshSync: https://docs.meshery.io/concepts/architecture/meshsync

[9]

https://docs.meshery.io/concepts/architecture: https://docs.meshery.io/concepts/architecture

[10]

Open Application Model: https://oam.dev/

[11]

使用 Intel® AVX-512 指令集(CryptoMB)卸载和加速 Istio 中的 TLS 握手: https://raw.githubusercontent.com/meshery/meshery.io/master/catalog/28715e69-c6c1-4f96-bfa2-05113b00bae0.yaml

[12]

使用 Intel® QAT 加速器卸载和加速 Istio 中的 TLS 握手 : https://raw.githubusercontent.com/meshery/meshery.io/master/catalog/05e97933-90a6-4dd3-9b29-18e78eb4d3f1.yaml

[13]

Fortio: https://fortio.org/

[14]

fortio-server-manifests.yaml: https://raw.githubusercontent.com/intel/istio/release-1.19-intel/intel/yaml/fortio-server-manifests.yaml

[15]

SMP 官方网站: https://smp-spec.io

[16]

Multiplayer Istio: Collaborative WASM Plugins with Intel and Layer5 - Lee Calcote & Xin Huang: https://www.youtube.com/watch?v=EeH6Tj7mT4g&list=PLj6h78yzYM2POFY48pI25ASn2K-xi-7Iu