本文篇幅稍长,阅读本文将了解以下内容:

•什么是 osm-edge 及其产生背景•边缘计算与中心云计算的差异,以及带来的挑战•osm-edge 的设计及采用的技术•5 分钟快速体验边缘服务网格

关于 osm-edge

osm-edge 是针对边缘计算环境设计的服务网格,采用 osm[1] 作为控制平面,采用 Pipy[2] 作为数据平面,具有高性能、低资源、简单、易用、易扩展、广泛兼容(支持x86/arm64/龙芯/RISC-V)的特点。

基于 osm 的控制平面,osm-edge 充分支持 SMI[3] 规范;通过搭配使用支持 ingress、gateway API、跨集群服务发现的 fsm[4],"osm+fsm" 套件提供了完整的" k8s 集群内+多集群"的"东西+南北"流量管理和服务治理能力。

osm-edge 的开发和测试环境采用k3s[5]、k8e[6] 等流行的边缘计算 k8s 发行版,目标是 osm-edge 用户可以快速低成本的在 x86、arm、RISC-V、龙芯等硬件平台上部署低资源高性能的服务网格,以更好的支撑微服务架构在低能耗的边缘计算场景运行。

osm-edge 已经在 GitHub 上开源,仓库地址[7]:https://github.com/flomesh-io/osm-edge,也可访问 osm-edge 文档中心[8]了解更多内容:https://osm-edge-docs.flomesh.io。

现邀请感兴趣的小伙伴参与内测,参与内测并提交测试结果的小伙伴将获得由 Flomesh 提供的小礼物。感兴趣的小伙伴可以微信联系 张晓辉(微信 duwasai,邮箱 tyrael@flomesh.io[9])。

产生的背景

在实际工作中,我们遇到多种行业的用户对服务网格提出了类似的需求。这些行业用户和场景包括:

•能源和电力公司。他们希望在每个变电站或者加油站建立简易的机房,部署计算和存储能力,用于对该地点覆盖范围内设备产生的数据的处理。他们希望把传统数据中心的应用推向这些简易机房,并充分采用数据中心的应用管理和运维能力•车联网服务提供商。他们希望在非数据中心的环境建立自己的简易计算环境用于数据采集以及提供服务给车和车主。这些环境可能是公路近距离的位置,或者停车场,以及车流密集的地方•零售商。他们希望在每个商店建立最简的计算环境,除了支撑传统的进存销、收付款等能力,也希望引入新的数据采集、加工、传输能力•医疗机构。他们希望在每个医院,或者是简易的医疗点,提供网络能力,除了面向患者的提供数字化服务能力,也同时完成数据采集,以及和上级管理部门的数据联动•校园、医院等园区。这些园区具有人员相对固定且人流密集的特点。他们希望在更多的人群聚集点附近部署计算资源,用于交付数字化服务,以及采集和处理实时的数据

这些都是典型的边缘计算场景,他们具有相似的需求:

•用户希望把传统数据中心的计算模式,尤其是微服务,以及相关的应用交付、管理运维能力带到边缘侧•在工作环境方面,用户需要面对电力供应、算力有限、不稳定的网络等因素。因此需要计算平台具有更强的鲁棒性,在极端的情况下可以快速部署或者完整恢复一个计算环境•通常需要部署的位置(我们称为 POP=Point of Presence)数量众多,而且在不断的发展和扩展。因此需要更加精细的控制计算成本,一个 POP 点的造价、维护价格、扩容价格都成为重要的成本考量因素•普通的、或者低端的 PC 服务器更多的被用于这些场景用于替代云端标准的服务器;基于 ARM 等低功耗技术的算力同时进一步替代低端 PC 服务器。在这些不能媲美云端标准服务器的硬件平台上,用户仍然希望拥有足够的算力以应对功能和数据量的增长。计算向靠近数据产生的位置前移、边缘侧数据量和功能需求的增长、边缘侧计算资源的有限性,这互相矛盾的三者要求边缘侧计算平台拥有更好的计算能效比,也就是用尽可能少的电、尽可能少的服务器、运行更多的应用、支撑更大的数据量•POP 点的脆弱性和数量庞大的特点,要求应用更好的支持多集群、跨 POP 的故障迁移。比如某个 POP 点出现故障,那么临近的 POP 点可以快速的分担甚者临时接管这些计算任务

相比于云端数据中心的计算场景,边缘计算三个核心和主要的差异和难点在于:

•边缘计算要求支持异构的硬件架构。我们看到非 x86 的算力正在边缘被广泛的使用,他们通常具有低功耗、低成本的优势•边缘计算 POP 点是脆弱的。这种脆弱性体现在他们可能没有极高可靠度的供电,或者是供电的功率不像数据中心一样大;他们的运行环境可能更差,而不是数据中心的恒温通风环境;他们的网络可能是窄带和不稳定的•边缘计算是天然的分布式计算。几乎所有的边缘计算场景,都有多个 POP 点,而且 POP 点的数量在持续增加。POP 点之间可以互相灾备,发生故障时可以向临近 POP 点迁移,是边缘计算的基础能力

k8s 向边缘侧的演进,在一定程度上解决了边缘计算的难点,尤其是对抗脆弱性;而服务网格向边缘侧发展,则侧重边缘计算中网络问题,对抗网络的脆弱性,以及对分布式提供基础网络支持,如故障迁移。在实践中,容器平台作为今天事实上准标准的应用交付手段,正在快速的向边缘侧演进,出现了大批针对边缘特征的发行版,典型的如 k3s;但是服务网格作为容器平台的重要网络扩展,并没有很快的跟上这个趋势。事实上,目前用户很难发现针对边缘计算场景的服务网格,因此我们启动了 osm-edge 开源项目,几个重要的考量和目标是:

•支持和兼容 SMI 规范,这样可以满足用户对服务网格管理标准化的需求•对于 ARM 生态的充分支持。ARM 作为边缘计算的“一等公民”甚至首选计算平台,服务网格应该也充分适配、满足这种趋势。事实上,osm-edge 是遵循 “ARM First” 的策略,也就是所有的功能都是优先在 ARM 平台完成开发、测试,并具备交付能力•高性能且低资源。服务网格作为基础设施,在边缘侧应该使用更少的资源(CPU/MEM)同时交付更高的性能(TPS/Latency)

采用的技术

从设计视角,osm-edge 主要包括如下几个大的功能领域;同时从实现角度,我们选择了对应的组件和技术:

•兼容 SMI 规范且轻量易用的控制平面。这个环节我们选择了 osm[10],选择的理由是包括支持 SMI 规范、轻量化、易用。该组件主要功能包括:1.兼容和支持 SMI 规范2.单一 k8s 集群内的东西流量的配置3.流量拦截和 sidecar 的注入4.证书管理•轻量化、高性能、低资源的 sidecar 代理。这个环节我们选择了 pipy[11],该组件主要的功能包括:1.支持 SMI 规范所需要的各种网络功能,如代理、路由、负载均衡、多路复用、故障迁移2.支持微服务所需要的各种功能,如服务发现、流量标签/灰度发布、熔断、降级、限流、限速3.支持应用网络所需要的各种功能,如链路加解密、内容加验签4.对 MQTT 的良好支持,MQTT 作为边缘计算的重要协议之一,服务网格在边缘计算场景下,应该像支持 HTTP 一样的支持 MQTT5.对多路复用的支持,在某些场景下,POP 点和云端连接的网络可能是窄带和不稳定的,多路复用网络技术可以很好的支持数据的快速、稳定传输•南北流量管理和跨集群能力。这个环境我们选择了集成 fsm[12],该组件可以使用 osm 标准客户端部署,完成的功能主要包括:1.Ingress/Egress 和 Gateway API 的支持2.跨容器集群的服务发现和路由策略管理3.跨集群流量调度和故障迁移

架构

从控制平面的视角,对于熟悉 osm 架构的用户,osm-edge 在 osm 基础上扩展、替换、增加了如下组件:

•Sidecar driver:该组件实现了sidecar和控制平面接口标准化,用户可以选择不同的 sidecar proxy 实现。该组件默认采用 Pipy proxy[13]•Pipy sidecar:该组件替换了标准 osm 的 Envoy proxy;同时作为兼容,用户可以通过 sidecar driver 配置使用 envoy 或者其他的 sidecar proxy•Ingress:该组件来源于 fsm[14],提供了标准的 ingress 和 Gateway API

我们已经向 osm 社区提交了 Sidecar driver 设计的 proposal[15],以增强 osm 在代理控制平面的开放性设计。有了 sidecar dirver 的引入,各家代理厂商可以提供针对不同代理的实现,使 osm 可以支持多重不同的数据平面代理。

快速体验

以下演示如何在 5 分钟之内,下载、安装、运行 osm-edge,并部署一个演示应用,并完成链路加密、访问控制、流量分割等 SMI 标准功能。该演示使用 x86 版本的 Ubuntu 21,运行v1.23.8+k3s1版本的 k3s。更多版本和平台的支持,请参考完整的新手上路文档[16]

先决条件

一个运行中的 Kubernetes 集群,可以通过下面的命令快速创建 k3s 单节点集群:

export INSTALL_K3S_VERSION=v1.23.8+k3s1
curl -sfL https://get.k3s.io | sh -s - --disable traefik --write-kubeconfig-mode 644 --write-kubeconfig ~/.kube/config

osm-edge 支持的最低 Kubernetes 版本为 1.19。

下载并安装 osm-edge 命令行工具

system=$(uname -s | tr [:upper:] [:lower:])
arch=$(dpkg --print-architecture)
release=v1.1.0
curl -L https://github.com/flomesh-io/osm-edge/releases/download/${release}/osm-edge-${release}-${system}-${arch}.tar.gz | tar -vxzf -
./${system}-${arch}/osm version
cp ./${system}-${arch}/osm /usr/local/bin/

在 Kubernetes 上安装 osm-edge

此命令启用 Prometheus[17]、Grafana[18] 和 Jaeger[19] 集成

export osm_namespace=osm-system
export osm_mesh_name=osm osm install \--mesh-name "$osm_mesh_name" \--osm-namespace "$osm_namespace" \--set=osm.enablePermissiveTrafficPolicy=true \--set=osm.deployPrometheus=true \--set=osm.deployGrafana=true \--set=osm.deployJaeger=true \--set=osm.tracing.enable=true

部署演示应用

演示应用包括了如下服务:

bookbuyer 是一个 HTTP 客户端,它发送请求给 bookstore。这个流量是允许的。•bookthief 是一个 HTTP 客户端,很像 bookbuyer,也会发送 HTTP 请求给 bookstore。这个流量应该被阻止。•bookstore 是一个服务器,负责对 HTTP 请求给与响应。同时,该服务器也是一个客户端,发送请求给 bookwarehouse 服务。这个流量是被允许的。•bookwarehouse 是一个服务器,应该只对 bookstore 做出响应。bookbuyer 和 bookthief 都应该被其阻止。•mysql 是一个 MySQL 数据库,只有 bookwarehouse 可以访问。

使用如下命令部署这些服务:

kubectl create namespace bookstore
kubectl create namespace bookbuyer
kubectl create namespace bookthief
kubectl create namespace bookwarehouse
osm namespace add bookstore bookbuyer bookthief bookwarehouse
kubectl apply -f https://raw.githubusercontent.com/flomesh-io/osm-edge-docs/main/manifests/apps/bookbuyer.yaml
kubectl apply -f https://raw.githubusercontent.com/flomesh-io/osm-edge-docs/main/manifests/apps/bookthief.yaml
kubectl apply -f https://raw.githubusercontent.com/flomesh-io/osm-edge-docs/main/manifests/apps/bookstore.yaml
kubectl apply -f https://raw.githubusercontent.com/flomesh-io/osm-edge-docs/main/manifests/apps/bookwarehouse.yaml
kubectl apply -f https://raw.githubusercontent.com/flomesh-io/osm-edge-docs/main/manifests/apps/mysql.yaml

把每个服务的GUI端口对外暴露,这样用浏览器我们可以访问这些端口,观察演示的现象。

git clone https://github.com/flomesh-io/osm-edge.git -b main
cd osm-edge
cp .env.example .env
./scripts/port-forward-all.sh #可以忽略错误信息

在一个浏览器中,打开下面的 URL:

注意:如果需要从宿主机访问,需要将 localhost 替换成虚拟机的 IP 地址;或者在宿主机上运行 port-forward-all.sh脚本。

•http://localhost:8080 - bookbuyer•http://localhost:8083 - bookthief•http://localhost:8084 - bookstore

访问控制

通过上面的命令安装 osm-edge,所有的服务都是没有访问控制的(宽松流量模式),或者说所有的访问都是允许的。通过在浏览器中观察每个服务的页面数量增长可以看到没有访问控制时候的情况:

在 bookbuyerbookthief UI 中的计数分别对应了购买和盗窃的书籍数量,而在 bookstore-v1 中这些都应该在增加:

•http://localhost:8080 - bookbuyer•http://localhost:8083 - bookthief

在 bookstore UI 中的对于书籍销售的计数也应该在增加:

•http://localhost:8084 - bookstore

接下来演示通过禁用宽松流量策略模式,拒绝对 bookstore 服务的访问:

kubectl patch meshconfig osm-mesh-config -n osm-system -p '{"spec":{"traffic":{"enablePermissiveTrafficPolicyMode":false}}}'  --type=merge

此时会发现计数将不再增加。

现在执行下面的命令,放行 bookbuyer 对 bookstore 的访问:

kubectl apply -f https://raw.githubusercontent.com/flomesh-io/osm-edge-docs/main/manifests/access/traffic-access-v1.yaml

这里再去查看 bookbuyer 和 bookstoreUI,会发现计数恢复增加,而 bookthiefUI 的计数仍然停止。

通过访问控制,我们成功阻止 bookthief从 bookstore 盗窃书籍,而正常的购买不受影响。

可观测性

Metrics

使用下面的命令开启命名空间下的 metrics 采集,否则前面创建的 Pod 产生的 metrics 并不会被采集:

osm metrics enable --namespace "bookstore,bookbuyer,bookthief,bookwarehouse"

在执行了端口转发脚本之后,在浏览器中打开 http://localhost:3000 可以访问已经安装的 Grafana,默认的用户名和密码分别为 adminadmin

osm-edge 内置了多个 dashboard 提供控制平面和数据平面各项指标的可视化展示。比如下图中展示的是 bookthief 服务的 pod http://localhost:3000 访问其他 service 的指标:

下图展示的是 bookthief 以 deployment 为粒度,访问其他 service的指标。与上个图的差别在于,假如 bookthief 有多个副本,这里会展示所有副本的汇总数据:

接下来展示的 osm-edge 组件、以及网格基础信息等的指标:

Tracing

在浏览器中输入 http://localhost:16686/search 可访问 Jaeger 的仪表板:

仪表板中可以查询服务相关的 tracing 信息:

展示服务拓扑图:

Logging

osm-edge 控制平面将诊断日志输出到了标准输出上,用于服务网格的管理,可以通过调整日志的级别来控制日志信息的输出。输出到标准输出上的日志,可以通过日志采集工具采集聚合并存储。

卸载服务网格

在完成 osm-edge 的快速体验后,如果要卸载全部与之相关的资源,就需要删除这些示例应用和相关的 SMI 资源,并且卸载掉 osm-edge 控制平面和集群范围内的 osm-edge 资源。

删除示例应用:

kubectl delete ns bookbuyer bookthief bookstore bookwarehouse

卸载控制平面:

osm uninstall mesh

总结

通过这篇文章我们介绍了边缘计算中不断出现的多样化的需求,以及对网络基础设施带来的挑战。osm-edge 将服务网格向边缘进一步延伸,使得原本在中心云计算中才能使用的服务网格在边缘场景中的应用变成可能。同时 osm-edge 实现了 SMI(服务网格接口规范),提供服务网格的通用功能。阅读本文之后,可能会发现边缘服务网格实际上不仅仅用于边缘计算,中心云计算大规模、高密度的部署同样适合。

在下一篇文章中,将通过数据平面的基准测试来为大家呈现 osm-edge 如何以高性能、低资源特性应对边缘计算的基础网络需求。

引用链接

[1] osm: https://github.com/openservicemesh/osm
[2] Pipy: https://github.com/flomesh-io/pipy
[3] SMI: https://github.com/servicemeshinterface/smi-spec
[4] fsm: https://github.com/flomesh-io/fsm
[5] k3s: https://k3s.io/
[6] k8e: https://getk8e.com
[7] 仓库地址: https://github.com/flomesh-io/osm-edge
[8] osm-edge 文档中心: https://osm-edge-docs.flomesh.io
[9] tyrael@flomesh.io: mailto:tyrael@flomesh.io
[10] osm: https://github.com/openservicemesh/osm
[11] pipy: https://github.com/flomesh-io
[12] fsm: https://github.com/flomesh-io/fsm
[13] Pipy proxy: https://github.com/flomesh-io
[14] fsm: https://github.com/flomesh-io/fsm
[15] Sidecar driver 设计的 proposal: https://github.com/openservicemesh/osm/issues/4874
[16] 新手上路文档: https://osm-edge-docs.flomesh.io/docs/getting_started/
[17] Prometheus: https://github.com/prometheus/prometheus
[18] Grafana: https://github.com/grafana/grafana
[19] Jaeger: https://github.com/jaegertracing/jaeger

边缘服务网格 osm-edge相关推荐

  1. Envoy Proxy的多面性:边缘网关、服务网格和混合网桥

    在美国西雅图召开的首届EnvoyCon大会上,来自Pinterest.Yelp和Groupon的工程师们展示了他们目前的Envoy Proxy用例.最重要的信息是,Envoy Proxy似乎离实现他们 ...

  2. 网格边缘试探--服务网格的探索与实践

    导读 近些年来,以服务网格为代表的云原生技术成为技术开发人员的热门话题.从某种意义来说,云原生运动改变了微服务体系架构中应用程序设计与开发的方方面面.服务网格作为云原生中最典型的技术代表,它解决了以前 ...

  3. 阿里云服务网格 ASM 发布新功能:提供更精细化的服务治理能力

    简介:服务网格作为服务间通信的基础设施层,吸引了越来越多的用户使用.阿里云服务网格 ASM 将继续为开发者带来便利.9月1日,阿里云服务网格( ASM )产品经理问思为大家解读近期 ASM 发布的一些 ...

  4. Beyond Istio OSS——Istio服务网格的现状与未来

    作者:宋净超(Jimmy Song),原文地址:https://jimmysong.io/blog/beyond-istio-oss/ 本文根据笔者在 GIAC 深圳 2022 年大会上的的演讲< ...

  5. 低复杂度 - 服务网格的下一站

    译者: 作为一个曾经在新造车公司的基础架构团队任职,为支持公司的"互联网基因"和"数字化转型"落地了云原生基础设施平台,并在尝试采用服务网格未成的我来说,看到这 ...

  6. 技术盘点:2022 年容器、Serverless、可观测、服务网格有哪些值得关注的趋势?

    阿里云智能总裁张建锋在2021云栖大会分享 2021 年,云原生取得很多重要进展.2022 年又有哪些值得关注的趋势?阿里云资深技术专家李国强(崭岩)做客 InfoQ 视频号,对云原生趋势做了最新的解 ...

  7. Istio 网关之南北向流量管理(内含服务网格专家亲自解答)

    作者 | 王夕宁  阿里巴巴高级技术专家 参与阿里巴巴云原生公众号文末留言互动,有机会获得赠书福利! 本文摘自于由阿里云高级技术专家王夕宁撰写的<Istio 服务网格技术解析与实践>一书, ...

  8. 微服务的下一步,离不开服务网格

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取 软件行业走了很长一段路,在整个过程中,软件体系结构也已经发展了很多.经历了 ...

  9. 学习搭建 Consul 服务发现与服务网格-有丰富的示例和图片

    第一部分:Consul 基础 1,Consul 介绍 官网文档描述:Consul 是一个网络工具,提供功能齐全的服务网格和服务发现. 它可以做什么:自动化网络配置,发现服务并启用跨任何云或运行时的安全 ...

最新文章

  1. bootstrap-翻页-对齐链接
  2. 结对-结对编项目贪吃蛇-设计文档
  3. 阿里云年会人机大战-技术大揭秘
  4. d3.js 教程 模仿echarts柱状图
  5. 不爱读书怎么办?用这个新奇的方法,熟知137亿年来的地球通史
  6. nyoj--82--一笔画问题
  7. 使用spring ioc基于纯xml配置模拟crud
  8. 典型信息化案例点评(2)
  9. 设计模式之适配器与外观模式(二)
  10. 从零开始学习OpenWrt完美教程
  11. 紫书刷题记录 UVa1572 自组合
  12. EXCEL文件转换PDF文件
  13. java网络编程--UDP程序设计
  14. 计算机毕业设计JavaVue.js音乐播放器设计与实现(源码+系统+mysql数据库+lw文档)
  15. 中值滤波 matlab程序实现(一)
  16. 《Neural Collaborative Filtering》NCF模型的理解以及python代码
  17. python抓取360图片之马自达
  18. [从头读历史] 第252节 春秋时期各诸侯国的地域分布
  19. 【评弹】夺印-夜访 歌词 盛小云
  20. “日本以太坊”Cardano的“区域自治”王国

热门文章

  1. mw325r服务器无响应,水星(MERCURY)路由器MW325R上不了网/连不上网的解决方法
  2. LabVIEW——波形图总结
  3. 【Python_046】网页爬虫(绕过SSH认证)
  4. Linux 重启nginx服务
  5. 数据库实体联系模型与关系模型
  6. 如何把云服务器恢复到最原始的状态
  7. 电脑软件测试英雄联盟,lol电脑配置检测,如何测试自己的网络玩lol的具体情况?...
  8. Excel也能调用HFSS?
  9. jme-旋转的双子星
  10. 小X与神牛(dfs)