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

                    1 个月 后
                    4 个月 后

                    hello 老哥 问一下kubeedge v1.6.1在k8s v1.20版本上部署会有问题么?

                    1 年 后

                    边缘节点加入后 容器组建立有问题

                    pod 都是pending 或 terminating

                    bash-5.1# kubectl get pod
                    NAME                                    READY   STATUS        RESTARTS   AGE
                    default-http-backend-696d6bf54f-dgnbw   1/1     Running       0          23h
                    edgenode-rk3568-shell-access            0/1     Pending       0          23m
                    edgenode-wjqu-shell-access              0/1     Terminating   0          5h15m
                    kubectl-admin-b49cf5585-jsmwk           1/1     Running       0          23h