kubeedge安装

kube-edge

KubeEdge 是一个开源的系统,可将本机容器化应用编排和管理扩展到边缘端设备。 它基于Kubernetes构建,为网络和应用程序提供核心基础架构支持,并在云端和边缘端部署应用,同步元数据。KubeEdge 还支持 MQTT 协议,允许开发人员编写客户逻辑,并在边缘端启用设备通信的资源约束。KubeEdge 包含云端和边缘端两部分。

安装

kube-edge 强调的“云边协同”概念,分为“云”部分和“边”部分。云部分基于完整的社区发行版kubernetes,需要自行安装。kube-edge 基于社区版本kubernetes进行扩展,发展边缘计算,将mqtt等适用于边缘计算的协议加载进入云中,通过适配层接入k8s。

安装整套kube-edge 需要先安装完成“云”环境,云环境参照社区k8s版本进行安装。完成后安装“kube-edge”扩展。

安装环境

使用openstack虚拟机:

主机名称 IP 备注
kube-edge-1 10.0.1.153 root/password
kube-edge-2 10.0.1.157 root/password
kube-edge-3 10.0.1.72 root/password

前置设置

  • 关闭防火墙
  • 关闭selinux或者apparmor

安装docker

kube-edge-1 kube-edge-2 kube-edge-3 节点:

对于ubuntu centos等发行版可以使用 docker 提供的安装脚本进行安装。--mirror 参数指定docker源为阿里云源以提升安装速度。

每一台作为“云”端的主机均需要安装docker。

curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh --mirror Aliyun

安装kubernetes

安装 kubelet kubeadm kubectl

参考Installing kubeadm
或者过内镜像Kubernetes 镜像

apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - 
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm kubectl

安装kubernetes集群

kube-edge-1 节点:

可以选择先获取镜像(国内无法直接获取gcr镜像,需要通过国内源或者代理)

images=$(kubeadm config images list)

for image in ${images} ; do
    name=${image#"k8s.gcr.io/"}
    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/${name}
    docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/${name} ${image}
    docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/${name}
done
docker images

或者kubeadm init时指定repository为国内地址

kubeadm init --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers/ --pod-network-cidr 10.240.0.0/16 --v 5

执行安装:

kubeadm init --pod-network-cidr 10.240.0.0/16 --v 5

配置kubelet

kube-edge-1 节点:

安装完成后:

kubelet 环境文件 "/var/lib/kubelet/kubeadm-flags.env"
kubelet 配置文件 "/var/lib/kubelet/config.yaml"

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

安装网络插件

kube-edge-1 节点:

以flannel为例:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

扩展节点

留意kubeadm init后的输出,可寻找到token用于新增节点至已有集群。

kubeadm join 10.0.1.153:6443 --token ltuf9t.gyimo6d8n53xk4os \
    --discovery-token-ca-cert-hash sha256:b09492fbb6f793274c6a395d26045e62a77fa1a156ebe1ff74803942015d6a16

安装kube-edge

下载kube-edge

仅需要下载 keadm 工具即可,其会自动下载相关需要的文件。

如果下载失败,可以预先下载对应的文件至目录 /etc/kubeedge/

# keadm version
version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.0", GitCommit:"8b0913e04ef4ef826af6715d336e23a66e3774df", GitTreeState:"clean", BuildDate:"2020-11-13T08:04:56Z", GoVersion:"go1.15", Compiler:"gc", Platform:"linux/amd64"}
# wget -P /etc/kubeedge/ https://github.com/kubeedge/kubeedge/releases/download/v1.5.0/kubeedge-v1.5.0-linux-amd64.tar.gz

配置“云”端

kube-edge-1 节点:

# keadm init
...
# keadm gettoken
89358eec8392985968899207038ea7118f0b627ffc2e56bf5ec8310c52b051ac.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MDg2MDg4MTh9.bvOSdKD7DMxLPYsX66lwBGVTDSQ0UWKWKFFzlIT7HWU

配置“边”端

kube-edge-2 节点:

keadm join --cloudcore-ipport=10.0.1.153:10000 --token=89358eec8392985968899207038ea7118f0b627ffc2e56bf5ec8310c52b051ac.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MDg2MDg4MTh9.bvOSdKD7DMxLPYsX66lwBGVTDSQ0UWKWKFFzlIT7HWU

边端设备会安装mqtt服务器,以及启动针对边缘设备接入的http服务器等。

介绍

KubeEdge 由以下组件构成:

云上部分

  • CloudHub: CloudHub 是一个 Web Socket 服务端,负责监听云端的变化, 缓存并发送消息到 EdgeHub。
  • EdgeController: EdgeController 是一个扩展的 Kubernetes 控制器,管理边缘节点和 Pods 的元数据确保数据能够传递到指定的边缘节点。
  • DeviceController: DeviceController 是一个扩展的 Kubernetes 控制器,管理边缘设备,确保设备信息、设备状态的云边同步。

边缘部分

  • EdgeHub: EdgeHub 是一个 Web Socket 客户端,负责与边缘计算的云服务(例如 KubeEdge 架构图中的 Edge Controller)交互,包括同步云端资源更新、报告边缘主机和设备状态变化到云端等功能。
  • Edged: Edged 是运行在边缘节点的代理,用于管理容器化的应用程序。
  • EventBus: EventBus 是一个与 MQTT 服务器(mosquitto)交互的 MQTT 客户端,为其他组件提供订阅和发布功能。
  • ServiceBus: ServiceBus是一个运行在边缘的HTTP客户端,接受来自云上服务的请求,与运行在边缘端的HTTP服务器交互,提供了云上服务通过HTTP协议访问边缘端HTTP服务器的能力。
  • DeviceTwin: DeviceTwin 负责存储设备状态并将设备状态同步到云,它还为应用程序提供查询接口。
  • MetaManager: MetaManager 是消息处理器,位于 Edged 和 Edgehub 之间,它负责向轻量级数据库(SQLite)存储/检索元数据。

架构

kubeedge_arch.png

从架构上看,其依赖于k8s apiserver。是需要附加于已有的k8s集群之上,依赖于已有k8s集群。

功能

kubeedge 云上部分和k8s功能无差别,主要为k8s 功能。

在kubeedge概念中,edge设备与cloud设备无法双向互通,其假设cloud端开发一个用于公开访问的端点(即cloudcore的websocket端点),edge设备通过该端点与cloud 同步,上报节点信息,接受cloud任务下发。

其中运行在edge边的部分由edgecore实际控制,edgecore还向更下层设备提供http/mqtt接口用于更下层设备接入。其本身亦可为执行工作负载。

下图描述了一个典型的应用场景

kubeedge.drawio.png

核心能力

kubeedge总体来说解决了两个问题:

  • 解决了云边网络不对等问题。精简/重新设计的edgehub,解决了云无法直接访问边缘设备的问题。将原kubelet的通信和功能使用websocket进行实现。由边缘设备发起链接,通过云中的配套服务转换注册进入云集群。
  • 边缘设备管理与消息处理。
    • 设备型号注册。将一个型号的设备和其属性以k8s自定义资源注册进入云端,支持定义其属性,属性定义用于确定消息下发的数据结构。
    • 设备实例管理。将实际运行的边缘设备实例以k8s自定义资源注册进入云端,在云端对属性进行更改后,通过边缘设备mqtt将消息推送至边缘设备,边缘设备针对属性更改进行实际处理。
    • 设备实例操作。提供http接口对已经注册的边缘设备属性进行更改,更改会通过kubeedge转换为mqtt消息下发至对应设备。

资源占用

1vCPU2GB内存机器中,空载 edgecore 进程信息:

# top -p 35553
    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                                                                                     
  35553 root      20   0 1393868  81924  52304 S   3.7   4.0   1:43.06 edgecore     

# systemctl status edgecore.service 
● edgecore.service
     Loaded: loaded (/etc/systemd/system/edgecore.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2020-12-21 07:18:55 UTC; 1h 7min ago
   Main PID: 35553 (edgecore)
      Tasks: 12 (limit: 2344)
     Memory: 32.1M
     CGroup: /system.slice/edgecore.service
             └─35553 /etc/kubeedge/edgecore
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容