一、部署云端

1.配置文件

在目录/etc/kubeedge/config/下有文件cloudcore.yaml

  1. # 命令进入cloudcore.yaml文件,如果没有vim工具,可以使用vi
  2. vim /etc/kubeedge/config/cloudcore.yaml

cloudcore.yaml配置如下

  1. # 其中较为重要的配置项都已加上注释
  2. apiVersion: cloudcore.config.kubeedge.io/v1alpha1
  3. commonConfig:
  4. tunnelPort: 10350
  5. kind: CloudCore
  6. kubeAPIConfig:
  7. burst: 200
  8. contentType: application/vnd.kubernetes.protobuf
  9. kubeConfig: /root/.kube/config
  10. master: ""
  11. qps: 100
  12. modules:
  13. cloudHub:
  14. advertiseAddress:
  15. - 10.10.103.108 # 云端IP地址
  16. dnsNames:
  17. - ""
  18. edgeCertSigningDuration: 365
  19. enable: true # 启动cloudHub模块
  20. https:
  21. address: 0.0.0.0
  22. enable: true
  23. port: 10002
  24. keepaliveInterval: 30 # 心跳时间
  25. nodeLimit: 1000
  26. quic:
  27. address: 0.0.0.0
  28. enable: false
  29. maxIncomingStreams: 10000
  30. port: 10001
  31. tlsCAFile: /etc/kubeedge/ca/rootCA.crt # rootCA证书路径
  32. tlsCAKeyFile: /etc/kubeedge/ca/rootCA.key # rootCA证书路径
  33. tlsCertFile: /etc/kubeedge/certs/server.crt # server证书路径
  34. tlsPrivateKeyFile: /etc/kubeedge/certs/server.key # server证书路径
  35. tokenRefreshDuration: 12
  36. unixsocket:
  37. address: unix:///var/lib/kubeedge/kubeedge.sock
  38. enable: true
  39. websocket:
  40. address: 0.0.0.0
  41. enable: true # 启动cloudHub的websocket功能
  42. port: 10000 # cloudHub的websocket端口
  43. writeTimeout: 30
  44. cloudStream:
  45. enable: false
  46. streamPort: 10003
  47. tlsStreamCAFile: /etc/kubeedge/ca/streamCA.crt
  48. tlsStreamCertFile: /etc/kubeedge/certs/stream.crt
  49. tlsStreamPrivateKeyFile: /etc/kubeedge/certs/stream.key
  50. tlsTunnelCAFile: /etc/kubeedge/ca/rootCA.crt
  51. tlsTunnelCertFile: /etc/kubeedge/certs/server.crt
  52. tlsTunnelPrivateKeyFile: /etc/kubeedge/certs/server.key
  53. tunnelPort: 10004
  54. deviceController:
  55. buffer:
  56. deviceEvent: 1
  57. deviceModelEvent: 1
  58. updateDeviceStatus: 1024
  59. context:
  60. receiveModule: devicecontroller
  61. responseModule: cloudhub
  62. sendModule: cloudhub
  63. enable: true # 开启deviceController模块
  64. load:
  65. updateDeviceStatusWorkers: 1
  66. UpdateDeviceUpdateStatusWorkers: 1
  67. kafkaForwardEnable: true # 开启kafka功能
  68. kafkaUrl: http://10.10.103.108:19092/topics/test/messages?sync # kafka地址
  69. dynamicController:
  70. enable: true # 开启dynamicController
  71. edgeController:
  72. buffer:
  73. configMapEvent: 1
  74. deletePod: 1024
  75. endpointsEvent: 1
  76. podEvent: 1
  77. queryConfigMap: 1024
  78. queryEndpoints: 1024
  79. queryNode: 1024
  80. queryPersistentVolume: 1024
  81. queryPersistentVolumeClaim: 1024
  82. querySecret: 1024
  83. queryService: 1024
  84. queryVolumeAttachment: 1024
  85. ruleEndpointsEvent: 1
  86. rulesEvent: 1
  87. secretEvent: 1
  88. serviceAccountToken: 1024
  89. serviceEvent: 1
  90. updateNode: 1024
  91. updateNodeStatus: 1024
  92. updatePodStatus: 1024
  93. context:
  94. receiveModule: edgecontroller
  95. responseModule: cloudhub
  96. sendModule: cloudhub
  97. sendRouterModule: router
  98. enable: true # 开启edgeController模块
  99. load:
  100. ServiceAccountTokenWorkers: 4
  101. UpdateRuleStatusWorkers: 4
  102. deletePodWorkers: 4
  103. queryConfigMapWorkers: 4
  104. queryEndpointsWorkers: 4
  105. queryNodeWorkers: 4
  106. queryPersistentVolumeClaimWorkers: 4
  107. queryPersistentVolumeWorkers: 4
  108. querySecretWorkers: 4
  109. queryServiceWorkers: 4
  110. queryVolumeAttachmentWorkers: 4
  111. updateNodeStatusWorkers: 1
  112. updateNodeWorkers: 4
  113. updatePodStatusWorkers: 1
  114. nodeUpdateFrequency: 10
  115. router:
  116. address: 0.0.0.0
  117. enable: true # 开启路由
  118. port: 9443
  119. restTimeout: 20
  120. syncController:
  121. enable: true # 开启syncController模块

编写完成后,用以下命令保存并退出vim编辑器

  1. # 退出vim
  2. :wq!

2.编写启动文件

在目录/etc/systemd/system/下,用以下命令编写启动文件cloudcore.service

  1. # 编写启动文件
  2. vim /etc/systemd/system/cloudcore.service

启动文件内容如下

  1. [Unit]
  2. Description=cloudcore.service
  3. [Service]
  4. Type=simple
  5. ExecStart=/usr/local/bin/cloudcore # cloudcore二进制文件所处位置
  6. Restart=always # 重启策略
  7. RestartSec=10 # 重启时间
  8. [Install]
  9. WantedBy=multi-user.target

编写好后,用以下命令退出并保存启动文件

  1. # 退出并保存vim
  2. :wq!

3.编译CloudCore

进入kubeedge项目所在文件夹

  1. # 进入kubeedge目录
  2. cd $GOPATH/src/shangqi-kubeedge

编译CloudCore

  1. # 编译CloudCore
  2. make all WHAT=cloudcore

将编译好的文件发送到指定目录下

  1. # 发送二进制文件
  2. cp _output/local/bin/cloudcore /usr/local/bin

4.二进制启动CloudCore

启动CloudCore

  1. # 启动CloudCore
  2. systemctl start cloudcore

可以通过如下命令检查CloudCore是否启动成功

  1. # 检查CloudCore是否启动成功
  2. systemctl status cloudcore
  3. cloudcore.service
  4. Loaded: loaded (/etc/systemd/system/cloudcore.service; enabled; vendor preset: disabled)
  5. Active: active (running) since 2021-10-20 20:37:11 CST; 13h ago
  6. Main PID: 11332 (cloudcore)
  7. Tasks: 10
  8. Memory: 137.3M
  9. CGroup: /system.slice/cloudcore.service
  10. └─11332 /usr/local/bin/cloudcore
  11. 10 21 10:32:29 k8s-master-108 cloudcore[11332]: W1021 10:32:29.857377 11332 upstream.go:162] Device firefly112-sn-vehicle-speeds-service does not exist in downstream controller
  12. 10 21 10:32:29 k8s-master-108 cloudcore[11332]: I1021 10:32:29.857402 11332 upstream.go:149] Message: a22a95e1-c5a0-4203-9be5-bacec81409dc, operation is: update, and resource is: no.../edge_updated
  13. 10 21 10:32:29 k8s-master-108 cloudcore[11332]: W1021 10:32:29.857567 11332 upstream.go:162] Device firefly112-sn-test-status1 does not exist in downstream controller
  14. 10 21 10:32:30 k8s-master-108 cloudcore[11332]: I1021 10:32:30.193620 11332 message.go:68] get a message, header:{ID:7f3088e3-4500-4405-a84d-6258fee0622f ParentID: Timestamp:1634783...evice/update}
  15. 10 21 10:32:30 k8s-master-108 cloudcore[11332]: I1021 10:32:30.211543 11332 upstream.go:119] Dispatch message: ba271cc3-e396-4ada-a849-189d12dfbdc5
  16. 10 21 10:32:30 k8s-master-108 cloudcore[11332]: I1021 10:32:30.211578 11332 upstream.go:126] Message: ba271cc3-e396-4ada-a849-189d12dfbdc5, resource type is: twin/edge_updated
  17. 10 21 10:32:30 k8s-master-108 cloudcore[11332]: I1021 10:32:30.211612 11332 upstream.go:149] Message: ba271cc3-e396-4ada-a849-189d12dfbdc5, operation is: update, and resource is: no.../edge_updated
  18. 10 21 10:32:30 k8s-master-108 cloudcore[11332]: I1021 10:32:30.705074 11332 eventbus.go:210] message is send to target successfully. msgID: 7f3088e3-4500-4405-a84d-6258fee0622f, target: rest
  19. 10 21 10:32:30 k8s-master-108 cloudcore[11332]: I1021 10:32:30.705273 11332 upstream.go:269] Message: ba271cc3-e396-4ada-a849-189d12dfbdc5 process successfully
  20. 10 21 10:32:30 k8s-master-108 cloudcore[11332]: I1021 10:32:30.705314 11332 channelq.go:270] [it's int64]
  21. Hint: Some lines were ellipsized, use -l to show in full.

二、部署边端

1.安装证书

将证书放置在指定目录下

  1. cp register.crt /etc/kubeedge/certs/
  2. cp register.key /etc/kubeedge/certs/
  3. cp server.crt /etc/kubeedge/certs/
  4. cp server.key /etc/kubeedge/certs/

2.配置文件

在边缘端环境下,在目录/etc/kubeedge/config/下有文件edgecore.yaml

  1. # 命令进入edgecore.yaml文件,如果没有vim工具,可以使用vi
  2. vim /etc/kubeedge/config/edgecore.yaml

edgecore.yaml配置如下,其中,第35行的token可以由cloud端获取,使用命令kubectl get secret -nkubeedge tokensecret -o=jsonpath=’{.data.tokendata}’ | base64 -d

  1. # 其中较为重要的配置项都已加上注释
  2. apiVersion: edgecore.config.kubeedge.io/v1alpha1
  3. database:
  4. aliasName: default
  5. dataSource: /var/lib/kubeedge/edgecore.db # 数据库sqlite所在目录
  6. driverName: sqlite3
  7. kind: EdgeCore
  8. modules:
  9. dbTest:
  10. enable: false
  11. deviceTwin:
  12. enable: true # 启动deviceTwin模块
  13. standardDevicePath: /etc/kubeedge/standard
  14. edgeHub:
  15. domain: https://10.10.103.108 # 注册中心地址
  16. enable: true # 启动edgeHub模块
  17. heartbeat: 15 # edgeHub模块心跳时间
  18. httpServer: https://10.10.103.108:10002
  19. intervalTime: 86400 # 注册中心轮询时间
  20. path: /harmonycloud/v1/register # 注册中心路由
  21. projectID: e632aba927ea4ac2b575ec1603d56f10
  22. quic:
  23. enable: false
  24. handshakeTimeout: 30
  25. readDeadline: 15
  26. server: 192.168.123.211:10001
  27. writeDeadline: 15
  28. registerPort: 30888
  29. rotateCertificates: true
  30. serverCrt: /etc/kubeedge/certs/register.crt # 注册中心证书地址
  31. serverKey: /etc/kubeedge/certs/register.key # 注册中心证书地址
  32. tlsCaFile: /etc/kubeedge/ca/rootCA.crt # rootCA证书地址
  33. tlsCertFile: /etc/kubeedge/certs/server.crt # server证书地址
  34. tlsPrivateKeyFile: /etc/kubeedge/certs/server.key # server证书地址
  35. token: 90c453e55c436b773fc65aebe9ef0c213f64b28f903c88814545d818b5903501.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MzQyMDM2MjB9.HgSrmEMUZZKTxGuihdE7af4WY_8HXBBvMlcjnV2vhEA # token由cloud端获得
  36. websocket:
  37. enable: true # 开启websocket模块
  38. handshakeTimeout: 30
  39. readDeadline: 15
  40. server: 10.10.103.108:10000 # 云端地址
  41. writeDeadline: 15
  42. edgeStream:
  43. enable: false
  44. handshakeTimeout: 30
  45. readDeadline: 15
  46. server: 10.10.103.108:10004
  47. tlsTunnelCAFile: /etc/kubeedge/ca/rootCA.crt
  48. tlsTunnelCertFile: /etc/kubeedge/certs/server.crt
  49. tlsTunnelPrivateKeyFile: /etc/kubeedge/certs/server.key
  50. writeDeadline: 15
  51. edged:
  52. cgroupDriver: cgroupfs
  53. cgroupRoot: ""
  54. cgroupsPerQOS: true
  55. clusterDNS: ""
  56. clusterDomain: ""
  57. cniBinDir: /opt/cni/bin
  58. cniCacheDirs: /var/lib/cni/cache
  59. cniConfDir: /etc/cni/net.d
  60. concurrentConsumers: 5
  61. devicePluginEnabled: false
  62. dockerAddress: unix:///var/run/docker.sock
  63. edgedMemoryCapacity: 7852396000
  64. enable: true # 启动edged模块
  65. enableMetrics: true
  66. gpuPluginEnabled: false
  67. hostnameOverride: firefly112-sn # hostname构成为vin-sn
  68. imageGCHighThreshold: 80
  69. imageGCLowThreshold: 40
  70. imagePullProgressDeadline: 60
  71. maximumDeadContainersPerPod: 1
  72. networkPluginMTU: 1500
  73. nodeIP: 192.168.123.211 # edge端的IP
  74. nodeStatusUpdateFrequency: 10
  75. podSandboxImage: kubeedge/pause:3.1
  76. registerNode: true
  77. registerNodeNamespace: default
  78. remoteImageEndpoint: unix:///var/run/dockershim.sock
  79. remoteRuntimeEndpoint: unix:///var/run/dockershim.sock
  80. runtimeRequestTimeout: 2
  81. runtimeType: docker
  82. volumeStatsAggPeriod: 60000000000
  83. eventBus:
  84. enable: true # 启动eventBus模块
  85. eventBusTLS:
  86. enable: false
  87. tlsMqttCAFile: /etc/kubeedge/ca/rootCA.crt
  88. tlsMqttCertFile: /etc/kubeedge/certs/server.crt
  89. tlsMqttPrivateKeyFile: /etc/kubeedge/certs/server.key
  90. mqttMode: 1 # mqttMode改为1,表示内外连接都可以
  91. mqttQOS: 1 # mqttQOS必须为1,否则无法接收到消息
  92. mqttRetain: false
  93. mqttServerExternal: tcp://127.0.0.1:1883
  94. mqttServerInternal: tcp://127.0.0.1:1884
  95. mqttSessionQueueSize: 100
  96. metaManager:
  97. contextSendGroup: hub
  98. contextSendModule: websocket
  99. enable: true # 启动metaManager模块
  100. metaServer:
  101. debug: false
  102. enable: true # 启动metaServer模块
  103. podStatusSyncInterval: 60
  104. remoteQueryTimeout: 60
  105. serviceBus:
  106. enable: true # 启动serviceBus模块

3.编写启动文件

在目录/etc/systemd/system/下,用以下命令编写启动文件edgecore.service

# 编写启动文件
vim /etc/systemd/system/edgecore.service

启动文件内容如下

[Unit]
Description=edgecore.service

[Service]
Type=simple
ExecStart=/usr/local/bin/edgecore        # edgecore二进制文件所处位置
Restart=always        # 重启策略
RestartSec=10        # 重启时间

[Install]
WantedBy=multi-user.target

编写好后,用以下命令退出并保存启动文件

# 退出并保存vim
:wq!

4.编译EdgeCore

进入kubeedge项目所在文件夹

# 进入kubeedge目录
cd $GOPATH/src/shangqi-kubeedge

编译EdgeCore

# 编译EdgeCore
make all WHAT=edgecore

将编译好的文件发送到指定目录下

# 发送二进制文件
cp _output/local/bin/edgecore /usr/local/bin

5.二进制启动EdgeCore

启动EdgeCore

# 启动EdgeCore
systemctl start edgecore

可以通过如下命令检查EdgeCore是否启动成功

# 检查EdgeCore是否启动成功
systemctl status edgecore

● edgecore.service
   Loaded: loaded (/etc/systemd/system/edgecore.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2021-10-21 10:55:48 CST; 8min ago
 Main PID: 18819 (edgecore)
    Tasks: 12 (limit: 4607)
   CGroup: /system.slice/edgecore.service
           └─18819 /usr/local/bin/edgecore

Oct 21 11:01:22 firefly-211 edgecore[18819]: =================================== {{f0b5dd50-9835-4123-adb1-693997c7bff9 8efb163e-0fa1-41ee-8ae5-e286a1798f6b 1634785282678  false} {edgecontroller resourc
Oct 21 11:01:22 firefly-211 edgecore[18819]: I1021 11:01:22.680875   18819 eventbus.go:90] Success in pubMQTT with topic: $hw/events/device/comfigMap/update
Oct 21 11:01:22 firefly-211 edgecore[18819]: AddDevices======================= [{firefly112-sn-mapper-version firefly112-sn-mapper-version SOA   map[] map[]}]
Oct 21 11:01:22 firefly-211 edgecore[18819]: RemoveDevices======================= []
Oct 21 11:01:22 firefly-211 edgecore[18819]: I1021 11:01:22.681755   18819 device.go:575] device sub module will send membership to membership sub module
Oct 21 11:01:22 firefly-211 edgecore[18819]: I1021 11:01:22.683616   18819 process.go:297] DeviceTwin receive msg
Oct 21 11:01:22 firefly-211 edgecore[18819]: I1021 11:01:22.683857   18819 process.go:70] Send msg to the MemModule module in twin
Oct 21 11:01:22 firefly-211 edgecore[18819]: I1021 11:01:22.683986   18819 membership.go:121] Membership event
Oct 21 11:01:22 firefly-211 edgecore[18819]: I1021 11:01:22.684407   18819 membership.go:168] Add devices to edge group
Oct 21 11:01:22 firefly-211 edgecore[18819]: I1021 11:01:22.712442   18819 eventbus.go:90] Success in pubMQTT with topic: $hw/events/node/firefly112-sn/membership/updated