2.3 部署边缘部分——KubeEdge
KubeEdge是一个基于Kubernetes构建的开放平台,能够将Kubernetes拥有的编排容器化应用的能力扩展到边缘的节点和设备,并为云和边缘之间的网络、应用部署和元数据同步提供基础架构支持。本书将KubeEdge作为边缘计算系统中边部分的解决方案。
本节会对KubeEdge的部署方式进行梳理。KubeEdge可以系统进程、容器化的方式进行部署。
2.3.1 以系统进程的方式部署KubeEdge
以系统进程的方式部署KubeEdge,即以系统进程的方式部署KubeEdge的云组件和边缘组件。下面对部署过程中需要的依赖、配置等进行详细说明。
(1)安装KubeEdge的云组件
获取KubeEdge云组件的方法有两种,即通过编译KubeEdge的云组件源码和从KubeEdge GitHub仓库的发布主页下载。本节只说明通过编译KubeEdge的云组件源码获得KubeEdge云组件可执行文件的方式。
1)编译KubeEdge的云组件源码。
①下载KubeEdge源码,命令如下:
#git clone https://GitHub.com/kubeedge/kubeedge.git kubeedge
②在编译之前确保GCC已经安装,命令如下:
#gcc --version
③通过编译源码,获得KubeEdge云组件,命令如下:
#cd kubeedge #make all WHAT=cloudcore
④编译成功之后,会在./cloud下生成可执行文件CloudCore,将其复制到/usr/bin下即可。
2)创建Device Model和Device CRD,命令如下:
#cd ../kubeedge/build/crds/devices #kubectl create -f devices_v1alpha1_devicemodel.yaml #kubectl create -f devices_v1alpha1_device.yaml
3)生成证书,命令如下:
#cd kubeEdge/build/tools #./certgen.sh genCertAndKey edge
执行上述命令后,会在/etc/kubeedge/ca下生成rootCA.crt,在etc/kubeEdge/certs下生成edge.crt、edge.key。生成的这些证书在KubeEdge的云组件和边缘组件中共用。
4)生成和设置KubeEdge云组件的配置文件。
①创建配置文件目录,命令如下:
#mkdir -p /etc/kubeEdge/config/
②生成最小化配置文件,命令如下:
#CloudCore –minconfig > /etc/kubeEdge/config/cloudcore.yaml
③生成默认配置文件,命令如下:
# CloudCore –defaultconfig > /etc/kubeedge/config/cloudcore.yaml
执行上述命令后,会在/etc/kubeedge/config下生成cloudcore.yaml。下面对执行CloudCore生成的默认配置文件cloudcore.yaml进行说明,具体如下所示。
apiVersion: cloudcore.config.KubeEdge.io/v1alpha1 kind: cloudcore kubeAPIConfig: kubeConfig: /root/.kube/config # kubeConfig文件的绝对路径 master: "" # kube-apiserver address (比如:http://localhost:8080) modules: cloudhub: nodeLimit: 10 tlsCAFile: /etc/kubeedge/ca/rootCA.crt tlsCertFile: /etc/kubeedge/certs/edge.crt tlsPrivateKeyFile: /etc/kubeedge/certs/edge.key unixsocket: address: unix:///var/lib/kubeedge/kubeedge.sock # unix domain socket address enable: true # enable unix domain socket protocol websocket: address: 0.0.0.0 enable: true # enable websocket protocol port: 10000 # open port for websocket server
5)运行KubeEdge云组件,命令如下:
#nohup ./cloudcore &
除了上述形式,还可以通过Systemd以后台进程的形式运行KubeEdge云组件,命令如下:
#ln kubeedge/build/tools/cloudcore.service /etc/systemd/system/cloudcore.service # systemctl daemon-reload # systemctl start cloudcore
将KubeEdge云组件设置为开机自动启动,命令如下:
#systemctl enable cloudcore
(2)安装KubeEdge的边缘组件
1)编译KubeEdge的边缘组件源码。
①下载KubeEdge源码,命令如下:
#git clone https://GitHub.com/kubeedge/kubeedge.git kubeedge
②在编译之前确保GCC已经安装,命令如下:
#gcc --version
③通过编译源码获得KubeEdge的边缘组件,命令如下:
#cd kubeedge #make all WHAT=edgecore
编译成功之后,会在./edge下生成可执行文件EdgeCore,将其复制到/usr/bin下即可。
2)从KubeEdge的云组件节点复制证书,命令如下:
#scp -r /etc/kubeedge root@{KubeEdge edge节点IP}:/etc/kubeedge
3)在KubeEdge的云组件节点为边缘节点创建Node对象资源,命令如下:
#kubectl create -f kubeedge/build/node.json
node.json具体内容如下所示。
{ "kind": "Node", "apiVersion": "v1", "metadata": { "name": "edge-node", "labels": { "name": "edge-node", "node-role.Kubernetes.io/edge": "" } } }
4)生成和设置KubeEdge边缘组件的配置文件。
使用EdgeCore可以生成最小化配置文件和默认配置文件。
①创建配置文件目录,命令如下:
#mkdir -p /etc/kubeedge/config/
②生成最小化配置文件,命令如下:
#edgecore –minconfig > /etc/kubeedge/config/edgecore.yaml
③生成默认配置文件,命令如下:
# edgecore –defaultconfig > /etc/kubeedge/config/edgecore.yaml
执行上述命令后,会在/etc/kubeEdge/config下生成edgecore.yaml文件。下面对执行edgecore生成的默认配置文件edgecore.yaml进行说明,具体如下所示。
apiVersion: edgecore.config.kubeedge.io/v1alpha1 database: dataSource: /var/lib/kubeEdge/edgeCore.db kind: EdgeCore modules: edged: cgroupDriver: cgroupfs clusterDNS: "" clusterDomain: "" devicePluginEnabled: false dockerAddress: unix:///var/run/docker.sock gpuPluginEnabled: false hostnameOverride: $your_hostname interfaceName: eth0 nodeIP: $your_ip_address podSandboxImage: kubeedge/pause:3.1 # kubeedge/pause:3.1 for x86 arch , kubeedge/pause-arm:3.1 for arm arch, kubeedge/pause-arm64 for arm64 arch remoteImageEndpoint: unix:///var/run/dockershim.sock remoteRuntimeEndpoint: unix:///var/run/dockershim.sock runtimeType: docker edgehub: heartbeat: 15 # second tlsCaFile: /etc/kubeedge/ca/rootCA.crt tlsCertFile: /etc/kubeedge/certs/edge.crt tlsPrivateKeyFile: /etc/kubeedge/certs/edge.key websocket: enable: true handshakeTimeout: 30 # second readDeadline: 15 # second server: 127.0.0.1:10000 # CloudCore address writeDeadline: 15 # second eventbus: mqttMode: 2 # 0: internal mqtt broker enable only. 1: internal and external mqtt broker enable. 2: external mqtt broker mqttQOS: 0 # 0: QOSAtMostOnce, 1: QOSAtLeastOnce, 2: QOSExactlyOnce. mqttRetain: false # if the flag set true, server will store the message and can be delivered to future subscribers. mqttServerExternal: tcp://127.0.0.1:1883 # external mqtt broker url. mqttServerInternal: tcp://127.0.0.1:1884 # internal mqtt broker url.
其中,Modules.edged.hostnameOverride与node.json里的metadata.name保持一致,Modules.edged.nodeIP是KubeEdge边缘节点的IP,Modules.edgehub.websocket.server是KubeEdge云节点的IP。
5)运行KubeEdge边缘组件,命令如下:
#nohup ./edgecore &
除了上述形式,我们还可以通过Systemd以后台进程的形式运行KubeEdge边缘组件,命令如下:
#ln kubeedge/build/tools/edgecore.service /etc/systemd/system/edgecore.service # systemctl daemon-reload # systemctl start edgecore
将KubeEdge边缘组件设置为开机自启动,命令如下:
#systemctl enable edgecore
至此,以系统进程的方式部署KubeEdge的云组件和边缘组件都已经完成了,接下来检查KubeEdge的状态,并基于KubeEdge部署应用。
(3)检查KubeEdge节点状态
在KubeEdge边缘节点执行如下命令,检查KubeEdge边缘节点的状态:
#kubectl get nodes
(4)基于KubeEdge部署应用
基于KubeEdge部署应用的命令如下:
#kubectl apply -f KubeEdge/build/deployment.yaml
2.3.2 以容器化的方式部署KubeEdge
本节以容器化的方式部署KubeEdge,即以容器化的方式部署KubeEdge的云组件和边缘组件。下面将对部署过程和相关配置等进行详细说明。
(1)以容器化的方式部署KubeEdge的云组件
1)下载部署KubeEdge的云组件所需的资源文件,命令如下:
#git clone https://GitHub.com/kubeedge/kubeedge.git KubeEdge
2)构建部署KubeEdge的云组件所需的镜像,命令如下:
#cd kubeedge # make cloudimage
3)生成部署KubeEdge的云组件所需的06-secret.yaml,命令如下:
#cd build/cloud #../tools/certgen.sh buildSecret | tee ./06-secret.yaml
4)以容器化的方式部署KubeEdge的云组件,命令如下:
#for resource in $(ls *.yaml); do kubectl create -f $resource; done
(2)以容器化的方式部署KubeEdge的边缘组件
1)下载部署KubeEdge的边缘组件所需的资源文件,命令如下:
#git clone https://GitHub.com/kubeedge/kubeedge.git kubeedge
2)检查Container运行时环境,命令如下:
# cd ./kubeedge/build/edge/run_daemon.sh prepare
3)设置容器参数,命令如下:
# ./kubeedge/build/edge /run_daemon.sh set \ cloudhub=0.0.0.0:10000 \ edgename=edge-node \ EdgeCore_image="kubeedge/edgecore:latest" \ arch=amd64 \ qemu_arch=x86_64 \ certpath=/etc/kubeedge/certs \ certfile=/etc/kubeedge/certs/edge.crt \ keyfile=/etc/kubeedge/certs/edge.key
4)构建部署KubeEdge的边缘组件所需的镜像,命令如下:
#./kubeedge/build/edge /run_daemon.sh build
5)启动KubeEdge的边缘组件容器,命令如下:
#./kubeedge/build/edge /run_daemon.sh up
至此,以容器化的方式部署KubeEdge的云组件和边缘组件都已经完成。关于KubeEdge的状态查看以及基于KubeEdge部署应用部分,读者可以参考2.3.1节。