KubeEdge简介及安装

526 阅读5分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第14天,点击查看活动详情

简介

组件

cloud Part(CloudCore)

  • CloudHub:webSocket服务端,负责监听云端命令,向EdgeHub发送并缓存消息(支持QUIC、webSocket两种协议)
  • EdgeController:一种扩展的kubernetes控制器,它管理边缘节点和pods元数据,以便将数据定向到特定的边缘节点,连接Kubernetes Api-Server and edgecore
  • DeviceCOntroller:一种扩展的kubernetes控制器,它管理设备以使设备的元数据和状态数据能够在边缘端和云端能够保持同步

edge Part(EdgeCore)

  • EdgeHub:负责与云服务交互。这包括将云端资源更新同步到边缘,并向云报告边缘端主机和设备状态的更改。
  • Edged:运行在边缘节点上并管理容器化应用程序的代理。
  • EventBus:MQTT客户端,向其他组件提供发布订阅模式的功能
  • ServiceBus:HTTP客户端,向其他组件提供HTTP服务
  • DeviceTwin:负责存储设备状态并将设备状态同步到云端。它还为应用程序提供查询接口。
  • MetaManager:edged和edgehub之间的消息处理器。它还负责在轻量级数据库(SQLite)中存储/检索元数据。

安装

下载release进行安装:

安装cloud端

  1. 安装k8s,配置master节点
  2. 生成证书,这一步第4步会用到==下部下来可以在本机浏览器打开,另存一下==
wget -L <https://raw.githubusercontent.com/kubeedge/kubeedge/master/build/tools/certgen.sh>
# make script executable
chmod +x certgen.sh
bash -x ./certgen.sh genCertAndKey edge
  1. 下载release:kubeedge-v1.1.0-linux-amd64.tar.gz,下载完成后放到master节点并解压
 tar -zxvf kubeedge-v1.1.0-linux-amd64.tar.gz
  1. 解压后进入文件夹下:
cd kubeedge-v1.1.0-linux-amd64/cloud/cloudcore/conf

修改controller.yaml文件,其实只需要修改controller和devicecontroller下kube.master就可以,证书地址建议改成绝对路劲:

controller:
  kube:
    master: <https://apiserver.demo:6443>    # kube-apiserver address (such as:<http://localhost:8080>) 这里改成自己的apiserver
    namespace: ""
    content_type: "application/vnd.kubernetes.protobuf"
    qps: 5
    burst: 10
    node_update_frequency: 10
    kubeconfig: "/root/.kube/config"   #这里建议改成绝对路径
cloudhub:
  protocol_websocket: true # enable websocket protocol
  port: 10000 # open port for websocket server
  protocol_quic: true # enable quic protocol
  quic_port: 10001 # open prot for quic server
  max_incomingstreams: 10000 # the max incoming stream for quic server
  enable_uds: true # enable unix domain socket protocol
  uds_address: unix:///var/lib/kubeedge/kubeedge.sock # unix domain socket address
  address: 0.0.0.0
  ca: /etc/kubeedge/ca/rootCA.crt  #证书,生成后不需要修改
  cert: /etc/kubeedge/certs/edge.crt
  key: /etc/kubeedge/certs/edge.key
  keepalive-interval: 30
  write-timeout: 30
  node-limit: 10
devicecontroller:
  kube:
    master: <https://apiserver.demo:6443>       # kube-apiserver address (such as:<http://localhost:8080>)这里改成自己的apiserver
    namespace: ""
    content_type: "application/vnd.kubernetes.protobuf"
    qps: 5
    burst: 10
    kubeconfig: "/root/.kube/config" #Enter path to kubeconfig file to enable https connection to k8s apiserver,if master and kubeconfig are both set, master will override any value in kubeconfig.

6.创建设备模型和设备cRDs

 wget -L <https://raw.githubusercontent.com/kubeedge/kubeedge/master/build/crds/devices/devices_v1alpha1_devicemodel.yaml>
# make script executable
chmod +x devices_v1alpha1_devicemodel.yaml
kubectl create -f devices_v1alpha1_devicemodel.yaml
wget -L <https://raw.githubusercontent.com/kubeedge/kubeedge/master/build/crds/devices/devices_v1alpha1_device.yaml>
 # make script executable
chmod +x devices_v1alpha1_device.yaml
kubectl create -f devices_v1alpha1_device.yaml

==这一步要确认已经好,否则在创建设备实例和设备模型时会报错:error: unable to recognize "device.yaml": no matches for kind "Device" in version "devices.kubeedge.io/v1alpha1";error: unable to recognize "devicemodel.yaml": no matches for kind "DeviceModel" in version "devices.kubeedge.io/v1alpha1"== 7. 运行cloud:

cd /usr/edge/kubeedge-v1.1.0-linux-amd64/cloud/cloudcore/
nohup ./cloudcore > cloudcore.log 2>&1 &
tail cloudcore.log

安装edge端

  1. 安装docker环境

  2. 将master下生成的证书(/etc/kubeedge/ca/、/etc/kubeedge/cert/)copy到node节点上去,最好放在:/etc/kubeedge/ca/、/etc/kubeedge/certs/ ,在配置中会用到

  3. 将master安装文件中的edge(/usr/edge/kubeedge-v1.1.0-linux-amd64/edge/) copy到node节点,位置随意

  4. 进入edge/conf,修改edge.yaml文件。主要修改:

    • websocket:url,修改ip和nodeid(下面的work1的位置),nodeid保证k8s集群不冲突即可
    • controller:node-id,同上的配置
    • hostname-override: 同上
    • cafile、certfile、keyfile证书地址如果放在推荐的位置,就不需要修改
mqtt:
    server: tcp://127.0.0.1:1883 # external mqtt broker url.
    internal-server: tcp://127.0.0.1:1884 # internal mqtt broker url.
    mode: 0 # 0: internal mqtt broker enable only. 1: internal and external mqtt broker enable. 2: external mqtt broker enable only.
    qos: 0 # 0: QOSAtMostOnce, 1: QOSAtLeastOnce, 2: QOSExactlyOnce.
    retain: false # if the flag set true, server will store the message and can be delivered to future subscribers.
    session-queue-size: 100 # A size of how many sessions will be handled. default to 100.

edgehub:
    websocket:
        url: wss://172.17.63.184:10000/e632aba927ea4ac2b575ec1603d56f10/work1/events
        certfile: /etc/kubeedge/certs/edge.crt
        keyfile: /etc/kubeedge/certs/edge.key
        handshake-timeout: 30 #second
        write-deadline: 15 # second
        read-deadline: 15 # second
    quic:
        url: 127.0.0.1:10001
        cafile: /etc/kubeedge/ca/rootCA.crt
        certfile: /etc/kubeedge/certs/edge.crt
        keyfile: /etc/kubeedge/certs/edge.key
        handshake-timeout: 30 #second
        write-deadline: 15 # second
        read-deadline: 15 # second
    controller:
        protocol: websocket # websocket, quic
        heartbeat: 15  # second
        project-id: e632aba927ea4ac2b575ec1603d56f10
        node-id: work1

edged:
    register-node-namespace: default
    hostname-override: work1
    interface-name: eth0
    edged-memory-capacity-bytes: 7852396000
    node-status-update-frequency: 10 # second
    device-plugin-enabled: false
    gpu-plugin-enabled: false
    image-gc-high-threshold: 80 # percent
    image-gc-low-threshold: 40 # percent
    maximum-dead-containers-per-container: 1
    docker-address: unix:///var/run/docker.sock
    runtime-type: docker
    remote-runtime-endpoint: unix:///var/run/dockershim.sock
    remote-image-endpoint: unix:///var/run/dockershim.sock
    runtime-request-timeout: 2
    podsandbox-image: 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
    image-pull-progress-deadline: 60 # second
    cgroup-driver: cgroupfs
    node-ip: ""
    cluster-dns: ""
    cluster-domain: ""

mesh:
    loadbalance:
        strategy-name: RoundRobin
  1. 运行edge:
cd /usr/edge/
chmod +x edgecore
nohup ./edgecore > edgecore.log 2>&1 &
tail edgecore.log

配置k8s

  • 前面两步,已经完成部署,但是运行kubectl get pod 依旧查看不到添加的pod,需要进行一步步骤,在master节点下:
  1. 创建node.json文件
apiVersion: v1
kind: Node
metadata:
  labels:
    role: edge-node
    node-role.kubernetes.io/edge: ""
  name: worker1 #替换成在edge中的nodeid
  1. 运行:
 kubectl create -f node.json

==node.js 为节点的配置信息,需要在云端机器执行,作用是将边缘端加入集群(但实际上只是让 k8s 知道有这个节点,还不是真正意义上的加入)==

结束