KubeEdge 是一个华为开源的边缘编排系统,本文是在学习安装过程中的记录。
KubeEdge 是一个开源的系统,可将本机容器化应用编排和管理扩展到边缘端设备。它基于 Kubernetes 构建,为网络和应用程序提供核心基础架构支持,并在云端和边缘端部署应用,同步元数据。KubeEdge 还支持 MQTT 协议,允许开发人员编写客户逻辑,并在边缘端启用设备通信的资源约束。KubeEdge 包含云端和边缘端两部分。
使用 KubeEdge,可以很容易地将已有的复杂机器学习、图像识别、事件处理和其他高级应用程序部署到边缘端并进行使用。 随着业务逻辑在边缘端上运行,可以在本地保护和处理大量数据。 通过在边缘端处理数据,响应速度会显著提高,并且可以更好地保护数据隐私。
架构
KubeEdge 由云端和边缘端部分构成:
云上部分
- CloudHub:CloudHub是一个Web Socket服务端,负责监听云端的变化,缓存并发送消息到EdgeHub。
- EdgeController:EdgeController是一个扩展的Kubernetes控制器,管理边缘节点和Pods的元数据确保数据能够传递到指定的边缘节点。
- DeviceController:DeviceController是一个扩展的Kubernetes控制器,管理边缘设备,确保设备信息、设备状态的云边同步。
边缘部分
- EdgeHub:EdgeHub是一个Web Socket客户端,负责与边缘计算的云服务交互,包括同步云端资源更新、报告边缘主机和设备状态变化到云端等功能。
- Edged:Edged是运行在边缘节点的代理,用于管理容器化的应用程序。
- EventBus:EventBus是一个与MQTT服务器(mosquitto)交互的MQTT客户端,为其他组件提供订阅和发布功能。
- ServiceBus:ServiceBus是一个运行在边缘的HTTP客户端,接受来自云上服务的请求,与运行在边缘端的HTTP服务器交互,提供了云上服务通过HTTP协议访问边缘端HTTP服务器的能力。
- DeviceTwin:DeviceTwin负责存储设备状态并将设备状态同步到云,它还为应用程序提供查询接口。
- MetaManager:MetaManager是消息处理器,位于Edged和Edgehub之间,它负责向轻量级数据库存储/检索元数据。
安装
前置工作
关闭自动更新
1 | apt remove unattended-upgrades |
配置机器的hostname
为了便于识别节点,使用hostnamectl
命令修改节点的hostname:
安装socat conntrack
1 | apt install socat conntrack |
关闭swap
1 | swapoff -a |
安装docker 19.03
1 | apt-get update |
修改cgroupdriver(KubeEdge边缘端不需要修改)
1 | vim /etc/docker/daemon.json |
加入如下配置:
1 | { |
重启docker
1 | systemctl daemon-reload |
安装Kubernetes集群
使bridged流量对iptables可见
1 | cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf |
安装kubernetes需要的包
1 | apt-get update |
安装kubelet、kubeadm、kubectl
1 | curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add - |
初始化kubernetes集群
1 | # --pod-network-cidr指定的地址一定要和flannel中的network一致 |
安装完成后:
1 | kubeadm join 10.0.16.10:6443 --token igd2j1.s0lcndcfdaxzx5j9 \ |
拷贝kubeconfig
1 | mkdir -p $HOME/.kube |
安装flannel
下载安装文件
1 | wget https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml |
修改flannel亲和性,将flannel运行保持在云端
1 | affinity: |
安装flannel
1 | kubectl apply -f kube-flannel.yml |
修改kube-proxy的亲和性,将kube-proxy运行在云端
kubectl edit daemonsets.apps -n kube-system kube-proxy
添加:
1 | affinity: |
untaint主节点
1 | kubectl taint nodes --all node-role.kubernetes.io/master- |
安装完成后master节点显示Ready
安装KubeEdge
下载keadm
1 | wget https://github.com/kubeedge/kubeedge/releases/download/v1.8.2/keadm-v1.8.2-linux-amd64.tar.gz |
云端初始化KubeEdge
1 | ./keadm init --advertise-address="110.42.181.25" --kubeedge-version=1.8.2 |
初始化完成后,显示:
新增cloudcore.service:
vim /etc/systemd/system/cloudcore.service
1 | [Unit] |
1 | systemctl enable cloudcore.service |
初始化边缘端
安装docker
安装步骤如上所示
获取token
1 | ./keadm gettoken |
join边缘端
1 | ./keadm join --cloudcore-ipport=110.42.181.25:10000 --kubeedge-version=1.8.2 --token=11ef00396826b99817257053e4a1524156b81817b8769e39cc4b35e55e779acf.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NTIwODg5OTR9.l4I9m4D8cFah25TSy-Ihsxp8GQvJyUW65oABE_ydWh4 |
启用kubectl logs功能
- 查看
ca.crt
和ca.key
文件:
1 | ls /etc/kubernetes/pki/ |
- 设置
CLOUDCOREIPS
环境变量。
1 | export CLOUDCOREIPS="110.42.181.25" |
- 为CloudStream生成证书
1 | wget https://raw.githubusercontent.com/kubeedge/kubeedge/master/build/tools/certgen.sh |
- 设置iptables
执行以下命令查看configmap
1 | kubectl get cm tunnelport -nkubeedge -oyaml |
设置iptables
1 | iptables -t nat -A OUTPUT -p tcp --dport 10351 -j DNAT --to 110.42.181.25:10003 |
- 修改配置。
修改cloudcore中的/etc/kubeedge/config/cloudcore.yaml
和edgecore中的/etc/kubeedge/config/edgecore.yaml
,将cloudStream
和edgeStream
改为enable:true
。
将/etc/kubeedge/config/edgecore.yaml
中的server改为CLOUDCOREIPS。
之后分别重启cloudcore和edgecore
启用metrics功能
加载metrics镜像:
1 | docker load < metrics-server-v0.4.3.tar |
在components.yaml中添加以下内容。
- 添加容忍度
1 | spec: |
- 设置hostnetwork
1 | spec: |
- 添加参数
1 | spec: |
部署metrics-server
1 | kubectl apply -f components.yaml |