Kubernetes 集成 KubeEdge 需要注意的问题汇总
作者:朱含
近期小伙伴对在使用 KubeSphere v3.1 上集成边缘节点有不少疑问,这里说明下 guide 文档地址,然后可以把这方面的问题汇总在这里,方便后续的小伙伴排查问题,也欢迎大家继续补充。
官方 guide 文档传送门
1. IP、端口开放问题
如果使用 ks-installer 安装,需要激活 KubeEdge 以及配置 master节点对应的外网 IP 地址.
假设集群 master 节点 IP 192.168.10.7, 需要开放的外网端口如下:
序号 | 内网IP | 内网端口(NodePort) | 外网端口 | |
---|---|---|---|---|
1 | 192.168.10.7 | 30000 | 10000 | https协议端口 |
2 | 192.168.10.7 | 30001 | 10001 | Quic协议端口 |
3 | 192.168.10.7 | 30002 | 10002 | cloudhub首次token获取证书 |
4 | 192.168.10.7 | 30003 | 10003 | cloudstream端口 |
5 | 192.168.10.7 | 30004 | 10004 | tunnel端口(edgestream连接) |
外网端口需要防火墙通过。
如果忘记了设置 ks-installer 中 KubeEdge 组件部分中外网访问 IP,cloudhub 起不来,可以使用以下命令补救:
kubectl -n kubeedge edit cm cloudcore
2. 获取边缘节点日志、metrics
边缘节点与 master 节点不在一个局域网的情况较多,因此我们在上面设计使用外网端口通信。另外,由于 KubeEdge 完成 kubectl exec,获取 logs 以及 metrics 的功能,依赖虚拟 IP 进行相应的 iptable 转发到 cloudhub 对应的端口,继而获取边缘端的数据,也就是通过 edgemesh 实现,所以边缘节点绑定的虚拟 IP 和边缘节点名称必须是唯一的,要自行按规律维护,注意这个虚拟 IP 不能填边缘节点内网 IP,最好选择与内网不冲突的网端,同时要保证 metrics-server 组件处于开启状态,需要更新为 0.4.1 版本以上以适应 KubeEdge(当前版本主要通过 metrics-server 获取边缘 metrics)。
3. 如果边缘节点使用外网 IP 和端口通信,有些 daemonset 的容忍度比较强,比如 Calico,需要给它们 patch 一下,避免调度到边缘端
#!/bin/bash
NodeSelectorPatchJson='{"spec":{"template":{"spec":{"nodeSelector":{"node-role.kubernetes.io/master": "","node-role.kubernetes.io/worker": ""}}}}}'
NoShedulePatchJson='{"spec":{"template":{"spec":{"affinity":{"nodeAffinity":{"requiredDuringSchedulingIgnoredDuringExecution":{"nodeSelectorTerms":[{"matchExpressions":[{"key":"node-role.kubernetes.io/edge","operator":"DoesNotExist"}]}]}}}}}}}'
edgenode="edgenode"
if [ $1 ]; then
edgenode="$1"
fi
namespaces=($(kubectl get pods -A -o wide |egrep -i $edgenode | awk '{print $1}' ))
pods=($(kubectl get pods -A -o wide |egrep -i $edgenode | awk '{print $2}' ))
length=${#namespaces[@]}
for((i=0;i<$length;i++));
do
ns=${namespaces[$i]}
pod=${pods[$i]}
resources=$(kubectl -n $ns describe pod $pod | grep "Controlled By" |awk '{print $3}')
echo "Patching for ns: $ns, resources: $resources"
kubectl -n $ns patch $resources --type merge --patch "$NoShedulePatchJson"
sleep 1
done
4. kubelet cgroup driver: "cgroupfs" is different from docker cgroup driver: "systemd"
原因:kubelet 和 master 端使用的 cgroup 不一致导致
解决办法:
添加配置 "exec-opts": ["native.cgroupdriver=systemd"], 然后重启 Docker,systemctl daemon-reload && systemctl restart kubelet
参考描述:
- kubeedge/kubeedge#1772 (comment) cgroup driver shouldn't be taken care by the keadm, I think this is also true for "kubeadm", all that care about the cgroup driver is actually which cri you are using, for example, in your case, you are using docker, so you just need to update the docker configuration to use "systemd" instead.
5. 边缘节点和 Kubernetes 在一个局域网时,如何加入 KubeSphere 纳管?
如果边缘节点和 Kubernetes 集群在一个局域网,可以使用 nodePort 方式加入边缘节点,默认已开放的 nodeport 端口为 30000-30004,所以边缘节点 join 集群的时候得将外部端口 10000-10004 改为 30000-30004,也就是将其中的 --cloudcore-ipport=192.168.x.x:10000 --quicport 10001 --certport 10002 --tunnelport 10004
改为 --cloudcore-ipport=192.168.x.x:30000 --quicport 30001 --certport 30002 --tunnelport 30004
,不过需要指出的是,设计是从外网考虑,请明确边缘节点的应用场景。
更多请参考 guide 指南。
6. 边缘节点 pod metrics 支持的最低 Docker 版本
目前边缘端支持的 Docker 版本应该大于等于 v19.3.0,具体原因可参考 https://kubesphere.com.cn/forum/d/4494-kubesphere-v310/8
KubeEdge v1.6.2 已发布,目前测试该 bug 已经修复,见图:
边缘端需要升级到 v1.6.2,也可以添加以下配置进行修改:
apiVersion: v1
kind: ConfigMap
metadata:
name: edge-watcher-config
namespace: kubeedge
data:
version: v1.6.2
region: zh
7. node metrics 不正常显示排除指南
-
检查metrics-server服务是否正常 检查 metrics-server deployment 是否正常,版本是否符合要求(v0.4.1 以上),查看 kubectl top 是否异常,如果异常,可以重启, 或者手动安装:
kubectl apply -f https://raw.githubusercontent.com/kubesphere/ks-installer/master/roles/metrics-server/files/metrics-server/metrics-server.yaml
-
其他节点都有 metrics,只有边缘节点没有 metrics
- 检查 iptables 是否建立正确的转发, 用以下命令查看 iptables pod 部署在哪个 node:
kubectl get pods -n kubeedge -o wide
-
在对应node上获取10350的nat转发规则, 确认转发目的地在k8s master or node ip上
-
如果转发目的地不对,可以用下面的做法:
kubectl -n kubeedge edit cm edge-watcher
修改完后需要重启edge-watcher-controller-manager deployment
8. 证书问题
kubectl delete secret casecret cloudcoresecret -n kubeedge
需要重启 cloudcore。
本文由博客一文多发平台 OpenWrite 发布!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
深度解析HashMap底层实现架构
摘要:分析Map接口的详细使用以及HashMap的底层是如何实现的? 本文分享自华为云社区《【图文并茂】深度解析HashMap高频面试及底层实现结构!【奔跑吧!JAVA】》,原文作者:灰小猿 。 Map接口大家应该都听说过吧?它是在Java中对键值对进行存储的一种常用方式,同样其中的HashMap我相信大家应该也不会陌生,一说到HashMap,我想稍微知道点的小伙伴应该都说是:这是存储键值对的,存储方式是数组加链表的形式。但是其中真正是如何进行存储以及它的底层架构是如何实现的,这些你有了解吗? 可能很多小伙伴该说了,我只需要知道它怎么使用就可以了,不需要知道它的底层实现,但其实恰恰相反,只知道它怎么使用是完全不够的,而且在Java开发的面试之中,HashMap底层实现的提问和考察已经是司空见惯的了。所以今天我就来和大家分析一下Map接口的详细使用以及HashMap的底层是如何实现的? 小伙伴们慢慢往下看,看完绝对会让你收获满满的! 1,Map接口和List接口是什么关系? 对于这个问题,如果非要说这两个接口之间存在怎样的关系的话,那无非就只有一个,就都是集合。存放数据的。在其他上面,M...
-
下一篇
前端开发:Vue项目报错Unknown custom element:XXX - did you register…的解决方法
导读 在前端开发的时候,运行项目,遇到项目报错Unknown custom element:XXX - did you register the component correctly…的解决方法。该报错也是在前端开发过程中比较常见的,那么本文就来分享一下关于该报错的解决方法。 问题 前段时间在做前端项目的时候,遇到了一个关于饿了么框架的报错问题,具体报错信息如下所示: [Vue warn]: Unknown custom element: <table-page> - did you register the component correctly? For recursive components, make sure to provide the "name" option. found in ---> <SocialFundAdjustList> at src/views/SocialFundManagement/SocialFundAdjustList.vue <App> at src/App.vue ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS关闭SELinux安全模块
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker安装Oracle12C,快速搭建Oracle学习环境