Ma-Dan 您好!非常感谢您编写的《KubeSphere 集成 KubeEdge 快速上手指南》,为我们以后集成KubeEdge提供了很好的参考!但是我这边之前已经按照原始的方式部署好了KubeSphere和KubeEdge环境,在KubeSphere界面也能正常显示出边缘节点,但是无法正常显示边缘节点的资源使用情况,而且在查看边缘节点容器日志的时候会显示错误
“Internal Server Error
Get https://10.168.1.165:10350/containerLogs/wenchi/suanfaceshi-6877797bc4-mthhq/suanfaceshi?tailLines=1000×tamps=true: dial tcp 10.168.1.165:10350: connect: connection refused”。
看到您文中第一句写道:“KubeEdge 原版的云端组件,在边缘节点加入后,需要手动配置 iptables 等选项”,这个操作我这边没有做过,也没看到有相关的参考文档,可以请教一下您大概需要怎么操作吗?谢谢您!
KubeSphere 集成 KubeEdge 快速上手指南
Ma-DanK零S
- 已编辑
csuffyy 首先要保证 10.168.1.165 这个IP本身不和云端其它节点冲突。手动操作就是在ks-apiserver和metrics-server所在的节点(node-ip)上,增加如下两项IPTables。这两个组件也要以Hostnetwork运行。
iptables -t nat -A OUTPUT -d 10.168.1.165 -p tcp –dport 10350 -j DNAT –to-destination node-ip:31003
iptables -t nat -A OUTPUT -d 10.168.1.165 -p tcp –dport 10250 -j DNAT –to-destination node-ip:31003
这样log和metrics才能访问到cloudcore并转发到边缘端。
还是建议使用iptables-operator+edge-watcher方式,它是自动完成了这个手动操作。
Ma-Dan 谢谢您的热心回复!看来手动操作确实很麻烦,我按照您上面的指导操作,结果还是没有成功,最后重置了系统,并使用您本文中介绍的方式进行了安装。有区别的一点是,我因为是在局域网环境下,没有公网地址,所以使用的内外网IP地址及端口都是一样的(我使用的端口号是31000-31004),然后边端接入的指令也做了一点小的改动,原文给出的边端接入指令中 –certport 10012 ,我这里改成了 –certport 3102 ,总体来说,现在可以正常查看边端容器的日志了,但是有发现一些小的问题,具体如下:
1、边缘节点的资源使用实时监测中的CPU和内存使用情况不能正常显示:
2、边缘节点初始的几个容器组运行异常:
比如,node-exporter容器的日志:
standard_init_linux.go:211: exec user process caused “exec format error”
以上情况不知道是不是因为边缘端的系统架构是Arm64引起的,晚点我再使用X86架构的边端测试一下。
再次谢谢 Ma-Dan !
Ma-DanK零S
- 已编辑
csuffyy 第一个问题,请先看下kube-system下的metrics-server是否正常运行,需要v0.4.1版本,并且以hostnetwork方式工作。第二个问题,是边缘节点角色没有设置taint造成的,即使是x64节点以边缘角色加入后,也会这样,只是不会报exec format error错误,但是实际负载也不能正常运行,因为这些daemonset主要是在云端工作的。请按照边缘节点加入后的第三步为节点设置taint(kubectl taint nodes edgenode-1 node.kubeedge.io=edge:NoSchedule),然后这些错误的容器组目前先手动删除,只要不产生新的就可以。
Ma-Dan 另外还发现了一个新的问题,我创建了一个工作负载和对应的服务,如果调度到master节点(10.168.1.128),则服务 http://10.168.1.128:30428 能正常访问,但是如果调度到edgenode节点(10.168.1.155),则服务 http://10.168.1.155:30428 无法访问。不知道是什么原因引起的,还请您多多指教,谢谢!
工作负载:
服务:
Ma-DanK零S
csuffyy 您好!目前kubeedge的网络svc跟云端网络是暂时无法互通的。
但是kubeedge提供了在边缘端网络内,工作负载之间互相以svc名称访问的方式edgemesh,请参考这篇文档的做法,使能edgemesh,并在边缘端的workload之间互访svc。
https://github.com/kubeedge/kubeedge/blob/master/docs/contributing/edgemesh_guide.md
Ma-DanK零S
csuffyy 检查了一下,应该是ks-apiserver尚未更新,请问您可以自己编译kubesphere的ks-apiserver么?使用这个PR的修改 kubesphere/kubesphere#3173 编译出ks-apiserver镜像,再更新 kubesphere 下 ks-apiserver deployment,就可以读取显示边缘节点的监控值了。
Ma-Dan 您好!ks-apiserver镜像我尝试编译了一下,没有成功。请问可以直接使用这些开发版的镜像吗?
https://hub.docker.com/r/kubespheredev/ks-apiserver/tags?page=1&ordering=last_updated
刚刚测试了一下,换成最新的 kubespheredev/ks-apiserver:latest 镜像仍然无效
Ma-Dan (3) 加入集群后,为边缘节点设置 taint
kubectl taint nodes edgenode-1 node.kubeedge.io=edge:NoSchedule
边缘节点这样设置taint之后,工作负载无法被调度到边缘节点了,显示“无法调度”。删除taint之后,通过nodeSelector指定调度到边缘节点,也会一直显示“等待中”。
使用 kubectl logs 命令查看对应的日志内容是:
Error from server: Get https://192.168.100.2:10350/containerLogs/wenchi/hello-5454cf67d7-q47t4/hello: dial tcp 192.168.100.2:10350: connect: connection refused
Ma-Dan 您好!针对边缘节点无法使用GPU的问题,我新创建了一个帖子,https://kubesphere.com.cn/forum/d/3515-kubeedgegpu,可以请您帮忙看一下吗?谢谢了!
@Ma-Dan 您好,请问下你们定制的keadm 能否提供下git地址?
wenhuwangK零S
hello 老哥 问一下kubeedge v1.6.1在k8s v1.20版本上部署会有问题么?