作者:朱含
近期小伙伴对在使用 KubeSphere v3.1 上集成边缘节点有不少疑问,这里说明下 guide 文档地址,然后可以把这方面的问题汇总在这里,方便后续的小伙伴排查问题,也欢迎大家继续补充。
官方 guide 文档传送门
- 激活kubeedge
- 边缘节点加入
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