一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第14天,点击查看活动详情。
简介
- Kubernetes原生边缘计算框架
- 官网地址:kubernetes.io/
- github地址:github.com/kubeedge/ku…
组件
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)中存储/检索元数据。
安装
-
安装方式:3种
- 编译源码:github.com/kubeedge/ku… ==未尝试==
- 一键安装:github.com/kubeedge/ku… ==目前只支持Ubuntu==
- 下载release安装:github.com/kubeedge/ku… ==文档当前使用的方式==
下载release进行安装:
安装cloud端
- 安装k8s,配置master节点
- 生成证书,这一步第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
- 下载release:kubeedge-v1.1.0-linux-amd64.tar.gz,下载完成后放到master节点并解压
tar -zxvf kubeedge-v1.1.0-linux-amd64.tar.gz
- 解压后进入文件夹下:
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端
-
安装docker环境
-
将master下生成的证书(/etc/kubeedge/ca/、/etc/kubeedge/cert/)copy到node节点上去,最好放在:/etc/kubeedge/ca/、/etc/kubeedge/certs/ ,在配置中会用到
-
将master安装文件中的edge(/usr/edge/kubeedge-v1.1.0-linux-amd64/edge/) copy到node节点,位置随意
-
进入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
- 运行edge:
cd /usr/edge/
chmod +x edgecore
nohup ./edgecore > edgecore.log 2>&1 &
tail edgecore.log
配置k8s
- 前面两步,已经完成部署,但是运行
kubectl get pod依旧查看不到添加的pod,需要进行一步步骤,在master节点下:
- 创建node.json文件
apiVersion: v1
kind: Node
metadata:
labels:
role: edge-node
node-role.kubernetes.io/edge: ""
name: worker1 #替换成在edge中的nodeid
- 运行:
kubectl create -f node.json
==node.js 为节点的配置信息,需要在云端机器执行,作用是将边缘端加入集群(但实际上只是让 k8s 知道有这个节点,还不是真正意义上的加入)==