- 深入理解邊緣計(jì)算:云、邊、端工作原理與源碼分析
- 崔廣章
- 1889字
- 2021-06-24 11:28:40
2.3 部署邊緣部分——KubeEdge
KubeEdge是一個(gè)基于Kubernetes構(gòu)建的開放平臺(tái),能夠?qū)ubernetes擁有的編排容器化應(yīng)用的能力擴(kuò)展到邊緣的節(jié)點(diǎn)和設(shè)備,并為云和邊緣之間的網(wǎng)絡(luò)、應(yīng)用部署和元數(shù)據(jù)同步提供基礎(chǔ)架構(gòu)支持。本書將KubeEdge作為邊緣計(jì)算系統(tǒng)中邊部分的解決方案。
本節(jié)會(huì)對(duì)KubeEdge的部署方式進(jìn)行梳理。KubeEdge可以系統(tǒng)進(jìn)程、容器化的方式進(jìn)行部署。
2.3.1 以系統(tǒng)進(jìn)程的方式部署KubeEdge
以系統(tǒng)進(jìn)程的方式部署KubeEdge,即以系統(tǒng)進(jìn)程的方式部署KubeEdge的云組件和邊緣組件。下面對(duì)部署過程中需要的依賴、配置等進(jìn)行詳細(xì)說明。
(1)安裝KubeEdge的云組件
獲取KubeEdge云組件的方法有兩種,即通過編譯KubeEdge的云組件源碼和從KubeEdge GitHub倉(cāng)庫(kù)的發(fā)布主頁(yè)下載。本節(jié)只說明通過編譯KubeEdge的云組件源碼獲得KubeEdge云組件可執(zhí)行文件的方式。
1)編譯KubeEdge的云組件源碼。
①下載KubeEdge源碼,命令如下:
#git clone https://GitHub.com/kubeedge/kubeedge.git kubeedge
②在編譯之前確保GCC已經(jīng)安裝,命令如下:
#gcc --version
③通過編譯源碼,獲得KubeEdge云組件,命令如下:
#cd kubeedge #make all WHAT=cloudcore
④編譯成功之后,會(huì)在./cloud下生成可執(zhí)行文件CloudCore,將其復(fù)制到/usr/bin下即可。
2)創(chuàng)建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
執(zhí)行上述命令后,會(huì)在/etc/kubeedge/ca下生成rootCA.crt,在etc/kubeEdge/certs下生成edge.crt、edge.key。生成的這些證書在KubeEdge的云組件和邊緣組件中共用。
4)生成和設(shè)置KubeEdge云組件的配置文件。
①創(chuàng)建配置文件目錄,命令如下:
#mkdir -p /etc/kubeEdge/config/
②生成最小化配置文件,命令如下:
#CloudCore –minconfig > /etc/kubeEdge/config/cloudcore.yaml
③生成默認(rèn)配置文件,命令如下:
# CloudCore –defaultconfig > /etc/kubeedge/config/cloudcore.yaml
執(zhí)行上述命令后,會(huì)在/etc/kubeedge/config下生成cloudcore.yaml。下面對(duì)執(zhí)行CloudCore生成的默認(rèn)配置文件cloudcore.yaml進(jìn)行說明,具體如下所示。
apiVersion: cloudcore.config.KubeEdge.io/v1alpha1 kind: cloudcore kubeAPIConfig: kubeConfig: /root/.kube/config # kubeConfig文件的絕對(duì)路徑 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)運(yùn)行KubeEdge云組件,命令如下:
#nohup ./cloudcore &
除了上述形式,還可以通過Systemd以后臺(tái)進(jìn)程的形式運(yùn)行KubeEdge云組件,命令如下:
#ln kubeedge/build/tools/cloudcore.service /etc/systemd/system/cloudcore.service # systemctl daemon-reload # systemctl start cloudcore
將KubeEdge云組件設(shè)置為開機(jī)自動(dòng)啟動(dòng),命令如下:
#systemctl enable cloudcore
(2)安裝KubeEdge的邊緣組件
1)編譯KubeEdge的邊緣組件源碼。
①下載KubeEdge源碼,命令如下:
#git clone https://GitHub.com/kubeedge/kubeedge.git kubeedge
②在編譯之前確保GCC已經(jīng)安裝,命令如下:
#gcc --version
③通過編譯源碼獲得KubeEdge的邊緣組件,命令如下:
#cd kubeedge #make all WHAT=edgecore
編譯成功之后,會(huì)在./edge下生成可執(zhí)行文件EdgeCore,將其復(fù)制到/usr/bin下即可。
2)從KubeEdge的云組件節(jié)點(diǎn)復(fù)制證書,命令如下:
#scp -r /etc/kubeedge root@{KubeEdge edge節(jié)點(diǎn)IP}:/etc/kubeedge
3)在KubeEdge的云組件節(jié)點(diǎn)為邊緣節(jié)點(diǎn)創(chuàng)建Node對(duì)象資源,命令如下:
#kubectl create -f kubeedge/build/node.json
node.json具體內(nèi)容如下所示。
{ "kind": "Node", "apiVersion": "v1", "metadata": { "name": "edge-node", "labels": { "name": "edge-node", "node-role.Kubernetes.io/edge": "" } } }
4)生成和設(shè)置KubeEdge邊緣組件的配置文件。
使用EdgeCore可以生成最小化配置文件和默認(rèn)配置文件。
①創(chuàng)建配置文件目錄,命令如下:
#mkdir -p /etc/kubeedge/config/
②生成最小化配置文件,命令如下:
#edgecore –minconfig > /etc/kubeedge/config/edgecore.yaml
③生成默認(rèn)配置文件,命令如下:
# edgecore –defaultconfig > /etc/kubeedge/config/edgecore.yaml
執(zhí)行上述命令后,會(huì)在/etc/kubeEdge/config下生成edgecore.yaml文件。下面對(duì)執(zhí)行edgecore生成的默認(rèn)配置文件edgecore.yaml進(jìn)行說明,具體如下所示。
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邊緣節(jié)點(diǎn)的IP,Modules.edgehub.websocket.server是KubeEdge云節(jié)點(diǎn)的IP。
5)運(yùn)行KubeEdge邊緣組件,命令如下:
#nohup ./edgecore &
除了上述形式,我們還可以通過Systemd以后臺(tái)進(jìn)程的形式運(yùn)行KubeEdge邊緣組件,命令如下:
#ln kubeedge/build/tools/edgecore.service /etc/systemd/system/edgecore.service # systemctl daemon-reload # systemctl start edgecore
將KubeEdge邊緣組件設(shè)置為開機(jī)自啟動(dòng),命令如下:
#systemctl enable edgecore
至此,以系統(tǒng)進(jìn)程的方式部署KubeEdge的云組件和邊緣組件都已經(jīng)完成了,接下來檢查KubeEdge的狀態(tài),并基于KubeEdge部署應(yīng)用。
(3)檢查KubeEdge節(jié)點(diǎn)狀態(tài)
在KubeEdge邊緣節(jié)點(diǎn)執(zhí)行如下命令,檢查KubeEdge邊緣節(jié)點(diǎn)的狀態(tài):
#kubectl get nodes
(4)基于KubeEdge部署應(yīng)用
基于KubeEdge部署應(yīng)用的命令如下:
#kubectl apply -f KubeEdge/build/deployment.yaml
2.3.2 以容器化的方式部署KubeEdge
本節(jié)以容器化的方式部署KubeEdge,即以容器化的方式部署KubeEdge的云組件和邊緣組件。下面將對(duì)部署過程和相關(guān)配置等進(jìn)行詳細(xì)說明。
(1)以容器化的方式部署KubeEdge的云組件
1)下載部署KubeEdge的云組件所需的資源文件,命令如下:
#git clone https://GitHub.com/kubeedge/kubeedge.git KubeEdge
2)構(gòu)建部署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運(yùn)行時(shí)環(huán)境,命令如下:
# cd ./kubeedge/build/edge/run_daemon.sh prepare
3)設(shè)置容器參數(shù),命令如下:
# ./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)構(gòu)建部署KubeEdge的邊緣組件所需的鏡像,命令如下:
#./kubeedge/build/edge /run_daemon.sh build
5)啟動(dòng)KubeEdge的邊緣組件容器,命令如下:
#./kubeedge/build/edge /run_daemon.sh up
至此,以容器化的方式部署KubeEdge的云組件和邊緣組件都已經(jīng)完成。關(guān)于KubeEdge的狀態(tài)查看以及基于KubeEdge部署應(yīng)用部分,讀者可以參考2.3.1節(jié)。
- 電子技術(shù)綜合知識(shí)全精講(雙色版)
- 通信工程辦公實(shí)務(wù)
- 液晶和等離子體電視機(jī)原理與維修
- 數(shù)據(jù)通信:路由與交換技術(shù)
- 現(xiàn)代交換原理
- Android移動(dòng)應(yīng)用開發(fā)基礎(chǔ)教程(微課版)
- Android 10 Kotlin編程通俗演義
- 怎樣用萬(wàn)用表檢測(cè)電子元器件
- 手繪圖說萬(wàn)用表使用
- 室內(nèi)定位理論、方法和應(yīng)用
- 精通Android 5 多媒體開發(fā)
- SwiftUI自學(xué)成長(zhǎng)筆記
- 數(shù)字視頻創(chuàng)意設(shè)計(jì)與實(shí)現(xiàn)(第二版)
- 電子工藝實(shí)習(xí)
- 動(dòng)手指,知天下:老年人學(xué)用智能手機(jī)