首页 > 其他分享 >部署KubeEdge、Edgemesh、Sedna

部署KubeEdge、Edgemesh、Sedna

时间:2024-07-05 20:20:48浏览次数:15  
标签:KubeEdge created -- edgemesh Edgemesh agent io kubeedge Sedna

https://neuromansser.tech/posts/部署kubeedgeedgemeshsedna/

 

部署KubeEdge、Edgemesh、Sedna

Posted on Jun 10, 2024

下载keadm

下载keadm用于安装KubeEdge,官方文档:https://kubeedge.io/docs/setup/install-with-keadm/ (英文版里有下载的部分中文版文档却没有,就有点迷惑…)

wget https://github.com/kubeedge/kubeedge/releases/download/v1.16.2/keadm-v1.16.2-linux-amd64.tar.gz

tar -zxvf keadm-v1.16.2-linux-amd64.tar.gz
cp keadm-1.16.2-linux-amd64/keadm/keadm /usr/local/bin/keadm   

设置云端(KubeEdge主节点)

sudo keadm init --advertise-address=主机ip地址 --kubeedge-version=v1.16.2 --set iptablesManager.mode="external" --set cloudCore.modules.dynamicController.enable=true 

还有一个配置项其实是--kube-config=/root/.kube/config,但默认就是这个我就删掉了,如果config文件不在默认路径需要设置一下,具体也可以keadm --help查看一下。 如果没有成功,可能有很多很多原因啦(心酸)。 一个原因可能是没有移除node上的污点,导致node上无法部署业务服务,解决方法:

kubectl taint nodes master node-role.kubernetes.io/control-plane:NoSchedule-

还有一个原因可能是cloudcore镜像没pull下来,这个时候可以再检查一下给containerd配置的代理是否生效,或者用国内镜像来代替,我当时用的是渡渡鸟镜像同步站,搜索的话能看到我当时用的cloudcore v1.16.2版本。

kubectl edit pod/daemonset/deployment ** -n **

然后替换为国内镜像的地址就好了。 我还遇到过disk pressure的问题…但是这个应该比较少见。 总之遇到问题积极describe pod/node查看日志信息就好啦。

当cloudcore正常运行后,我们就要keadm gettoken --kube-config=...查看token,准备部署edgecore。

设置边端(KubeEdge工作节点)

在边端设备上(已经装好containerd和keadm):

sudo keadm join  --kubeedge-version=1.16.2 --cloudcore-ipport="云端ip地址":10000  --remote-runtime-endpoint=unix:///run/containerd/containerd.sock --cgroupdriver=systemd --token=**

感觉前面如果都做好了一般没有问题,如果出现问题,记得查看日志,还要多搜搜Github上的issue。

部署EdgeMesh

这是我犯错最多的地方,也是花费时间最多的地方,如果没有部署好的话,后面联合推理实例是根本跑不起来的。 官方文档:https://edgemesh.netlify.app/guide/

开启边缘Kube-API端点功能

  • 1.云端开启dynamicController模块 如果是用上面的命令部署的cloudcore,这里是已经开启的,因为我加了--set cloudCore.modules.dynamicController.enable=true
  • 2.边缘端打开metaServer 模块,注意配置完成后,要重启edgecore
vim /etc/kubeedge/config/edgecore.yaml
modules:
  ...
  edgeMesh:
    enable: false
  ...
  metaManager:
    metaServer:
      enable: true

重启edgecore

systemctl restart edgecore
  • 3.在边缘节点,配置clusterDNS和clusterDomain,配置完成后,需要重启edgecore
$ vim /etc/kubeedge/config/edgecore.yaml
modules:
  ...
  edged:
    ...
    tailoredKubeletConfig:
      ...
      clusterDNS:
      - 169.254.96.16
      clusterDomain: cluster.local
...

一定要注意配置的位置(都是泪啊)… clusterDNS的值不要变。 如同文档里说的,clusterDNS 设置的值 ‘169.254.96.16’ 来自于 commonConfig在新窗口打开 中 bridgeDeviceIP 的默认值,正常情况下无需修改,非得修改请保持两者一致。 重启edgecore。

systemctl restart edgecore
  • 4.最后,在边缘节点,测试边缘Kube-API端点功能是否正常:
$ curl 127.0.0.1:10550/api/v1/services
{"apiVersion":"v1","items":[{"apiVersion":"v1","kind":"Service","metadata":{"creationTimestamp":"2021-04-14T06:30:05Z","labels":{"component":"apiserver","provider":"kubernetes"},"name":"kubernetes","namespace":"default","resourceVersion":"147","selfLink":"default/services/kubernetes","uid":"55eeebea-08cf-4d1a-8b04-e85f8ae112a9"},"spec":{"clusterIP":"10.96.0.1","ports":[{"name":"https","port":443,"protocol":"TCP","targetPort":6443}],"sessionAffinity":"None","type":"ClusterIP"},"status":{"loadBalancer":{}}},{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{"prometheus.io/port":"9153","prometheus.io/scrape":"true"},"creationTimestamp":"2021-04-14T06:30:07Z","labels":{"k8s-app":"kube-dns","kubernetes.io/cluster-service":"true","kubernetes.io/name":"KubeDNS"},"name":"kube-dns","namespace":"kube-system","resourceVersion":"203","selfLink":"kube-system/services/kube-dns","uid":"c221ac20-cbfa-406b-812a-c44b9d82d6dc"},"spec":{"clusterIP":"10.96.0.10","ports":[{"name":"dns","port":53,"protocol":"UDP","targetPort":53},{"name":"dns-tcp","port":53,"protocol":"TCP","targetPort":53},{"name":"metrics","port":9153,"protocol":"TCP","targetPort":9153}],"selector":{"k8s-app":"kube-dns"},"sessionAffinity":"None","type":"ClusterIP"},"status":{"loadBalancer":{}}}],"kind":"ServiceList","metadata":{"resourceVersion":"377360","selfLink":"/api/v1/services"}}

如果返回值是空列表,或者响应时长很久(接近 10s)才拿到返回值,说明你的配置可能有误,请仔细检查。 完成上述步骤之后,KubeEdge 的边缘 Kube-API 端点功能就已经开启了,接着继续部署EdgeMesh即可。

开始部署EdgeMesh

按照文档中先决条件清除一下污点,添加过滤标签。

$ kubectl taint nodes --all node-role.kubernetes.io/master-
$ kubectl label services kubernetes service.edgemesh.kubeedge.io/service-proxy-name=""

然后手动安装EdgeMesh:

  • 从Github上clone下EdgeMesh
$ git clone https://github.com/kubeedge/edgemesh.git
$ cd edgemesh
  • 创建CRD
$ kubectl apply -f build/crds/istio/
customresourcedefinition.apiextensions.k8s.io/destinationrules.networking.istio.io created
customresourcedefinition.apiextensions.k8s.io/gateways.networking.istio.io created
customresourcedefinition.apiextensions.k8s.io/virtualservices.networking.istio.io created
  • 部署edgemesh-agent 在下面有一个提示,需要修改build/agent/resources/04-configmap.yaml文件中relayNodes部分,并重新生成PSK密码。 relaynode一般就配一个云上的节点作为中继,用master,ip就是master节点ip。PSK根据注释中的网址生成一下就可以,不过自己做实验的话其实不生成也行(bushi
relayNodes:
- nodeName: cloud #master的名字
  advertiseAddress:
  - *.*.*.*  #master的ip

后面的注释掉就好了。 然后部署edgemesh-agent

$ kubectl apply -f build/agent/resources/
serviceaccount/edgemesh-agent created
clusterrole.rbac.authorization.k8s.io/edgemesh-agent created
clusterrolebinding.rbac.authorization.k8s.io/edgemesh-agent created
configmap/edgemesh-agent-cfg created
configmap/edgemesh-agent-psk created
daemonset.apps/edgemesh-agent created
  • 检查一下
$ kubectl get all -n kubeedge -o wide
NAME                       READY   STATUS    RESTARTS   AGE   IP              NODE         NOMINATED NODE   READINESS GATES
pod/edgemesh-agent-7gf7g   1/1     Running   0          39s   192.168.0.71    k8s-node1    <none>           <none>
pod/edgemesh-agent-fwf86   1/1     Running   0          39s   192.168.0.229   k8s-master   <none>           <none>
pod/edgemesh-agent-twm6m   1/1     Running   0          39s   192.168.5.121   ke-edge2     <none>           <none>
pod/edgemesh-agent-xwxlp   1/1     Running   0          39s   192.168.5.187   ke-edge1     <none>           <none>

NAME                            DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE   CONTAINERS       IMAGES                           SELECTOR
daemonset.apps/edgemesh-agent   4         4         4       4            4           <none>          39s   edgemesh-agent   kubeedge/edgemesh-agent:latest   k8s-app=kubeedge,kubeedge=edgemesh-agent

这是官网的检查方法,但感觉没太大用处,就算是running也有可能不能正常工作的。 可以在边端

crictl logs edgemesh的containerID

检查一下,看看日志是不是正常的,或者卡在了哪个地方,如果是正常的会有heartbeat定期发送。

运行EdgeMesh测试案例

墙裂推荐跑一下,能发现很多问题。向前辈求助,前辈也都会先问测试案例有没有跑通。我跑了带星号的那个跨边云通信测试(Cross-Edge-Cloud)

  • 1.部署测试pod。
$ kubectl apply -f examples/test-pod.yaml
pod/alpine-test created
pod/websocket-test created
  • 2.部署边云通信测试需要的
$ kubectl apply -f examples/cloudzone.yaml
namespace/cloudzone created
deployment.apps/tcp-echo-cloud created
service/tcp-echo-cloud-svc created
deployment.apps/busybox-sleep-cloud created
$ kubectl apply -f examples/edgezone.yaml
namespace/edgezone created
deployment.apps/tcp-echo-edge created
service/tcp-echo-edge-svc created
deployment.apps/busybox-sleep-edge created

当时实验进行到这一步的时候我遇到了第一个问题,应该被部署到边端,namespace为edgezone的pod一直处于ContainerCreating状态,因为Pod没办法被部署上,自然没办法查看日志(crictl logs containerID),又没办法从云端查看(kubectl logs),kubectl describe pod信息量又为0,所以我就systemctl status edgecore,终于看到了相关报错信息(虽然好像有更好的方法?),原因是边端/run/flannel/subnet.env文件不存在,我看了一下云端有,于是就在边端创造了一份和云端内容相同的文件,过了一小会pod都显示为running状态。

  • 3.云访问边
$ BUSYBOX_POD=$(kubectl get all -n cloudzone | grep pod/busybox | awk '{print $1}')
$ kubectl -n cloudzone exec $BUSYBOX_POD -c busybox -i -t -- sh
$ telnet tcp-echo-edge-svc.edgezone 2701
Welcome, you are connected to node ke-edge1.
Running on Pod tcp-echo-edge.
In namespace edgezone.
With IP address 172.17.0.2.
Service default.
Hello Edge, I am Cloud.
Hello Edge, I am Cloud.

我是没有遇到问题的。

  • 4.边访问云 官网用的是docker,所以用了docker ps,用crictl就直接
crictl ps
# 找到busybox的containerID,然后
crictl exec -it containerID sh

然后我运行

$ telnet tcp-echo-cloud-svc.cloudzone 2701

出现了问题,大概是name or server unknow,这个其实是因为我不小心把边缘Kube-API给配置错了导致的。 然后我配置正确之后,再进行这一步,又出现了问题,显示no route to host,和这个issue问题一样,然后我按照issue里说的全网最全EdgeMesh Q&A手册问题三,清理iptables规则,然后重新部署edgemesh,发现就可以跑通了!太激动了当时。

$ telnet tcp-echo-cloud-svc.cloudzone 2701
Welcome, you are connected to node k8s-master.
Running on Pod tcp-echo-cloud.
In namespace cloudzone.
With IP address 10.244.0.8.
Service default.
Hello Cloud, I am Edge.
Hello Cloud, I am Edge.

到这里EdgeMesh就算真正部署成功了。不知道因为EdgeMesh我花费了多少时间。不过其实都是学习必须要经历。自己一开始没有看日志的意识,自己瞎尝试解决问题,现在慢慢出问题第一反应找日志,然后就可以快速解决问题。

部署Sedna

官方文档:https://sedna.readthedocs.io/en/latest/setup/install.html

curl https://raw.githubusercontent.com/kubeedge/sedna/main/scripts/installation/install.sh | SEDNA_ACTION=create bash -

有一个问题是,这个脚本有时候识别不出来版本号,所以要留意一下它输出的信息,如果没有识别出版本号,中断安装过程,卸载Sedna,然后再试一下。

# 卸载的命令
curl https://raw.githubusercontent.com/kubeedge/sedna/main/scripts/installation/install.sh | SEDNA_ACTION=create bash -

然后正常的话就正常运行啦,不正常的话有可能还是需要换成国内镜像。

参考文章

  • k8s+kubeedge+sedna安装全套流程+避坑指南+解决办法:https://blog.csdn.net/MacWx/article/details/130200209

标签:KubeEdge,created,--,edgemesh,Edgemesh,agent,io,kubeedge,Sedna
From: https://www.cnblogs.com/ztguang/p/18286535

相关文章

  • KubeEdge v1.17.0发布!数据处理能力与易用性全面提升
    https://developer.huawei.com/consumer/cn/forum/topic/0207151855682956382 KubeEdgev1.17.0发布!数据处理能力与易用性全面提升软件开发发表于2024-05-2314:08发布于:广东50查看摘要:一文看完新增7个特性功能,为边缘节点和设备带来更强的数据处理能力。本文分享自......
  • 硬核解读KubeEdge基于大模型边云协同的机器人语义分割算法
    本文分享自华为云社区《KubeEdge:基于大模型边云协同的机器人语义分割算法》,作者:云容器大未来。近年来快速发展的视觉大模型(例如SAM)在促进高精度的智能感知方面具有很大的潜力。然而,边缘环境中的资源限制往往会限制这种视觉大模型在本地部署,从而产生相当大的推理延迟,导致难以......
  • KubeEdge v1.17.0发布!数据处理能力与易用性全面提升
    本文分享自华为云社区《KubeEdgev1.17.0发布!数据处理能力与易用性全面提升》 ,作者:云容器大未来。KubeEdge社区v1.17.0版本正式发布。新版本为边缘节点和设备带来了更多的新能力,同时持续在易用性上做了提升。KubeEdgev1.17.0新增特性:支持边缘Pods使用In......
  • 使用 Prometheus 在 KubeSphere 上监控 KubeEdge 边缘节点(Jetson) CPU、GPU 状态
    作者:朱亚光,之江实验室工程师,云原生/开源爱好者。KubeSphere边缘节点的可观测性在边缘计算场景下,KubeSphere基于KubeEdge实现应用与工作负载在云端与边缘节点的统一分发与管理,解决在海量边、端设备上完成应用交付、运维、管控的需求。根据KubeSphere的支持矩阵,只有1.23......
  • KubeEdge v1.16.0 版本发布!10项新增特性
    本文分享自华为云社区《KubeEdgev1.16.0版本发布!集群升级部署易用性大幅提升》,作者:容器大未来。北京时间2024年1月23日,KubeEdge发布1.16.0版本。新版本新增多个增强功能,在集群升级、集群易用性、边缘设备管理等方面均有大幅提升。KubeEdgev1.16.0新增特性:集群升级:支......
  • KubeEdge EdgeMark 测试环境从零开始搭建
    https://blog.csdn.net/u010549795/article/details/132557648 EdgeMark测试环境从零开始搭建KubeEdge也提供了类似KubeMark的模拟大规模集群的工具,值得注意的是目前EdgeMark只能模拟edgecore,无法模拟edgemesh,所以如果是对网络方面的测试,还是建议老老实实装虚拟机环境配置使用v......
  • KubeEdge介绍和设计原理
    http://bingerambo.com/posts/2021/05/kubeedge%E4%BB%8B%E7%BB%8D%E5%92%8C%E8%AE%BE%E8%AE%A1%E5%8E%9F%E7%90%86/#edgecore  KubeEdge介绍和设计原理Binge 收录于K8S 2021-05-26  约9884字  预计阅读20分钟  本文总阅读量6183次 KubeEdge架构和组......
  • KubeEdge部署 完美运行 附问题解决方法
    云端部署环境准备一、部署前工作(k8s、docker安装及配置、初始化集群、golang安装、keadm安装)配置网络参数cat>>/etc/hosts<<EOF#GitHubStart52.74.223.119github.com192.30.253.119gist.github.com54.169.195.247api.github.com185.199.111.153assets-cdn.gith......
  • KubeEdge v1.15.0发布!新增5大特性
    本文分享自华为云社区《KubeEdgev1.15.0发布!新增Windows边缘节点支持,基于物模型的设备管理,DMI数据面支持等功能》,作者:云容器大未来。北京时间2023年10月13日,KubeEdge发布v1.15.0版本。新版本新增多个增强功能,在边缘节点管理、边缘应用管理、边缘设备管理等方面均有大幅提......
  • KubeEdge Sedna v0.6 & Ianvs v0.2 重磅发布:边云协同终身学习全面升级
    本文分享自华为云社区《 KubeEdgeSednav0.6&Ianvsv0.2重磅发布:边云协同终身学习全面升级》,作者:云容器大未来。本文探讨了边缘智能应用在开放世界问题中的挑战和解决方案,重点介绍了KubeEdgeSIGAI发布的KubeEdgeSednav0.6及Ianvsv0.2,这两个开源项目全面提升了边云......