配置CloudCore和EdgeCore
KubeEdge要求在 云端(KubeEdge Master) 和 边缘端(KubeEdge Worker Node) 都进行对应的配置
配置云端(KubeEdge Master节点)
配置云端需要两个步骤:
- 修改配置文件
- 默认情况下,边缘节点将自动注册。用户仍然可以选择手动注册。
修改配置文件
Cloudcore要求更改 cloudcore.yaml 配置文件。
创建并设置cloudcore配置文件
创建 /etc/kubeedge/config 文件夹
# the default configuration file path is '/etc/kubeedge/config/cloudcore.yaml'
# also you can specify it anywhere with '--config'
mkdir -p /etc/kubeedge/config/
使用 ~/kubeedge/cloudcore --minconfig 命令获取最小配置模板
~/kubeedge/cloudcore --minconfig > /etc/kubeedge/config/cloudcore.yaml
或使用 ~/kubeedge/cloudcore --defaultconfig 命令获取完整配置模板
~/kubeedge/cloudcore --defaultconfig > /etc/kubeedge/config/cloudcore.yaml
编辑配置文件
vim /etc/kubeedge/config/cloudcore.yaml
在运行之前验证配置 cloudcore
修改 cloudcore.yaml
在 cloudcore.yaml 中,修改以下设置。
无论是
kubeAPIConfig.kubeConfig或kubeAPIConfig.master:都可能 kubeconfig 文件的路径。同时它也可能是/root/.kube/config或者
/home/<your_username>/.kube/config在您安装kubernetes的地方执行以下步骤:
要开始使用集群,您需要以普通用户身份运行以下命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config默认情况下,cloudcore 使用 https 连接到 Kubernetes apiserver。如果
master和kubeConfig都进行了配置,master将覆盖kubeconfig中的对应值。
在
advertiseAddress中配置所有暴露给边缘节点(如动态IP)的 CloudCore 的IP地址,这些IP地址将添加到CloudCore证书中的SAN中。modules:
cloudHub:
advertiseAddress:
- 10.1.11.85
在云端(KubeEdge master节点)添加边缘节点(KubeEdge工作节点)
节点注册可以通过两种方式完成:
- 节点 - 自动注册
- 节点 - 手动注册
节点 - 自动注册
如果 edgecore 的配置 中的modules.edged.tailoredKubeletConfig.registerNode 设置为true,Edge节点则会自动注册。
modules:
edged:
tailoredKubeletConfig:
registerNode: true
节点 - 手动注册
复制 $GOPATH/src/github.com/kubeedge/kubeedge/build/node.json 到您的工作目录并更改 metadata.name 为边缘节点的名称
mkdir -p ~/kubeedge/yaml
cp $GOPATH/src/github.com/kubeedge/kubeedge/build/node.json ~/kubeedge/yaml
Node.json
{
"kind": "Node",
"apiVersion": "v1",
"metadata": {
"name": "edge-node",
"labels": {
"name": "edge-node",
"node-role.kubernetes.io/edge": ""
}
}
}
注意:
metadata.name必须和 edgecore 的modules.edged.hostnameOverride配置里保持一致确保该节点的角色被设置为“边缘节点”。对此,
metadata.labels中必须存在"node-role.kubernetes.io/edge"形式的密钥。如果未为节点设置角色,则无法在云端创建/更新pod、configmap和secrets,以及同步到它们所对应的节点的操作。
部署边缘节点(您必须在云端运行命令)
kubectl apply -f ~/kubeedge/yaml/node.json
配置边缘端(KubeEdge工作节点)
创建并设置Edgecore配置文件
创建 /etc/kubeedge/config 文件夹
# the default configration file path is '/etc/kubeedge/config/edgecore.yaml'
# also you can specify it anywhere with '--config'
mkdir -p /etc/kubeedge/config/
使用 ~/kubeedge/edgecore --minconfig 命令创建最简配置
~/kubeedge/edgecore --minconfig > /etc/kubeedge/config/edgecore.yaml
或使用 ~/kubeedge/edgecore --defaultconfig 命令创建完整配置
~/kubeedge/edgecore --defaultconfig > /etc/kubeedge/config/edgecore.yaml
编辑配置文件
vim /etc/kubeedge/config/edgecore.yaml
在运行之前验证配置 edgecore
修改 edgecore.yaml
检查
modules.edged.podSandboxImage:这非常重要,必须正确设置。要检查计算机的体系结构,请运行以下命令
getconf LONG_BITkubeedge/pause-arm:3.1for arm archkubeedge/pause-arm64:3.1for arm64 archkubeedge/pause:3.1for x86 arch
KubeEdge v1.3之前的版本:检查
modules.edgehub.tlsCaFile、modules.edgehub.tlsCertFile和modules.edgehub.tlsPrivateKeyFile的证书文件是否存在。如果这些文件不存在,您需要从云端拷贝它们。KubeEdge v1.3之后的版本:仅跳过以上有关证书文件的检查。但是,如果手动配置Edgecore证书,则必须检查证书的路径是否正确。
在
modules.edgehub.websocket.server和modules.edgehub.quic.server字段中更新KubeEdge CloudCore的IP地址和端口。您需要设置 cloudcore 的IP地址。配置docker或remote作为所需的runtime的容器(对于所有基于CRI的runtime(包括容器))。如果未指定此参数,则默认情况下将使用docker 作为 runtime 的容器
runtimeType: dockeror
runtimeType: remote如果您的运行类型是remote,请遵循KubeEdge CRI配置指南来设置基于 remote/CRI 的运行时的KubeEdge。
注意: 如果您的KubeEdge版本低于v1.3,则跳过步骤6-7。
在用于申请证书的
modules.edgehub.httpServer中配置 KubeEdge cloudcore 的IP地址和端口。例如:modules:
edgeHub:
httpServer: https://10.1.11.85:10002配置token
kubectl get secret tokensecret -n kubeedge -oyaml然后,您将获得如下内容:
apiVersion: v1
data:
tokendata: ODEzNTZjY2MwODIzMmIxMTU0Y2ExYmI5MmRlZjY4YWQwMGQ3ZDcwOTIzYmU3YjcyZWZmOTVlMTdiZTk5MzdkNS5leUpoYkdjaU9pSklVekkxTmlJc0luUjVjQ0k2SWtwWFZDSjkuZXlKbGVIQWlPakUxT0RreE5qRTVPRGw5LmpxNENXNk1WNHlUVkpVOWdBUzFqNkRCdE5qeVhQT3gxOHF5RnFfOWQ4WFkK
kind: Secret
metadata:
creationTimestamp: "2020-05-10T01:53:10Z"
name: tokensecret
namespace: kubeedge
resourceVersion: "19124039"
selfLink: /api/v1/namespaces/kubeedge/secrets/tokensecret
uid: 48429ce1-2d5a-4f0e-9ff1-f0f1455a12b4
type: Opaque通过base64解码 tokendata 字段:
echo ODEzNTZjY2MwODIzMmIxMTU0Y2ExYmI5MmRlZjY4YWQwMGQ3ZDcwOTIzYmU3YjcyZWZmOTVlMTdiZTk5MzdkNS5leUpoYkdjaU9pSklVekkxTmlJc0luUjVjQ0k2SWtwWFZDSjkuZXlKbGVIQWlPakUxT0RreE5qRTVPRGw5LmpxNENXNk1WNHlUVkpVOWdBUzFqNkRCdE5qeVhQT3gxOHF5RnFfOWQ4WFkK |base64 -d
# then we get:
81356ccc08232b1154ca1bb92def68ad00d7d70923be7b72eff95e17be9937d5.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1ODkxNjE5ODl9.jq4CW6MV4yTVJU9gAS1j6DBtNjyXPOx18qyFq_9d8XY将解码后的字符串复制到 edgecore.yaml 中,如下所示:
modules:
edgeHub:
token: 81356ccc08232b1154ca1bb92def68ad00d7d70923be7b72eff95e17be9937d5.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1ODkxNjE5ODl9.jq4CW6MV4yTVJU9gAS1j6DBtNjyXPOx18qyFq_9d8XY
MQTT模式配置
KubeEdge的边缘部分使用MQTT在deviceTwin和设备之间进行通信。KubeEdge支持3种MQTT模式(internalMqttMode, bothMqttMode, externalMqttMode),将 edgecore.yaml 中的 mqttMode 字段设置为所需模式。
- internalMqttMode: 启用内部mqtt代理 (
mqttMode=0). - bothMqttMode: 启用内部和外部代理 (
mqttMode=1). - externalMqttMode: 仅启用外部代理 (
mqttMode=2).
要在双mqtt或外部模式下使用 KubeEdge,您需要确保将 mosquitto 或 emqx edge 作为MQTT Broker安装在边缘节点上。
至此,我们已经完成了与edgecore相关的所有配置的更改。