KubeEdge 部署指南
介绍
KubeEdge
KubeEdge 是一个致力于解决边缘场景问题的开源系统,它将容器化应用程序编排和设备管理的能力扩展到边缘设备。基于 Kubernetes,KubeEdge 为网络、应用程序部署以及云侧与边缘侧之间的元数据同步提供核心基础设施支持。KubeEdge 支持 MQTT,并允许开发人员编写自定义逻辑,在边缘上启用资源受限的设备通信。KubeEdge 由云部分和边缘部分组成,目前均已开源。
iSulad
iSulad 是一个轻量级容器 runtime 守护程序,专为 IOT 和 Cloud 基础设施而设计,具有轻便、快速且不受硬件规格和体系结构限制的特性,可以被更广泛地应用在云、IoT、边缘计算等多个场景。
集群概览
组件版本
组件 | 版本 |
---|---|
OS | openEuler 22.09 |
Kubernetes | 1.20.2-4 |
iSulad | 2.0.11 |
KubeEdge | v1.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 节点提供容器网络功能,比如 flannel、calico、cilium 等,如果你暂时不明确选用哪款 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 部署已经全流程打通。