作者:移动Labs 2023-09-17 17:59:28
云计算 本文将会从拓展终端算力的视角出发,逐一剖析目前主要的云-边应用调度方案,并汇总各方案的优劣,希望能在云-边一体化调度方案选择方面给予一定的参考。
图1
如上图1所示,在《AI边缘计算技术白皮书》[5]中提出的边缘计算体系定义中,以云数据中心为核心,将边缘计算划分为三个层级:
综合比较以上三个边缘计算不同层级的特性,可以看出物边缘就是利用了用户终端的算力来处理简单的事务,无法扩展算力以满足云渲染、大数据分析、AI智能服务等重算力场景的需求;而移动边缘也有空间和配电的先天限制,无法扩展太多的算力来给用户终端提供重算力的云计算服务。云边缘既具备云计算中心的重算力储备特点,又贴近用户终端进行部署,应该作为拓展用户终端算力的首选解决方案。
在单一云中心节点的基础上增加了多个边缘云节点后(如下图2),应用服务的运维管理复杂度会成倍增加,而且多个边缘节点之间的负载均衡、请求转发也更为复杂。为了解决以上问题,Kubernetes、Openstack、微软、华为等国内外开源社区和软件厂商都纷纷推出了自己的边缘云架构解决方案。
图2
综合比较了各大厂商提出的云边缘解决方案,可以归纳两种不同的技术路线:
基于云原生的方案:基于目前已广泛应用的云原生容器化管理架构如Kubernetes和K3s,在其基础上拓展出跨公网的容器化应用下发、统一监控、负载均衡、接口转发等适配边缘云架构的功能,代表性的方案为KubeEdge[1]、Kubernetes Federation[2]。
基于云计算IAAS的方案:依托Openstack等云计算管理平台,在云计算的基础设施层面拓展边缘云的资源管理、应用打包和下发、负载均衡等功能,其功能范围覆盖了物理硬件管理-虚拟化-容器化的全流程,代表性的工具为StarlingX[3]、EdgeGallery[4]。
3.1 KubeEdge
KubeEdge是基于kubernetes之上将容器化应用的编排能力拓展到边缘主机或边缘设备,在云端和边缘端提供网络通信,应用部署、元数据同步等功能。最早是由华为开源并捐献给Kubernetes社区的。
KubeEdge的优势包括:
KubeEdge作为一个云-边一体化调度的开源解决方案,也将自己的核心模块分为了云侧和边缘侧两类,分别部署在中心云节点和边缘云节点,其核心的模块如下表1所示。
表1
从以上表格不难看出,KubeEdge新增的模块是比较多的,而且这些模块都必须通过命令行的方式到集群的宿主机上执行很多的命令行才能安装,其安装和配置的复杂度相对于纯粹的云原生应用还是要高出许多。
3.2 Kubernetes Federation
Kubernetes Federation通常又被称为K8s联邦,Kubernetes在1.3版本之后,增加了“集群联邦”Federation的功能。这个功能使企业能够快速有效的、低成本的跨区跨域、甚至在不同的云平台上运行集群,还可以按照地理位置创建一个复制机制,将多个kubernetes集群进行复制,即使遇到某个区域连接中断或某个数据中心故障,也会保持最关键的服务运行。
该方案的主要优点包括:
表2
Kubernetes Federation跨公网的多级群联邦调度机制,其实就是一个依托于MutiClusterDNS多级群服务发现的一种分布式Kubernetes集群调度体系如下图3所示:
图3
3.3 StarlingX
StarlingX准确的说是一个软件栈,他包含了打包、编译、安装配置、Openstack、WindRiver的MTCE平台,以及WindRiver针对电信云开发的VIM等等。StarlinX的部署应用需要从物理机虚拟化开始逐一安装相关工具,因此其边缘节点资源调度的能力很强。但由于跟底层硬件和虚拟化等软件耦合较为验证,业内也主要是九州、风河等云服务厂商在使用,普通的应用系统开发厂商要应用该软件栈的开发和改造成本会很大。
3.4 EdgeGallery
同样是提供了从虚拟化到容器化的一整套软件栈以支持边缘计算的一体化调度,且将APP开发、测试、认证以及上线的技术流程全打通,和StartlingX不同的是,该开源项目的各个模块可以拆分开来按需进行部署,由于该开源项目出现时间较晚,且发行的版本很少,目前还未见到有厂商应用的示例。
综合对比目前主要的一些边缘计算解决方案,对于普通的应用服务厂商来说基于云原生路线的KubeEdge和Kubernetes Federation相较于基于云计算的StartlingX和EdgeGallery具有更高的易用性和更低的实施成本,而对于已经通过Kubernetes进行了容器化部署的厂商,选择Kubernetes Federation平台切换成本最小(如下表3)。
图片
4.1 环境初始化
1)下载kubefedctl命令行并下载
https://github.com/kubernetes-sigs/kubefed/releases/tag/v0.3.1
2)将kubefed-0.3.1.tgz、kubefedctl-0.3.1-linux-amd64.tgz两个文件上传到主机群的master节点,并执行以下命令:
tar -xvf kubefedctl-0.3.1-linux-amd64.tgz
mv kubefedctl /usr/local/bin/
tar -xvf kubefed-0.3.1.tgz
kubectl create namespace kube-federation-system
helm install --name kubefed --namespace kube
federation-system kubefed
3)查看并确认kubefed的po全部都启动成功了
图片
4.2 将边缘节点的集群添加到联邦中
1)查看各个边缘集群的config信息
cat $HOME/.kube/config
2)将各个集群的信息添加到中心集群的$HOME/.kube/config配置文件当中
vi $HOME/.kube/config
3)通过kubefedctl命令行工具将自己群加入联邦
kubefedctl join clusterName --cluster-context clusterName --host-cluster-context local --v=2
kubectl -n kube-federation-system get kubefedclusters
如果想要退出联邦,可以执行命令:
kubefedctl unjoin zj --host-cluster-cnotallow=host
4.3 配置联邦化的namespace和yaml配置文件
1)创建联邦化的namespace
kubectl create namespace vrfederation
vi vrfederation.yaml
添加以下内容:
apiVersion: types.kubefed.io/v1beta1
kind: FederatedNamespace
metadata:
name: vrfederation
namespace: vrfederation
spec:
placement:
clusters:
- name: local
- name: cddev
由于采用应用商店部署只能看到登录账号所属项目的命名空间,所以还必须强制指定各个集群中的projectid:
overrides:
- clusterName: cddev
clusterOverrides:
- path: "/metadata/labels"
op: "add"
value:
field.cattle.io/projectId: p-64g94
- path: "/metadata/annotations"
op: "add"
value:
field.cattle.io/projectId: local:p-64g94
- clusterName: local
clusterOverrides:
- path: "/metadata/labels"
op: "add"
value:
field.cattle.io/projectId: p-6rt82
- path: "/metadata/annotations"
op: "add"
value:
field.cattle.io/projectId: local:p-6rt82
2)创建联邦化的deployment
vi test.yaml
添加以下内容:
apiVersion: types.kubefed.io/v1beta1
kind: FederatedDeployment
metadata:
name: test-deployment
namespace: vrfederation
spec:
template:
metadata:
labels:
app: nginx-test
spec:
replicas: 1
selector:
matchLabels:
app: nginx-test
template:
metadata:
labels:
app: nginx-test
spec:
containers:
- image: nginx:1.17
name: nginx-test
placement:
clusters:
- name: local
- name: cddev
overrides:
- clusterName: cddev
clusterOverrides:
- path: "/spec/replicas"
value: 3
- path: "/spec/template/spec/containers/0/image"
value: "nginx:1.14.0-alpine"
- path: "/metadata/annotations"
op: "add"
value:
foo: bar
- path: "/metadata/annotations/foo"
op: "remove"
3)查看各个集群当中容器部署的情况
ubectl --context cddev -n vrfederation get deployments
4.4 跨集群的service和ingress配置
1)创建联邦化的service
apiVersion: types.kubefed.io/v1beta1
kind: FederatedService
metadata:
labels:
app: federated-svc
name: federated-svc
namespace: vrfederation
spec:
template:
spec:
type: LoadBalancer
ports:
- name: http
port: 80
selector:
app: nginx
placement:
clusters:
- name: cddev
- name: local
kubectl --context cddev -n vrfederation get svc
2)创建联邦化的ingress
apiVersion: types.kubefed.io/v1beta1
kind: FederatedIngress
metadata:
name: test-ingress
namespace: vrfederation
spec:
template:
spec:
backend:
serviceName: federated-svc
servicePort: 80
placement:
cluster:
- name: local
- name: cddev
---
apiVersion: multiclusterdns.kubefed.io/v1alpha1
kind: IngressDNSRecord
metadata:
name: test-ingress
namespace: vrfederation
spec:
hosts:
- www.vr.wellmaxwang.top
recordTTL: 600
完成以上配置,就可以在内网环境配置出可供验证的Kubernetes联邦集群,对于跨公网的联邦则需要进一步配置公网的DNS和Externel DNS服务来进行跨公网的服务发现。
从笔者所在的分布式直播项目实践情况来看,Kubernetes Federation作为Kubernetes社区主推的云原生边缘计算一体化调度解决方案,对于普通的应用服务厂商将单中心的应用改造为云边协同的应用,是一个高效且开发成本最低的一种方案。但对于云服务提供商来说,StarlingX也许能更好地分配不同节点的云计算算力,所以具体选择哪一种边缘计算的一体化调度方案还是需要根据自己项目的实际情况而定。
标题名称:边缘计算的一体化调度方案探索
浏览路径:http://www.shufengxianlan.com/qtweb/news31/341181.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联