深入理解边缘计算:云、边、端工作原理与源码分析
上QQ阅读APP看书,第一时间看更新

2.4 部署端部分——EdgeX Foundry

EdgeX Foundry是一个由Linux Foundation托管的、供应商中立的开源项目,用于为IoT边缘计算系统构建通用的开放框架。该项目的核心是一个互操作框架。该框架可以托管在与硬件和操作系统无关的平台上,以实现组件的即插即用,从而加速IoT解决方案的部署。本节将对EdgeX Foundry的部署方式进行系统梳理,并对部署方式中的相关注意事项进行详细说明,具体如表2-6所示。

表2-6 KubeEdge的部署方式和注意事项

063-01

需要说明的是,在本书云、边、端协同的边缘计算系统中,作为端解决方案的EdgeX Foundry是通过KubeEdge进行容器化部署的。但是,目前官方没有提供通过KubeEdge对其进行容器化部署的相关说明,所以笔者根据本书的部署环境针对KubeEdge开发了一套yaml文件。

1)该yaml文件托管在GitHub上(https://GitHub.com/WormOn/edgecomputing/tree/master/end),可作为读者学习参考的资料。

2)与通过KubeEdge进行容器化部署原理相同,读者也可以参考yaml文件完成对EdgeX Foundry的部署。

2.4.1 以系统进程的方式部署EdgeX Foundry

以系统进程的方式部署EdgeX Foundry,即将EdgeX Foundry的各组件以系统进程的方式进行部署。本节对该方式进行展开说明。

1)获取EdgeX Foundry源码。

命令如下:

#git clone https://GitHub.com/EdgeX Foundry/edgex-go.git

2)基于源码构建EdgeX Foundry各组件的二进制文件。

进入edgex-go源码根目录,命令如下:

#cd edgex-go

源码编译edgex-go,命令如下:

#make build

构建EdgeX Foundry各组件的二进制文件,具体如图2-10所示。

064-01

图2-10 构建EdgeX Foundry各组件的二进制文件

由图2-10可知,会在./cmd下各组件子目录里生成相应的可执行文件,比如config-seed的可执行文件会在./cmd/config-seed目录下,具体如图2-11所示。

064-02

图2-11 源码编译edgex-go生成的可执行文件

3)运行EdgeX Foundry的各组件。

通过make命令一键运行edgex,命令如下:

#make run 

由图2-12可知,make run是通过执行#cd bin && ./edgex-launch.sh命令将EdgeX Foundry的各组件以系统进程的方式运行起来的。下面看一下edgex-launch.sh的具体内容。

065-01

图2-12 edgex-go一键启动命令和输出结果

打开edgex-launch.sh:#vim edgex-go/bin/edgex-launch.sh,具体如下所示。

#!/bin/bash
#
# Copyright (c) 2018
# Mainflux
#
# SPDX-License-Identifier: Apache-2.0
#

###
# Launches all EdgeX Go binaries (must be previously built).
#
# Expects that Consul and MongoDB are already installed and running.
#
###

DIR=$PWD
CMD=../cmd

# Kill all edgex-* stuff
function cleanup {
 pkill edgex
}

# disable secret-store integration
export EDGEX_SECURITY_SECRET_STORE=false

###
# Support logging
###
cd $CMD/support-logging
# Add `edgex-` prefix on start, so we can find the process family
exec -a edgex-support-logging ./support-logging &
cd $DIR

###
# Core Command
###
cd $CMD/core-command
# Add `edgex-` prefix on start, so we can find the process family
exec -a edgex-core-command ./core-command &
cd $DIR

###
# Core Data
###
cd $CMD/core-data
exec -a edgex-core-data ./core-data &
cd $DIR

###
# Core Meta Data
###
cd $CMD/core-metadata
exec -a edgex-core-metadata ./core-metadata &
cd $DIR

###
# Support Notifications
###
cd $CMD/support-notifications
# Add `edgex-` prefix on start, so we can find the process family
exec -a edgex-support-notifications ./support-notifications &
cd $DIR

###
# System Management Agent
###
cd $CMD/sys-mgmt-agent
# Add `edgex-` prefix on start, so we can find the process family
exec -a edgex-sys-mgmt-agent ./sys-mgmt-agent &
cd $DIR

# Support Scheduler
###
cd $CMD/support-scheduler
# Add `edgex-` prefix on start, so we can find the process family
exec -a edgex-support-scheduler ./support-scheduler &
cd $DIR

trap cleanup EXIT

while : ; do sleep 1 ; done

edgex-launch.sh主要做了3件事。

1)通过shell的内置命令exec将EdgeX Foundry的各组件以系统进程的方式运行起来。

2)通过一个while死循环将edgex-launch.sh以前台驻留进程的方式驻留在前台。

3)通过trap命令监听EXIT信号,并在监听到EXIT信号之后,调用clean函数杀掉EdgeX Foundry各组件以系统进程的方式运行起来的进程。

2.4.2 以容器化的方式部署EdgeX Foundry

以容器化方式部署EdgeX Foundry,即使用Docker-compose、Kubernetes和KubeEdge对EdgeX Foundry进行容器化部署。本节对使用Docker-compose部署EdgeX Foundry的步骤进行详细说明。

1)获取EdgeX Foundry源码,命令如下:

#git clone https://GitHub.com/EdgeX Foundry/edgex-go.git

2)基于源码构建EdgeX Foundry各组件的二进制文件。

①进入edgex-go源码根目录,命令如下:

#cd edgex-go

②源码编译edgex-go命令如下:

#make build

源码编译edgex-go具体如图2-13所示。

068-01

图2-13 源码编译edgex-go

由图2-13可知,在./cmd下各组件子目录里生成了相应的可执行文件,比如config-seed的可执行文件会在./cmd/config-seed目录下,具体如图2-14所示。

068-02

图2-14 edgex-go源码编译结果

3)构建EdgeX Foundry各组件的镜像。

使用Docker容器对edgex-go进行源码编译的命令如下:

# make docker

具体如图2-15所示。

069-01

图2-15 使用Docker容器对edgex-go进行源码编译

4)获取运行EdgeX Foundry各组件的docker-compose.yml文件,命令如下:

#curl -s -o docker-compose.yml https://raw.GitHubusercontent.com/EdgeX Foundry/developer-scripts/master/releases/edinburgh/compose-files//docker-compose-edinburgh-no-secty-1.0.1.yml

将docker-compose.yml文件的相关镜像替换为最新镜像,命令如下:

# vim docker-compose.yml

替换镜像具体如图2-16所示。

069-02

图2-16 替换镜像

5)运行EdgeX Foundry。

使用docker-compose启动EdgeX Foundry,命令如下:

# docker-compose up -d

具体如图2-17所示。

070-01

图2-17 使用docker-compose启动EdgeX Foundry

至此,通过docker-compose以容器化的方式运行EdgeX Foundry的相关步骤介绍也就结束了。