UI 上看边缘节点的监控指标得等 KubeSphere v3.1 , 按上面步骤配置后可以用kubectl top nodes/pods 看

    11 天 后

    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&timestamps=true: dial tcp 10.168.1.165:10350: connect: connection refused”。
    看到您文中第一句写道:“KubeEdge 原版的云端组件,在边缘节点加入后,需要手动配置 iptables 等选项”,这个操作我这边没有做过,也没看到有相关的参考文档,可以请教一下您大概需要怎么操作吗?谢谢您!

      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

          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 metrics-server 是正常运行的,版本也是 v0.4.1

            Ma-Dan 请按照边缘节点加入后的第三步为节点设置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 无法访问。不知道是什么原因引起的,还请您多多指教,谢谢!

              工作负载:

              服务:

                csuffyy metrics-server是正常工作了,需要更新ks-console。请将kubesphere-system下的deployment ks-console的镜像修改为 kubespheredev/ks-console:latest ,应该就能正确显示了。
                kubectl edit deployments.apps -n kubesphere-system ks-console

                  csuffyy 检查了一下,应该是ks-apiserver尚未更新,请问您可以自己编译kubesphere的ks-apiserver么?使用这个PR的修改 kubesphere/kubesphere#3173 编译出ks-apiserver镜像,再更新 kubesphere 下 ks-apiserver deployment,就可以读取显示边缘节点的监控值了。

                    Ma-Dan 还从来没做过这个操作呢,看起来比较陌生,不过我先尽力尝试一下吧,谢谢您!

                      csuffyy 这部分功能将会集成到v3.1中,那时就不用这样操作了,目前还在开发测试过程中,所以有时会有这样的过程。感谢您的耐心试用,使用中的问题和建议欢迎随时跟我们沟通!

                        11 天 后

                        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