KubeEdge 部署指南

介绍

KubeEdge

KubeEdge 是一个致力于解决边缘场景问题的开源系统,它将容器化应用程序编排和设备管理的能力扩展到边缘设备。基于 Kubernetes,KubeEdge 为网络、应用程序部署以及云侧与边缘侧之间的元数据同步提供核心基础设施支持。KubeEdge 支持 MQTT,并允许开发人员编写自定义逻辑,在边缘上启用资源受限的设备通信。KubeEdge 由云部分和边缘部分组成,目前均已开源。

https://kubeedge.io/

iSulad

iSulad 是一个轻量级容器 runtime 守护程序,专为 IOT 和 Cloud 基础设施而设计,具有轻便、快速且不受硬件规格和体系结构限制的特性,可以被更广泛地应用在云、IoT、边缘计算等多个场景。

https://gitee.com/openeuler/iSulad

集群概览

组件版本

组件版本
OSopenEuler 22.03
Kubernetes1.20.2-4
iSulad2.0.11
KubeEdgev1.8.0

节点规划(示例)

节点名位置组件
cloud.kubeedge云侧(cloud)k8s(master)、isulad、cloudcore
edge.kubeedge边缘侧(edge)isulad、edgecore

提示:云侧和边缘侧的主机名可以使用 hostnamectl set-hostname [cloud,edge].kubeedge 命令提前设置好

准备

下载工具包

kubeedge-tools 工具包提供了完备的离线安装包以及部署脚本,降低了部署复杂度并且支持在节点无法访问外网的条件下快速搭建 KubeEdge 集群。

# 下载 kubeedge-tools 工具包并解压(包括云侧和边缘侧)
$ wget -O kubeedge-tools.zip https://gitee.com/Poorunga/kubeedge-tools/repository/archive/master.zip
$ unzip kubeedge-tools.zip

# 进入 kubeedge-tools 工具包目录(后续所有操作基于此目录)
$ cd kubeedge-tools-master

部署 k8s

以下操作仅在云侧执行

初始化云侧环境

$ ./setup-cloud.sh

参考 Kubernetes 集群部署指南 部署 k8s

提示:在云侧节点可以访问外网的条件下建议优先选用 kubeadm 工具部署 k8s,示例:

$ kubeadm init --apiserver-advertise-address=云侧IP --kubernetes-version v1.20.15 --pod-network-cidr=10.244.0.0/16 --upload-certs --cri-socket=/var/run/isulad.sock
...
Your Kubernetes control-plane has initialized successfully!
...

# 成功安装 k8s 后还需根据最后的提示将指定文件复制到指定目录:
#   mkdir -p $HOME/.kube
#   sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
#   sudo chown $(id -u):$(id -g) $HOME/.kube/config

安装云侧容器网络

目前有丰富的 cni 软件可以为 k8s 节点提供容器网络功能,比如 flannelcalicocilium 等,如果你暂时不明确选用哪款 cni 软件,可以使用下方命令安装云侧容器网络:

$ ./install-flannel-cloud.sh

检查部署情况

# 查看节点状态(Ready 即正常)
$ kubectl get nodes
NAME             STATUS   ROLES                  AGE   VERSION
cloud.kubeedge   Ready    control-plane,master   12m   v1.20.2

# 查看所有 k8s 组件运行状态(Running 即正常)
$ kubectl get pods -n kube-system
NAME                                     READY   STATUS    RESTARTS   AGE
coredns-74ff55c5b-4ptkh                  1/1     Running   0          15m
coredns-74ff55c5b-zqx5n                  1/1     Running   0          15m
etcd-cloud.kubeedge                      1/1     Running   0          15m
kube-apiserver-cloud.kubeedge            1/1     Running   0          15m
kube-controller-manager-cloud.kubeedge   1/1     Running   0          15m
kube-flannel-cloud-ds-lvh4n              1/1     Running   0          13m
kube-proxy-2tcnn                         1/1     Running   0          15m
kube-scheduler-cloud.kubeedge            1/1     Running   0          15m

部署

部署 cloudcore

以下操作仅在云侧执行

初始化集群

# --advertise-address 填写云侧节点的主机 IP 地址
$ keadm init --advertise-address="云侧IP" --kubeedge-version=1.8.0
...
CloudCore started

调整 cloudcore 配置

$ ./patch-cloud.sh

检查部署情况

# active (running)即正常
$ systemctl status cloudcore | grep running
     Active: active (running) since Fri 2022-03-04 10:54:30 CST; 5min ago

至此,云侧的 cloudcore 已部署完成,接下来部署边缘侧 edgecore。

部署 edgecore

以下命令如无特殊说明则仅在边缘侧执行

初始化边缘侧环境

$ ./setup-edge.sh

纳管边缘节点

# keadm gettoken 命令需要在云侧执行
$ keadm gettoken
96058ab80ffbeb87fe58a79bfb19ea13f9a5a6c3076a17c00f80f01b406b4f7c.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NDY0NDg4NzF9.1mJegWB7SUVjgf-OvAqILgbZXeMHR9eOzMxpNFc42SI
# 记录并保存此 token 值,后续步骤需要使用


# keadm join 命令在边缘侧执行
# --cloudcore-ipport 填写云侧节点的主机 IP 地址:10000,--token 填写上方 token 值
$ keadm join --cloudcore-ipport=云侧IP:10000 --kubeedge-version=1.8.0 --token=96058ab80ffbeb87fe58a79bfb19ea13f9a5a6c3076a17c00f80f01b406b4f7c.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NDY0NDg4NzF9.1mJegWB7SUVjgf-OvAqILgbZXeMHR9eOzMxpNFc42SI
...
KubeEdge edgecore is running...

调整 edgecore 配置

$ ./patch-edge.sh

安装边缘侧容器网络

如果你暂时不明确选用哪款 cni 软件,可以使用下方命令安装边缘侧容器网络:

# 下方命令需要在云侧执行
$ ./install-flannel-edge.sh

检查边缘节点是否纳管成功

# 下方命令需要在云侧执行(发现已经有了边缘节点)
$ kubectl get nodes
NAME             STATUS   ROLES                  AGE     VERSION
cloud.kubeedge   Ready    control-plane,master   1h      v1.20.2
edge.kubeedge    Ready    agent,edge             10m     v1.19.3-kubeedge-v1.8.0

至此,KubeEdge 集群部署完成,接下来我们测试一下从云侧下发应用到边缘侧。

部署应用

以下命令在云侧执行

部署nginx

$ kubectl apply -f yamls/nginx-deployment.yaml
deployment.apps/nginx-deployment created

# 查看应用是否部署到了边缘侧(Running 即正常)
$ kubectl get pod -owide | grep nginx
nginx-deployment-84b99f4bf-jb6sz   1/1     Running   0          30s   10.244.1.2   edge.kubeedge   <none>           <none>

测试功能

# 进入边缘侧节点,访问 nginx 应用
$ curl 10.244.1.2:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

至此,KubeEdge 部署已经全流程打通。

文档捉虫

“有虫”文档片段

问题描述

提交类型 issue

有点复杂...

找人问问吧。

PR

小问题,全程线上修改...

一键搞定!

问题类型
规范和低错类

● 错别字或拼写错误;标点符号使用错误;

● 链接错误、空单元格、格式错误;

● 英文中包含中文字符;

● 界面和描述不一致,但不影响操作;

● 表述不通顺,但不影响理解;

● 版本号不匹配:如软件包名称、界面版本号;

易用性

● 关键步骤错误或缺失,无法指导用户完成任务;

● 缺少必要的前提条件、注意事项等;

● 图形、表格、文字等晦涩难懂;

● 逻辑不清晰,该分类、分项、分步骤的没有给出;

正确性

● 技术原理、功能、规格等描述和软件不一致,存在错误;

● 原理图、架构图等存在错误;

● 命令、命令参数等错误;

● 代码片段错误;

● 命令无法完成对应功能;

● 界面错误,无法指导操作;

风险提示

● 对重要数据或系统存在风险的操作,缺少安全提示;

内容合规

● 违反法律法规,涉及政治、领土主权等敏感词;

● 内容侵权;

您对文档的总体满意度

非常不满意
非常满意
提交
根据您的反馈,会自动生成issue模板。您只需点击按钮,创建issue即可。