官术网_书友最值得收藏!

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節。

主站蜘蛛池模板: 金阳县| 衡南县| 手机| 汤阴县| 枣庄市| 黄梅县| 准格尔旗| 沐川县| 五常市| 多伦县| 博罗县| 固安县| 双桥区| 新晃| 旌德县| 昂仁县| 江都市| 德江县| 沙河市| 永善县| 五大连池市| 马关县| 治多县| 南丰县| 遂宁市| 志丹县| 米林县| 桐梓县| 阿克苏市| 伊宁市| 澜沧| 同心县| 桑植县| 南开区| 辽阳县| 营口市| 二手房| 贵德县| 洞口县| 东阳市| 且末县|